这是代码:
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
inline int read(){
int x=0,f=1;
char c=getchar();
while(c<'0'||c>'9'){if(c=='-')f*=-1;c=getchar();};
while(c>='0'&&c<='9'){x=(x<<3)+(x<<1)+c-'0';c=getchar();};
return x*f;
}
const int N=100000;
struct node{
int s,w,id;
}a[N+10];
int n,r,q;
vector<node>A,B;
bool cmp(node x,node y){
if(x.s==y.s)return x.id<y.id;
return x.s>y.s;
}
int main(){
n=read(),r=read(),q=read();
for(int i=1;i<=2*n;i++)a[i].s=read(),a[i].id=i;
for(int i=1;i<=2*n;i++)a[i].w=read();
sort(a+1,a+n+1,cmp);
while(r--){
for(int i=1;i<=2*n;i+=2){
if(a[i].w>a[i+1].w){
a[i].s++;a[i+1].s--;
A.push_back(a[i]);B.push_back(a[i+1]);
}else{
a[i].s--;a[i+1].s++;
A.push_back(a[i+1]);B.push_back(a[i]);
}
}
if(r>1){
int k=1,i=0,j=0;
for(;i<A.size()&&j<B.size();){
if(cmp(A[i],B[j])){
a[k++]=A[i++];
}else{
a[k++]=B[j++];
}
}
while(i<A.size())a[k++]=A[i++];while(j<B.size())a[k++]=B[j++];
while(A.size())A.pop_back();while(B.size())B.pop_back();
}
}
cout<<a[q].id<<endl;
return 0;
}
只过了10pts