题解在此(自己分行)
2024-12-14 18:11:55
发布于:重庆
#include<bits/stdc++.h>
using namespace std;
const int N = 1E5 + 5;
struct node{int score,power,id;} a[2 * N],tmp[2 * N];
bool cmp(node a,node b){
if(a.score == b.score) return a.id < b.id;
return a.score > b.score;
}
void merge(int l,int mid,int r){
int i = l,j = mid + 1,k = l;
while(i <= mid && j <= r){
if(cmp(tmp[i],tmp[j])) a[k++] = tmp[i++];
else a[k++] = tmp[j++];
}
while(i <= mid) a[k++] = tmp[i++];
while(j <= r) a[k++] = tmp[j++];
}
int n,r,q;
int main(){
cin >> n >> r >> q;
for(int i = 1;i <= 2 * n;i++){
cin >> a[i].score; a[i].id = i;
}
for(int i = 1;i <= 2 * n;i++) cin >> a[i].power;
sort(a + 1,a + 2 * n + 1,cmp);
for(int i = 1;i <= r;i++){
int p1 = 1,p2 = n + 1;
for(int j = 1;j < 2 * n;j += 2){
if(a[j].power > a[j + 1].power){
a[j].score++;
tmp[p1++] = a[j];
tmp[p2++] = a[j + 1];
}
else{
a[j + 1].score++;
tmp[p1++] = a[j + 1];
tmp[p2++] = a[j];
}
}
merge(1,n,2 * n);
}
cout << a[q].id << endl;
return 0;
}
这里空空如也
有帮助,赞一个