poj 2182

原创 2016年06月01日 17:18:32

Description

N (2 <=N <= 8,000) cows have unique brands in the range 1..N. In a spectaculardisplay of poor judgment, they visited the neighborhood 'watering hole' anddrank a few too many beers before dinner. When it was time to line up for theirevening meal, they did not line up in the required ascending numerical order oftheir brands. 

Regrettably, FJ does not have a way to sort them. Furthermore, he's not verygood at observing problems. Instead of writing down each cow's brand, hedetermined a rather silly statistic: For each cow in line, he knows the numberof cows that precede that cow in line that do, in fact, have smaller brandsthan that cow. 

Given this data, tell FJ the exact ordering of the cows. 

Input

* Line 1:A single integer, N 

* Lines 2..N: These N-1 lines describe the number of cows that precede a givencow in line and have brands smaller than that cow. Of course, no cows precedethe first cow in line, so she is not listed. Line 2 of the input describes thenumber of preceding cows whose brands are smaller than the cow in slot #2; line3 describes the number of preceding cows whose brands are smaller than the cowin slot #3; and so on. 

Output

* Lines1..N: Each of the N lines of output tells the brand of a cow in line. Line #1of the output tells the brand of the first cow in line; line 2 tells the brandof the second cow; and so on.

Sample Input

5

1

2

1

0

Sample Output

2

4

5

3

1

 

题目大意:给出n头牛,且告诉你每头牛前面有多少头比他小,求每头牛的编号。(第一头可以看为0)。

 

分析:我们可以用一棵线段树,记录一个c,用来表示该节点有多少个空位。如果一个点前有k个比它小的编号,那么他就是k+1个,也就是要插入到第k+1个位置。

 

type

 pnode=^tnode;

 tnode=record

 lc,rc:pnode;

 c:longint;

end;

 

const

 maxn=800000;

var

 t:pnode;

 i,j,k,x,y,n:longint;

 a,f:array [1..maxn] of longint;

 

procedure make(var p:pnode);

 begin

 ifp=nil then

 begin

 new(p);

 p^.c:=0;

 p^.lc:=nil;

  p^.rc:=nil;

 end;

 end;

 

procedure insert(var t:pnode;l,r,cr:longint);

 varmid:longint;

begin

 witht^ do

 begin

  c:=cr;

  mid:=(l+r) div 2;

   ifl=r then exit;

  make(lc);

  make(rc);

  insert(lc,l,mid,mid);

  insert(rc,mid+1,r,cr);

 end;

end;

 

function find(vart:pnode;l,r,cr:longint):longint;

 var

 mid:longint;

begin

 witht^ do

 begin

  dec(c); {空位减一}

   if(lc=nil) and (rc=nil) then exit(l);

  mid:=(l+r) div 2;

   iflc^.c>=cr then find:=find(lc,l,mid,cr)       {判断左儿子是否可以放}

                else find:=find(rc,mid+1,r,cr+mid-lc^.c);{cr+mid-lc^.c表示右儿子的空位}{但是要减去左儿子的空位}

 end;

end;

procedure init;

 begin

   fillchar(a,sizeof(a),0);

   fillchar(f,sizeof(f),0);

   readln(n);

   t:=nil;

   make(t);

   insert(t,1,n,n);

   for i:=1 to n-1 do

    readln(a[i]);

   for i:=n-1 downto 1 do

    f[i]:=find(t,1,n,a[i]+1);

    writeln(find(t,1,n,1));

   for i:=1 to n-1 do

    writeln(f[i]);

 end;

 

begin

 init;

end.

 

版权声明:2333

POJ 2182 Lost Cows(树状数组,暴力解法)

POJ 2182 Lost Cows(树状数组,暴力解法) 分析:        其实这道题目只要会手算用例就能暴力解决。        假设读入题目给的数组a[n],其中a[1]=0 这道题目只给出...
  • u013480600
  • u013480600
  • 2014年03月20日 02:00
  • 1657

POJ 2182 线段树最佳

又一次对自己的智商产生了怀疑。。这道题虽然用N方的循环也能水过但是刚学过线段树还是自己用线段树做一遍吧~~ 看着题解做的。。因为实在想不到线段树该怎么处理。。 等我学完专题一定发誓从此不再看题解。...
  • Picknight
  • Picknight
  • 2015年03月16日 20:34
  • 248

poj 2182 树状数组+二分

题目:点击打开链接 题意:知道一群牛从1~n-1范围内第i头牛前面编号比自己小的数量,以此来推断每个位置牛的编号 做不粗来啊,看了一下午的树状数组,还是无能为力啊,等着看看线段树,用线段树做一遍吧...
  • loveyou11111111
  • loveyou11111111
  • 2015年08月15日 23:31
  • 194

POJ 2182 Lost Cows(树状数组+二分)

题目点我点我点我 题目大意:有n头牛,给出第2~n头牛在它前面有多少头牛号码比自己小的,输出每头牛的号码。 解题思路:从后往前看,最后一头牛可以确定它的号码,因为知道了前面有k头比...
  • L954688947
  • L954688947
  • 2016年08月08日 15:20
  • 180

【树状数组--思维】poj 2182 Lost Cows

Lost Cows Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 11826   Accepted: 7609 ...
  • baidu_35643793
  • baidu_35643793
  • 2017年07月20日 21:24
  • 86

POJ 题目2182 Lost Cows(线段树)

Lost Cows Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 10179   Acc...
  • yu_ch_sh
  • yu_ch_sh
  • 2015年08月09日 17:46
  • 375

POJ 2182/暴力/BIT/线段树

POJ 2182 暴力 /* 题意: 一个带有权值[1,n]的序列,给出每个数的前面比该数小的数的个数,当然比一个数前面比第一个数小的个数是0,省略不写,求真正的序列。(拗口) 首先想到的是从前到后暴...
  • M___er
  • M___er
  • 2016年08月29日 11:25
  • 155

poj 2182 树状数组(给牛排序)

题意:有n头牛从1-n标号。现在给出n-1个数,表示第i头牛前面比它序号小的牛的个数。根据此还原牛的原始排序。 思路:从最后向前扫面序列。每次对于未确定的最后一个数来说是可以根据它前面有多少数字比它...
  • dumeichen
  • dumeichen
  • 2014年12月09日 09:34
  • 420

【POJ】 2182 - Lost Cows 【线段树入门】

题目: Lost Cows Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 9727   Accepted: ...
  • xianyun2009
  • xianyun2009
  • 2015年04月25日 20:17
  • 542

POJ 2182 Lost Cows (树状数组,递推)

 题意 N头牛排成一列 但编号顺序是乱的 知道每头牛前面有多少头牛编号在其之前 要求输出此时队列中每头牛的编号本题有两种做法  一是利用数据结构的树状数组 时间复杂度低但相对较复杂  也可以...
  • acvay
  • acvay
  • 2014年08月22日 10:43
  • 535
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:poj 2182
举报原因:
原因补充:

(最多只允许输入30个字)