Stars HDU - 1541

时间:2023-03-09 20:31:51
Stars HDU - 1541

HDU - 1541

思路:二维偏序,一维排序,一维树状数组查询即可。

#include<bits/stdc++.h>
using namespace std;
#define maxn 33333
int ans[maxn],n,sum[maxn];
int lowbit(int x)
{
return x&(-x);
}
struct node
{
int x,y;
bool operator < (const node &b)const
{
if(x==b.x)return y<b.y;
return x<b.x;
}
} a[maxn];
void add(int x,int d)
{
while(x<=32001)
{
sum[x]+=d;
x+=lowbit(x);
}
}
int getsum(int x)
{
int ret=0;
while(x>0)
{
ret+=sum[x];
x-=lowbit(x);
}
return ret;
}
int main()
{
while(scanf("%d",&n)!=EOF)
{
memset(sum,0,sizeof(sum));
memset(ans,0,sizeof(ans));
for(int i=1; i<=n; i++)
scanf("%d%d",&a[i].x,&a[i].y);
sort(a+1,a+1+n);
for(int i=1; i<=n; i++)
{
ans[getsum(a[i].y+1)]++;
add(a[i].y+1,1);
}
for(int i=0; i<n; i++)printf("%d\n",ans[i]);
}
return 0;
}