A - Stars

  题目:

 

 

题目网址:2352 -- Stars (poj.org)

  思路:

定义星星的等级为左下角星星的个数,给定以y坐标升序的星星输出各级别星星的个数;

因为按照Y坐标升序输入,所以放入一个点后,不会影响到等级比他大的点的个数,所以和它同等级的点的个数应该加一;

  代码实现:

#include<iostream>
#include<cstdio>
#include<string.h>
using namespace std;
int n,x,y,s,a[32005],b[32005];
int cx(int x){//查询
    s=0;//初值
    for(;x;x-=x&(-x))s+=a[x];//累加
    return s;
}
void update(int x)//更改
{
    for(;x<=32001;x+=x&(-x))a[x]++;//寻找父节点更改
}
int main()
{
    while(scanf("%d",&n)!=EOF){
         memset(a,0,sizeof(a));//初始化数组都设为0
         memset(b,0,sizeof(b));
         for(int i=1;i<=n;i++)
         {
             scanf("%d%d",&x,&y);//由于以Y的升序输入所以与Y坐标无关
             b[cx(x+1)]++;//查询点的等级
             update(x+1);//更改
         }
         for(int i=1;i<=n;i++)
             printf("%d\n",b[i-1]);
    }
   return 0;
}
posted @ 2021-08-06 14:25  wateriness  阅读(64)  评论(0)    收藏  举报