星星的级别就是横坐标小于它,纵坐标不大于它的点个数。因为输入是有序的,纵坐标没有起到
作用,所以只要注意x值就行了。 用树状数组来实现
/*Accepted 376K 110MS C++ 774B 2012-08-07 10:58:07*/ #include<stdio.h> #include<string.h> #include<stdlib.h> const int MAXN = 1 << 15; int T[MAXN], ans[MAXN]; int lowb(int t) { return t & (-t); } void insert(int i) { for( ; i < MAXN; T[i] ++, i += lowb(i)); } int sum(int i) { int cnt = 0; for( ; i > 0; cnt += T[i], i -= lowb(i)); return cnt; } int main() { int n, x, y, i; while(scanf("%d", &n) == 1) { memset(T, 0, sizeof T); memset(ans, 0, sizeof ans); for(i = 0; i < n; i ++) { scanf("%d%d", &x, &y); ++ x; ++ ans[sum(x)]; insert(x); } for(i = 0; i < n; i ++) { printf("%d\n", ans[i]); } } return 0; }