1 solutions
-
0
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