因为按照y排序的,所以只需要考虑x就可以了,树状数组的意思是有一个隐藏数组a[i],代表i点有没有点,如果i点有的话,c数组跟i有关的元素全部更新,然后sum(x)又是a数组从1到x相加,算出小于等于x的个数,那么相应的level要加1。
//
// main.cpp
// Richard
//
// Created by 邵金杰 on 16/8/20.
// Copyright © 2016年 邵金杰. All rights reserved.
//
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int maxn=15000+10;
const int INF=32000+10;
int c[INF],level[maxn];
int n;
void add(int x)
{
while(x<=INF)
{
c[x]++;
x+=(x&(-x));
}
}
int sum(int x)
{
int s=0;
while(x)
{
s+=c[x];
x-=(x&(-x));
}
return s;
}
int main()
{
int x,y;
while(scanf("%d",&n)!=EOF)
{
memset(c,0,sizeof(c));
memset(level,0,sizeof(level));
for(int i=0;i<n;i++)
{
scanf("%d%d",&x,&y);
level[sum(x+1)]++;
add(x+1);
}
for(int i=0;i<n;i++)
printf("%d\n",level[i]);
}
return 0;
}