rt,P1309
代码:
#include<bits/stdc++.h>
using namespace std;
const int N = 2 * 1e5 + 20;
struct player{
int id,s,w;
};
int n,r,q;
vector<player> orz;
bool cmp(player a,player b){
if(a.s == b.s)return a.id < b.id;
return a.s > b.s;
}
int main(){
cin>>n>>r>>q;
for(int i = 0;i < 2 * n;i ++){
int s;
cin>>s;
orz.push_back(player{i,s,0});
}
for(int i = 0;i < 2 * n;i ++)
cin>>orz[i].w;
sort(orz.begin(),orz.end(),cmp);
for(int i = 1;i <= r;i ++){
vector<player> now;
queue<player> win,lose;
// 归(打比赛)
for(int j = 0;j < 2 * n;j += 2)
if(orz[j].w > orz[j + 1].w){
orz[j].s ++;
win.push(orz[j]);
lose.push(orz[j + 1]);
}
else {
orz[j + 1].s ++;
win.push(orz[j + 1]);
lose.push(orz[j]);
}
// 并
while(win.size() && lose.size())
if(win.front().s == lose.front().s){
if(win.front().id < lose.front().id){
now.push_back(win.front());
win.pop();
}
else {
now.push_back(lose.front());
lose.pop();
}
}
else if(win.front().s > lose.front().s){
now.push_back(win.front());
win.pop();
}
else {
now.push_back(lose.front());
lose.pop();
}
// sort(orz.begin(),orz.end(),cmp);
orz = now;
// cout<<i<<endl<<"win:";
// for(int j = 0;j < win.size();j ++)
// cout<<win[j].s<<" ";
// cout<<endl<<"lose:";
// for(int j = 0;j < lose.size();j ++)
// cout<<lose[j].s<<" ";
// cout<<endl<<"now:";
// for(int j = 0;j < now.size();j ++)
// cout<<now[j].s<<" ";
// cout<<endl<<"orz:";
// for(int j = 0;j < orz.size();j ++)
// cout<<orz[j].s<<" ";
// cout<<endl<<endl;
}
cout<<orz[q - 1].id + 1;
return 0;
}