线段树和树状数组都可做,
但是一看这个星星的图,第一反应就是树状数组,
相比之下,树状数组代码长度比线段树短、简单而且时间的常数小,并且针对这道题更容易
所以,就当练习树状数组的模板
输入数据的纵坐标按照升序已经排好序,所以可以按照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