#include<iostream>
#include<string.h>
#include<stdio.h>
#include<algorithm>
#define MAX 100002
using namespace std;
struct node
{
int s,e,index;
}cow[MAX];
int a[MAX], c[MAX],leve[MAX];
int lowbit(int x)
{
return x&-x;
}
int sum(int x)
{
int ret=0;
while(x>0)
{
ret+=c[x];
x-=lowbit(x);
}
return ret;
}
void add(int x,int d)
{
while(x<MAX)
{
c[x]+=d;
x+=lowbit(x);
}
}
bool cmp(node a,node b)
{
if(a.e==b.e)
return a.s<b.s;
return a.e>b.e;
}
int main()
{
int n;
int i,j;
while(scanf("%d",&n))
{
memset(c,0,sizeof(c));
memset(leve,0,sizeof(leve));
if(n==0)break;
for(i=0;i<n;i++)
{
scanf("%d%d",&cow[i].s,&cow[i].e);
cow[i].s++;
cow[i].e++;
cow[i].index=i;
}
sort(cow,cow+n,cmp);
add(cow[0].s,1);
a[cow[0].index]=0;
for(i=1;i<n;i++)
{
if(cow[i].s==cow[i-1].s&&cow[i].e==cow[i-1].e)
{
a[cow[i].index]=a[cow[i-1].index];
add(cow[i].s,1);
continue;
}
a[cow[i].index]=sum(cow[i].s);
add(cow[i].s,1);
}
for(i=0;i<n;i++)
{
if(i!=0)
printf(" ");
printf("%d",a[i]);
}
printf("\n");
}
}
poj2481
最新推荐文章于 2019-12-01 01:02:34 发布