首页 > 其他分享 >[USACO03Open] Lost Cows

[USACO03Open] Lost Cows

时间:2024-11-23 21:33:21浏览次数:6  
标签:Lost 前面 ll ii USACO03Open ls 编号 Cows 奶牛

题目

Description

有 NN 头奶牛,已知它们的编号为 1∼N1∼N 且各不相同,但不知道每头奶牛的具体编号。

现在这 NN 头奶牛站成一列,已知第 ii 头奶牛前面有 aiai​ 头牛编号小于它,求每头奶牛的编号。

Input

第 11 行,输入一个整数 NN

第 2...N2...N 行,每行输入一个整数 aiai​,表示第 ii 头奶牛前面有 aiai​ 头奶牛的编号小于它(因为第一头奶牛前面没有奶牛,所以 ii 从 22 开始)。

Output

输出包含 NN 行,每行输出一个整数表示奶牛的编号。

第 ii 行输出第 ii 头奶牛的编号。

Sample Input

5
1
2
1
0

Sample Output

2
4
5
3
1

思路

面对从前往后处理无法确定答案;

这道题我们应该想到用倒序处理;

对于样例

$1$   $2$   $1$   $0$;

最后一个数前面比它小的数有$0$个;

所以最后一个数是$1$;

倒数第二个数前面比它小的数有$1$个;

就在剩下未确定的数$2$  $3$  $4$  $5$中寻找第二大的数;

倒数第三个数前面比它小的数有$2$个;

就在$2$  $4$  $5$中寻找第三大的数;

我们假设前面比它小的数个数为$b[i]$,那么这就是剩下未确定的数中的第$b[i]+1$大的数;

剩下的都是如此;

 

如果数据较大;

处理的方式可以选择线段树;

时间复杂度是$n\log2n$;

方法是把每个节点赋值为$1$;

把每个找到的数删除;

存下被删除的数就好了;

具体看代码~~;

 

代码

 

 1 #include<bits/stdc++.h>
 2 typedef long long ll;
 3 using namespace std;
 4 const ll _=1e5+1;
 5 ll n,tot;
 6 ll ans[_],b[_];
 7 struct tree
 8 {
 9     ll l,r,v,f;
10 }a[_];
11 void build(ll p,ll l,ll r)//建树
12 {
13     a[p].l=l; a[p].r=r;
14     if(l==r)
15     {
16         a[p].v=1;//赋值为1表示这个数未被确定且这个区间未被确定的数的个数
17         return;
18     }
19     ll mid=(l+r)>>1;
20     ll ls=p*2,rs=p*2+1;
21     build(ls,l,mid);
22     build(rs,mid+1,r);
23     a[p].v=a[ls].v+a[rs].v;
24 }
25 void findout(ll p,ll x)
26 {
27     if(a[p].l==a[p].r)
28     {
29         ans[++tot]=a[p].l;//找到第x大的数并储存
30         a[p].v=0;
31         return;
32     }
33     ll ls=p*2,rs=p*2+1;
34     if(x<=a[ls].v)//如果左子树中未被确定的数大于等于要寻找的第x个数
35         findout(ls,x);//说明要找的数在左子树
36     else
37         findout(rs,x-a[ls].v);//否则在右子树,且x要减去左子树中未被确定的数的个数
38     a[p].v=a[ls].v+a[rs].v;
39 }
40 int main()
41 {
42     scanf("%lld",&n);
43     for(ll i=2;i<=n;i++)//b[1]=0,第一个数前面比它小的数没有
44         scanf("%lld",&b[i]);
45     build(1,1,n);
46     for(ll i=n;i>=1;i--)
47         findout(1,b[i]+1);//前面比它小的数有b[i]个,那么这个数就是剩下未确定的数中的第b[i]+1个数
48     for(ll i=tot;i>=1;i--)
49         printf("%lld\n",ans[i]);
50     return 0;
51 }

 

标签:Lost,前面,ll,ii,USACO03Open,ls,编号,Cows,奶牛
From: https://www.cnblogs.com/wzx-RS-STHN/p/18565104

相关文章

  • SQLSTATE[HY000] [2013] Lost connection to MySQL server at 'reading initial commu
    错误信息 SQLSTATE[HY000][2013]LostconnectiontoMySQLserverat'readinginitialcommunicationpacket',systemerror:111 表示在尝试与MySQL服务器建立连接时出现了问题,具体来说是在读取初始通信包时失去了与MySQL服务器的连接,系统错误码为111,这通常表示连接被拒绝......
  • 题解:[USACO07DEC] Sightseeing Cows G
    洛谷P2868题目大意有个nnn个点,mmm条边的有向图,点有点权,边有边......
  • 题解:洛谷 P10497 [USACO03Open] Lost Cows
    原题链接思路+算法首先,考虑读入到\(a_i\)时,如果要得到此时的最优解(指所有牛的编号不重不漏地覆盖\([1,i]\)的所有编号),对于第\(i\)头奶牛,因为在它前面有\(a_i\)头奶牛的编号小于它,所以第\(i\)头奶牛的编号应当为\(a_i+1\)。如果有一头新的奶牛\(i+1\)加入到这个......
  • 题解:P9944 [USACO21FEB] Comfortable Cows B
    思路由于每次输入\(x\)和\(y\)只改变其上下左右的值,所以每次只要更新其相邻的值即可。当某个位置相邻的奶牛数达到\(3\)时,舒适度加一。当某个位置相邻的奶牛数达到\(4\)时,舒适度减一。注意:每增加一头奶牛以后,如果该位置相邻正好有三头奶牛,则舒适度也要加一。ACcod......
  • K11505 The Lost cow[USACO-2017-USOpen-B]
    题目描述FarmerJohn最珍贵的奶牛Bessie丢了,他需要把它找回来。幸运的是,农场里只有一条长长的直路,他知道Bessie肯定在这条路上的某个地方。如果我们把这条路看成数轴,假设FarmerJohn所在位置是x,Bessie所在的位置是y(对于John是未知的),如果FarmerJohn知道Bessie的位置,那么他就......
  • [USACO5.1] 圈奶牛Fencing the Cows /【模板】二维凸包
    凸包,顾名思义,就是凸多边形包围,具体定义见OI-wiki(既是周长最小也是面积最小)有Graham算法和Andrew算法,后者精度更高常数更小(因为不涉及求角度)Andrew算法:1.将点排序(横坐标为第一关键字,纵坐标为第二关键字)2.从左到右维护上半部分,再从右到左维护下半部分。具体见OI-wiki。最后说的......
  • 将 python 脚本的 stdin 重定向到 fifo 会导致 RuntimeError: input():lost sys.stdin
    我有这个python脚本,它的作用是充当服务器,它从重定向到fifo的stdin读取命令:test.py:whileTrue:try:line=input()exceptEOFError:breakprint(f'Received:{line}')在bash中运行命令:mkfifotestfifotest.py<testfifo......
  • 题解:P10733 [NOISG2019 Prelim] Lost Array
    题解:P10733[NOISG2019Prelim]LostArray思路对于任意\(\min(X_{A_{i}},X_{B_{i}})=C_{i}\)。只要让\(X_{A_{i}}\)与\(C_{i}\)取\(\max\)值。\(X_{B_{i}}\)与\(C_{i}\)取\(\max\)值。这样可以让\(\min(X_{A_{i}},X_{B_{i}})\)绝对是\(C_{i}\)。对于为赋值......
  • Cows in a Skyscraper G
    dfs版本#include<algorithm>#include<iostream>usingnamespacestd;constintN=2e1;intcat[N],cab[N];intn,w;intans;boolcmp(inta,intb){returna>b;}voiddfs(intnow,intcnt){if(cnt>=ans){re......
  • P7411 [USACO21FEB] Comfortable Cows S (搜索)
    P7411[USACO21FEB]ComfortableCowsS搜索容易知道任意时刻的不合法的位置,并且决策只有将空着的位置补起来。每次加入一个点,判断其自身、上下左右是否变得不合法,往下递归即可。复杂度分析,每个点只会不合法一次(修改后就变得合法),所以只会遍历一次,复杂度是\(O(n^2)\)。#inclu......