【POJ】【P2352】【Stars】【题解】【树状数组】

来源:互联网 发布:网络技术交流 编辑:程序博客网 时间:2024/06/05 09:28

传送门:http://poj.org/problem?id=2352

题目大意: 有n个星星, 现在分别给出它们的坐标(按y递增的顺序给出),每个星星有一个等级(该星星的等级是x坐标和y坐标都不大于该星的星星数),先要求出每个等级的星星有多少个

题解:

1.由于 y坐标是按照升序给出的,我们可以仅考虑x坐标,进行树状数组求和,这也提醒蒟蒻以后遇见二维坐标问题可以把其中一个坐标排序来做

2.一定要注意x的坐标可能为0,所以得加一,不然在update操作中会死循环的,我会告诉你我在poj TLE10+次吗??

/*ID:iamzkyOJ:POJIndex:2352Language:C++*/#include<cstdio>using namespace std;int n;int d[32010];int ranks[15001];int lowbit(int x){return x&(-x);}int get(int x){int s=0;while(x){s+=d[x];x-=lowbit(x);}return s;}void updata(int x){while(x<=32010){d[x]++;x+=lowbit(x);}}int main(){int i,x,y;scanf("%d",&n);for(i=0;i<n;i++){scanf("%d%d",&x,&y);ranks[get(x+1)]++;updata(x+1);}for(i=0;i<n;i++)printf("%d\n",ranks[i]);return 0;}


0 0
原创粉丝点击