http://poj.org/problem?id=2352
题意:给你一些y递增(y相等,x递增)的坐标,按照在一个点的左方并且在下方(包括垂直方向的)的点的个数划分等级,求1到n-1的等级的个数。
#include <cstdio>
#include <cstring>
#define maxn 400000
using namespace std;
int c[maxn],leve[maxn],a,b,n;
int lowbit(int x)
{
return x&(x^(x-1));
}
void add(int x,int m)
{
while(x<=maxn)
{
c[x]+=m;
x+=lowbit(x);
}
}
int sum(int x)
{
int sum1=0;
while(x>0)
{
sum1+=c[x];
x-=lowbit(x);
}
return sum1;
}
int main()
{
scanf("%d",&n);
memset(c,0,sizeof(c));
for(int k=1; k<=n; k++)
{
scanf("%d%d",&a,&b);
a++;
int t=sum(a);
leve[t]++;
add(a,1);
}
for(int i=0; i<n; i++)
{
printf("%d\n",leve[i]);
}
return 0;
}