瑞士轮
思路
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner cin = new Scanner(System.in);
int n = cin.nextInt();
int r = cin.nextInt();
int q = cin.nextInt();
P[] p =new P[200005];
long[] w = new long[200005];
for(int i=1; i<=n*2; i++) {
p[i] = new P();
p[i].s = cin.nextInt();
p[i].num = i;
}
for(int i=1; i<=n*2; i++)
w[i] = cin.nextInt();
Arrays.sort(p, 1, n*2+1);
P[] top = new P[n+5];
P[] but = new P[n+5];
for(int i=1; i<=n; i++){
top[i] = new P();
but[i] = new P();
}
while(r-- > 0) {
int t = 1;
for(int x=1; x<=2*n; x+=2){
if(w[p[x].num] > w[p[x+1].num]){
top[t].num = p[x].num;
top[t].s = p[x].s + 1;
but[t].num = p[x+1].num;
but[t].s = p[x+1].s;
t ++;
}else {
top[t].num = p[x+1].num;
top[t].s = p[x+1].s + 1;
but[t].num = p[x].num;
but[t].s = p[x].s;
t ++;
}
}
//归并
int i = 1;//top
int j = 1;//but
int k = 1;//p
while(i<=n && j<=n){
if(top[i].s > but[j].s || (top[i].s == but[j].s && top[i].num < but[j].num)){
p[k].num = top[i].num;
p[k].s = top[i].s;
k ++;
i ++;
}else {
p[k].num = but[j].num;
p[k].s = but[j].s;
k ++;
j ++;
}
}
while(i <= n){
p[k].num = top[i].num;
p[k].s = top[i].s;
k ++;
i ++;
}
while(j <= n){
p[k].num = but[j].num;
p[k].s = but[j].s;
k ++;
j ++;
}
}
System.out.println(p[q].num);
}
static class P implements Comparable{
int num;
long s;//分数
@Override
public int compareTo(Object o) {
P p = (P) o;
if(p.s == this.s)
return this.num - p.num;
if(this.s > p.s){
return -1;
}else if(this.s < p.s)
return 1;
return 0;
}
}
}