hdu1541 Stars 树状数组

时间:2022-11-23 08:17:44

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1541

题目大意就是统计其左上位置的星星的个数

由于y已经按升序排列,因此只用按照x坐标生成一维树状数组即可

比较简单的题目:

代码:

 #include<iostream>
#include<cstring>
#include<cstdio>
#include<cstdlib>
#include<algorithm>
using namespace std;
const int max_n=;
const int max_c=;
int c[max_c];
int cnt[max_n];
int lowbit(int x)
{
return x&(-x);
}
void add(int i,int val)
{
while(i<=max_c)
{
c[i]+=val;
i+=lowbit(i);
}
}
int sum(int i)
{
int s=;
while(i>)
{
s+=c[i];
i-=lowbit(i);
}
return s;
}
int main()
{
int n;
int x,y;
while(scanf("%d",&n)!=EOF)
{
memset(c,,sizeof(c));
memset(cnt,,sizeof(cnt));
for(int i=;i<n;i++)
{
scanf("%d%d",&x,&y);
add(x+,);
int tmp=sum(x+);
cnt[tmp-]++;
} for(int i=;i<n;i++)
cout<<cnt[i]<<endl;
}
return ;
}