#include<stdlib.h>
struct xs
{
int id,fs,sl;
}sz[200001],lin1[100001],lin2[100001];
int n,r,q;
int cmp(const void *a,const void *b)
{
if((*(xs *)b).fs==(*(xs *)a).fs) return (*(xs *)a).id-(*(xs *)b).id;
return (*(xs *)b).fs-(*(xs *)a).fs;
}
void hb()
{
int p=1,k=1;
while(p+k<=n*2+1)
{
if(p<=n&&k<=n&&lin1[p].fs==lin2[k].fs)
{
if(lin1[p].id<lin2[k].id) {sz[p+k-1]=lin1[p]; p++;}
else {sz[p+k-1]=lin2[k];k++;}
continue;
}
if(k>n||lin1[p].fs>lin2[k].fs) {sz[p+k-1]=lin1[p];p++;continue;}
if(p>n||lin2[k].fs>lin1[p].fs) {sz[p+k-1]=lin2[k];k++;continue;}
}
return ;
}
int main()
{
scanf("%d %d %d",&n,&r,&q);
for(int i=1;i<=n*2;i++) sz[i].id=i;
for(int i=1;i<=2*n;i++) scanf("%d",&sz[i].fs);
for(int i=1;i<=n*2;i++) scanf("%d",&sz[i].sl);
qsort(sz+1,n*2,sizeof(sz[0]),cmp);
while(r>0)
{
r--;
for(int i=1;i<=n;i++) if(sz[i*2-1].sl>sz[i*2].sl) {sz[i*2-1].fs++;lin1[i]=sz[i*2-1]; lin2[i]=sz[i*2];}
else {sz[i*2].fs++;lin1[i]=sz[i*2];lin2[i]=sz[i*2-1];}
hb();
}
printf("%d",sz[q].id);
getchar();
getchar();
return 0;
}
提交第一次 1组超时 2组错误
同样代码 提交第2次 就 AC了,真是奇怪了