#include<iostream>
#include<algorithm>
using namespace std;
int c[33000],ans[20000],MaxArray;
struct point
{
int x,y;
/*bool operator <(const point & rhs) const
{
if (x<rhs.x) return true;
if (x==rhs.x) return y<rhs.y;
else return false;
}*/
};
point a[20000];
int lowbit (int x)
{
return x&(-x);
}
void Modify(int n, int delta)
{
while(n <= MaxArray)
{ c[n] += delta; n += lowbit(n);}
}
int Sum(int n)
{
int result = 0;
while(n > 0)
{
result += c[n];
// if (n==0) return result;
n -= lowbit(n);
}
return result;
}
int main()
{
int n,i,j;
while(scanf("%d",&n)!=EOF)
{
MaxArray=0;
for(i=1;i<=n;i++)
{
scanf("%d %d",&a[i].y,&a[i].x);
a[i].y++;
if (a[i].y>MaxArray) MaxArray=a[i].y;
}
//sort(a+1,a+n+1);
memset(c,0,sizeof(c));
memset(ans,0,sizeof(ans));
for(i=1;i<=n;i++)
{
ans[Sum(a[i].y)]++;
Modify(a[i].y,1);
}
for(i=0;i<=n-1;i++)
printf("%d/n",ans[i]);
}
}
PKU2352 树状数组
最新推荐文章于 2021-08-18 14:25:41 发布