【树状数组】hdu 1541 Stars
2014-01-29 16:39
323 查看
http://acm.hdu.edu.cn/showproblem.php?pid=1541
题意:按照y轴升序,然后x轴升序输入星星的坐标,求从0~N-1 level的星星各有多少个?(level判断:一个星星的左下方有多少颗星星,即:y2<=y1&&x2<=x1)
分析:因为是按y轴升序输入的,所以不用考虑高的问题,直接比较x轴来压缩成一维树状数组
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int NM=32005;
int a[NM],c[15005];
int lowbit(int x)
{
return x&(-x);
}
void add(int x)
{
while(x<NM)
{
a[x]++;
x+=lowbit(x);
}
}
int sum(int x)
{
int ans=0;
while(x>0)
{
ans+=a[x];
x-=lowbit(x);
}
return ans;
}
int main()
{
int i,n,res,x,y;
while(scanf("%d",&n)!=EOF)
{
memset(c,0,sizeof(c));
memset(a,0,sizeof(a));
for(i=0;i<n;i++)
{
scanf("%d%d",&x,&y);
x++; //
add(x);
res=sum(x)-1; //本身不算
c[res]++;
}
for(i=0;i<n;i++)
printf("%d\n",c[i]);
}
return 0;
}
题意:按照y轴升序,然后x轴升序输入星星的坐标,求从0~N-1 level的星星各有多少个?(level判断:一个星星的左下方有多少颗星星,即:y2<=y1&&x2<=x1)
分析:因为是按y轴升序输入的,所以不用考虑高的问题,直接比较x轴来压缩成一维树状数组
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int NM=32005;
int a[NM],c[15005];
int lowbit(int x)
{
return x&(-x);
}
void add(int x)
{
while(x<NM)
{
a[x]++;
x+=lowbit(x);
}
}
int sum(int x)
{
int ans=0;
while(x>0)
{
ans+=a[x];
x-=lowbit(x);
}
return ans;
}
int main()
{
int i,n,res,x,y;
while(scanf("%d",&n)!=EOF)
{
memset(c,0,sizeof(c));
memset(a,0,sizeof(a));
for(i=0;i<n;i++)
{
scanf("%d%d",&x,&y);
x++; //
add(x);
res=sum(x)-1; //本身不算
c[res]++;
}
for(i=0;i<n;i++)
printf("%d\n",c[i]);
}
return 0;
}
相关文章推荐
- 树状数组题目---HDU 1541 stars 及其变形(降维思想)
- 树状数组 POJ 2352 HDU 1541 Stars
- hdu 1541 Stars(树状数组)
- HDU 1541 Stars(树状数组-水题,模板题)
- HDU:1541 Stars(树状数组)
- HDU 1541 Stars (树状数组)
- hdu_1541 Stars (树状数组)
- hdu 1541 Stars ( 树状数组 )
- poj-2352 && HDU-1541 --Stars(树状数组)
- HDU 1541 Stars【树状数组】
- HDU 1541 Stars (树状数组)
- hdu 1541 Stars(树状数组)
- HDU 1541 Stars 树状数组
- HDU 1541 Stars(树状数组)
- HDU 1541 Stars(树状数组)
- hdu 1541 Stars (树状数组)
- HDU 1541 Stars(树状数组入门应用)
- hdu 1541 Stars(树状数组)
- HDU 1541 Stars(树状数组)
- HDU-1541 Stars 树状数组