这个题很奇葩啊,感觉他把所有的事情都帮你做了,包括什么输入的顺序的的限制,先按照y的增,再按照x的增。
emmmm,一开始没看到这些条件,我以为是开二维数组,后来发现30000多的二维数组是开不出来的。而且题目也没有给出输入限制,emmmm,心态炸了。
#include <iostream>
#include<cstdio>
#include<string.h>
#include<cmath>
using namespace std;
#define MAX 32005
int c[MAX];
int level[MAX];
int lowbit(int x)
{
return x&(-x);
}
void updata(int x,int d)
{
for(int i =x ;i<MAX ; i+=lowbit(i))
{
c[i] = c[i]+d;
}
}
int getSum(int x)
{
int sum = 0 ;
for(int i = x ; i>0;i-=lowbit(i))
{
sum+=c[i];
}
return sum ;
}
int main(){
int N,x,y;
while(scanf("%d",&N)==1){
memset(level,0,sizeof(level));
memset(c,0,sizeof(c));
for(int i = 1 ; i <=N ; i++)
{
scanf("%d%d",&x,&y);
x++;
level[getSum(x)]++;
updata(x,1);
}
for(int i =0 ; i <N ;i++)
{
printf("%d\n",level[i]);
}
}
return 0 ;
}