树状数组的应用,只是利用的它向后更新,向前查询的性质。
#include <stdio.h>
#include <string.h>
#define LEN 150001
int tree[LEN];
int level[LEN];
int lowbit(int x) {
return x & (-x);
}
void update(int pos) {
while(pos <= LEN) {
tree[pos] ++;
pos += lowbit(pos);
}
}
int query(int pos) {
int sum = 0;
while(pos > 0) {
sum += tree[pos];
pos -= lowbit(pos);
}
return sum;
}
int main() {
int num;
while(scanf("%d", &num) != EOF) {
int x, y;
int i, j;
memset(level, 0, sizeof(level));
memset(tree, 0, sizeof(tree));
for(i = 1; i <= num; i++) {
scanf("%d%d", &x, &y);
level[query(++x)]++;
update(x);
}
for(i = 0; i < num; i++) {
printf("%d\n", level[i]);
}
}
return 0;
}