思路:
一道经典的二维偏序
c o d e code code
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int n, c[1010000], ans[1010000];
struct node
{
int x, y;
}a[1010000];
bool cmp(node x, node y)
{
if(x.x!=y.x)
return x.x<y.x;
else return x.y<y.y;
}
int lowbit(int x)
{
return x&(-x);
}
void add(int x, int y)
{
for(; x<=32010; x+=lowbit(x))
c[x]+=y;
}
int query(int x)
{
int sum=0;
for(; x>=1; x-=lowbit(x))
sum+=c[x];
return sum;
}
int main()
{
scanf("%d", &n);
for(int i=1; i<=n; i++)
scanf("%d%d", &a[i].x, &a[i].y), a[i].x++, a[i].y++;
sort(a+1, a+1+n, cmp);
for(int i=1; i<=n; i++)
{
ans[query(a[i].y)]++;
add(a[i].y, 1);
}
for(int i=0; i<n; i++)
printf("%d\n", ans[i]);
return 0;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。