点击打开链接
这个题很奇葩啊,感觉他把所有的事情都帮你做了,包括什么输入的顺序的的限制,先按照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 ; }