标签:
Problem: 2481 User: shu_dayang
Memory: 2112K Time: 1094MS
Language: C++ Result: Accepted
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#define MAXN 100005
using namespace std;
struct Cow
{
int x;
int y;
int order;
}a[MAXN];
bool cmp(Cow a, Cow b)
{
if(a.y != b.y) return a.y > b.y;
return a.x < b.x;
}
int c[MAXN],num[MAXN];
int n;
int lowbit(int x)
{
return x & (-x);
}
void update(int x)
{
while(x <= MAXN)
{
c[x]++;
x += lowbit(x);
}
}
int query(int x)
{
int res = 0;
while(x > 0)
{
res += c[x];
x -= lowbit(x);
}
return res;
}
int main()
{
int n;
while( ~scanf("%d",&n) && n != 0)
{
for(int i = 1; i <= n; i++)
{
scanf("%d%d",&a[i].x,&a[i].y);
a[i].x++; //防止出现0的情况而超时
a[i].y++;
a[i].order = i;
}
sort(a+1,a+1+n,cmp);
memset(c,0,sizeof(c));
memset(num,0,sizeof(num));
update(a[1].x);
num[1] = 0;
for(int i = 2; i <= n; i++)
{
if(a[i].x == a[i-1].x && a[i].y == a[i-1].y) //两头牛相同的情况
num[a[i].order] = num[a[i-1].order];
else
num[a[i].order] = query(a[i].x);
update(a[i].x);
}
for(int i = 1; i <= n; i++)
printf("%d%c",num[i],(i==n)?‘\n‘:‘ ‘);
}
return 0;
}
标签:
原文地址:http://www.cnblogs.com/yong-hua/p/4679014.html