标签:
| Time Limit: 3000MS | Memory Limit: 65536K | |
| Total Submissions: 13920 | Accepted: 4607 |
Description
Input
Output
Sample Input
3 1 2 0 3 3 4 0
Sample Output
1 0 0
Hint
Source
POJ Contest,Author:Mathematica@ZSU
题目大意:
给出n头牛,他们有两个属性x和y,当A牛的x比B牛的x小于或等于,A牛的y比B牛的y大于或等于,但x和y不能同时等于,则称为A牛比B牛更强大
问对每头牛,有多少头牛比他强大
ac代码
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct ss
{
int e,s,id;
}b[100100];
int val[100100],a[100100];
int cmp(const void *a,const void *b)
{
if((*(struct ss *)a).s==(*(struct ss *)b).s)
return (*(struct ss *)a).e-(*(struct ss *)b).e;
return (*(struct ss *)b).s-(*(struct ss *)a).s;
}
int n;
int lowbit(int x)
{
return x&(-x);
}
void update(int p,int q)
{
while(p<=n)
{
a[p]+=q;
p+=lowbit(p);
}
}
int sum(int p)
{
int ans=0;
while(p>0)
{
ans+=a[p];
p-=lowbit(p);
}
return ans;
}
int main()
{
//int n;
while(scanf("%d",&n)!=EOF,n)
{
int i;
memset(val,0,sizeof(val));
memset(a,0,sizeof(a));
for(i=1;i<=n;i++)
{
scanf("%d%d",&b[i].e,&b[i].s);
b[i].id=i;
b[i].e++;
b[i].s++;
}
qsort(b+1,n,sizeof(b[0]),cmp);
val[b[1].id]=sum(b[1].e);
update(b[1].e,1);
for(i=2;i<=n;i++)
{
if(b[i].e==b[i-1].e&&b[i].s==b[i-1].s)
{
val[b[i].id]=val[b[i-1].id];
}
else
{
val[b[i].id]=sum(b[i].e);
}
update(b[i].e,1);
}
printf("%d",val[1]);
for(i=2;i<=n;i++)
{
printf(" %d",val[i]);
}
printf("\n");
}
}标签:
原文地址:http://blog.csdn.net/yu_ch_sh/article/details/45954651