1 solutions

  • 0
    @ 2025-11-5 15:54:01

    C++ :

    //用归并的
    #include<iostream>
    #include<algorithm>
    using namespace std;
    
    const int maxn = 200005;
    struct data{
    	int grade;
    	int num;
    	//int w;
    };
    data a[maxn];
    data A[100001];
    data B[100001];
    int w[maxn];
    bool cmp(data a,data b){
    	if(a.grade != b.grade){
    		return a.grade > b.grade;
    	}else{
    		return a.num < b.num;
    	}
    	
    }
    
    int n,r,q;
    void mergesort(){
    	int i=1,j=1,k=1;
    	while(i<=n && j<=n){
    		if(A[i].grade > B[j].grade || 
    		(A[i].grade == B[j].grade && A[i].num < B[j].num)){
    			a[k].grade = A[i].grade;
    			a[k].num = A[i].num;
    			i++;
    		}else{
    			a[k].grade = B[j].grade;
    			a[k].num = B[j].num;
    			j++;
    		}
    		k++;
    	}
    	while(i<=n){
    			a[k].grade = A[i].grade;
    			a[k].num = A[i].num;
    			i++;
    			k++;
    	}
    	while(j<=n){
    			a[k].grade = B[j].grade;
    			a[k].num = B[j].num;
    			j++;
    			k++;
    	}
    }
    int main(){
    	cin>>n>>r>>q;
    	for(int i=1;i<=2*n;i++){
    		cin>>a[i].grade;
    		a[i].num = i;
    	}
    	for(int i=1;i<=2*n;i++){
    		cin>>w[i];
    	}
    	sort(a+1,a+1+2*n,cmp);
    
    	while(r--){
    
    	
    		int tt =1;
    		for(int i=1;i<2*n;i+=2){
    
    			if(w[a[i].num] > w[a[i+1].num]){
    				A[tt].grade = a[i].grade+1;
    				A[tt].num = a[i].num;
    				B[tt].grade = a[i+1].grade;
    				B[tt].num = a[i+1].num;
    			}else{
                    A[tt].grade = a[i+1].grade+1;
                    A[tt].num = a[i+1].num;
                    B[tt].grade  =  a[i].grade;
                    B[tt].num = a[i].num;
    			}
    			
    			tt++;
    		}
    		mergesort();
    	}
    	
    	cout<<a[q].num<<endl;
    	return 0;
    }
    
    
    • 1

    Information

    ID
    17304
    Time
    1000ms
    Memory
    128MiB
    Difficulty
    (None)
    Tags
    # Submissions
    0
    Accepted
    0
    Uploaded By