POJ 2352 Stars(树状数组)

来源:互联网 发布:东京食尸鬼面具淘宝 编辑:程序博客网 时间:2024/06/16 12:31

线段树和树状数组都可做,

但是一看这个星星的图,第一反应就是树状数组,

相比之下,树状数组代码长度比线段树短、简单而且时间的常数小,并且针对这道题更容易

所以,就当练习树状数组的模板

输入数据的纵坐标按照升序已经排好序,所以可以按照x轴建立一维树状数组

唯一要注意的就是输入的横坐标的范围是包含0的,所以要+1再进行操作

就当练习树状数组的模板了=w=

var    n,x,y               :longint;    c                   :array[0..32010] of longint;    num                 :array[0..15010] of longint;    i                   :longint;procedure add(i,v:longint);begin   while (i<=32010) do   begin      inc(c[i],v);      inc(i,i and (-i));   end;end;function sum(i:longint):longint;var    ans:longint;begin   ans:=0;   while (i>0) do   begin      inc(ans,c[i]);      dec(i,i and (-i));   end;   exit(ans);end;begin   read(n);   while not EOF do   begin      fillchar(num,sizeof(num),0);      fillchar(c,sizeof(c),0);      for i:=1 to n do      begin         read(x,y);         inc(x);         inc(num[sum(x)]);         add(x,1);      end;     for i:=0 to n-1 do writeln(num[i]);     read(n);   end;end.

                                ——by Eirlys


0 0
原创粉丝点击