线段树
#include<iostream>
#define maxn 45000
using namespace std;
int cnt[maxn]={0},s[maxn]={0};
int n;
int lowbit(int x)
{
return x&(-x);
}
int getsum(int x)
{
int sum=0;
while(x>0)
{
sum+=s[x];
x-=lowbit(x);
}
return sum;
}
void update(int x)
{
while(x<=maxn)
{
s[x]++;x+=lowbit(x);
}
}
int main()
{
while(scanf("%d",&n)!=EOF)
{
int i,x,y;
for(i=0;i<n;i++)
{
scanf("%d%d",&x,&y);
cnt[getsum(x+1)]++;
update(x+1);
}
for(i=0;i<n;i++)
printf("%d\n",cnt[i]);
}
return 0;
}
276

被折叠的 条评论
为什么被折叠?



