Stars
树状数组下标是从1开始。
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <vector>
#include <queue>
using namespace std;
const int N = 15005, M = 32005, INF = 0x3f3f3f3f;
int n;
int c[M], ans[N]; // M坐标范围,最多N个点
int low_bit(int x) { return x & -x; }
void add(int pos, int val) {
while (pos < M) {
c[pos] += val;
pos += low_bit(pos);
}
}
int query(int pos) {
int res = 0;
while (pos) {
res += c[pos];
pos -= low_bit(pos);
}
return res;
}
int main() {
while (scanf("%d", &n) != EOF) {
memset(c, 0, sizeof(c));
memset(ans, 0, sizeof(ans));
for (int i = 0; i < n; ++i) {
int x, y;
scanf("%d%d", &x, &y);
x++; // 题目中坐标从0开始,树状数组从1开始
ans[query(x)]++;
add(x, 1);
}
for (int i = 0; i < n; ++i) {
printf("%d\n", ans[i]);
}
}
return 0;
}