37 lines
1.0 KiB
C++
37 lines
1.0 KiB
C++
#include <stdio.h>
|
||
#include <string.h>
|
||
#include <iostream>
|
||
#include <algorithm>
|
||
using namespace std;
|
||
const int N = 32010;
|
||
int cnt[N];
|
||
|
||
// 树状数组模板
|
||
#define lowbit(x) (x & -x)
|
||
typedef long long LL;
|
||
int c[N];
|
||
void add(int x, int v) {
|
||
while (x < N) c[x] += v, x += lowbit(x);
|
||
}
|
||
LL sum(int x) {
|
||
LL res = 0;
|
||
while (x) res += c[x], x -= lowbit(x);
|
||
return res;
|
||
}
|
||
|
||
int main() {
|
||
int n;
|
||
scanf("%d", &n);
|
||
for (int i = 1; i <= n; i++) {
|
||
int x, y;
|
||
scanf("%d %d", &x, &y); // 这里的y没有用到,想想也是,因为是扫描线是从下向上的,与y的具体值无关
|
||
x++; // 树状数组存储从1开始, 所有x映射都+1。
|
||
add(x, 1);
|
||
// 查询在x之前有多少个数字,也就是有多少个星星个数
|
||
cnt[sum(x)]++; // 找到了一个左下角有5个星星的,那么5这个桶计数++,这是题意要求的
|
||
}
|
||
// 输出所有等级星星的个数
|
||
for (int i = 1; i <= n; i++) printf("%d\n", cnt[i]);
|
||
return 0;
|
||
}
|