/*Interval Tree*/
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
struct node {
int l, r, val;
};
int n, x, y;
node tree[32005 * 4];
int level[32005];
void creat(int l, int r, int root)
{
tree[root].l = l;
tree[root].r = r;
tree[root].val = 0;
if (l == r) return;
int mid = (l + r) >> 1;
creat(l, mid, root << 1);
creat(mid + 1, r, root << 1 | 1);
}
int query(int x, int root)
{
if (tree[root].l == tree[root].r) return tree[root].val;
int mid = (tree[root].l + tree[root].r) >> 1;
if (x <= mid)
return query(x, root << 1) + tree[root].val;
else
return query(x, root << 1 | 1) + tree[root].val;
}
void update(int l, int r, int root, int val)
{
if (tree[root].l == l && tree[root].r == r) {
tree[root].val += val;
return;
}
int mid = (tree[root].l + tree[root].r) >> 1;
if (r <= mid)
update(l, r, root << 1, val);
else if (l > mid)
update(l, r, root << 1 | 1, val);
else {
update(l, mid, root << 1, val);
update(mid + 1, r, root << 1 | 1, val);
}
}
int main()
{
while (cin >> n) {
memset(level, 0, sizeof(level));
creat(0, 32000, 1);
for (int i = 0; i < n; ++i) {
scanf("%d%d", &x, &y);
level[query(x, 1)]++;
update(x, 32000, 1, 1);
}
for (int i = 0; i < n; ++i)
cout << level[i] << endl;
}
return 0;
}
POJ2352 Stars
最新推荐文章于 2022-12-19 23:34:15 发布