60分 TLE归并求助 P1309
查看原帖
60分 TLE归并求助 P1309
540956
douweiqi楼主2023/7/25 15:15
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const long long N=1e7+10;
const long long M=1e3+10;
struct xx{
	long long w;
	long long i;
	long long k;
}a[N],b[N];
void guibing(long long l,long long r){
	long long mid=(l+r)/2;
	if(l==r) return ;
	guibing(l,mid);
	guibing(mid+1,r);
	long long a1=l,a2=mid+1,b1=0;
	while(a1<=mid&&a2<=r){
		if(a[a1].k>a[a2].k){
			b[++b1]=a[a1];
			a1++;
		}else if(a[a1].k<a[a2].k){
			b[++b1]=a[a2];
			a2++;
		}else if(a[a1].i<a[a2].i){
			b[++b1]=a[a1];
			a1++;
		}else{
			b[++b1]=a[a2];
			a2++;
		}
	}
	while(a1<=mid){
		b[++b1]=a[a1];
		a1++;
	}
	while(a2<=r){
		b[++b1]=a[a2];
		a2++;
	}
	for(long long i=l;i<=r;i++){
		a[i]=b[i-l+1];
	}
}
long long n,r,q;
int main(){
	scanf("%lld%lld%lld",&n,&r,&q);
	for(long long i=1;i<=n*2;i++){
		//cin>>a[i].k;
		scanf("%lld",&a[i].k);
		a[i].i=i;
	}
	for(long long i=1;i<=n*2;i++){
		//cin>>a[i].w;
		scanf("%lld",&a[i].w);
	}
	guibing(1,n*2);
	while(r--){
		for(long long i=1;i<=n*2;i+=2){
			if(a[i].w<a[i+1].w){
				a[i+1].k++;
			}else if(a[i].w>a[i+1].w){
				a[i].k++;
			}
		}
		guibing(1,n*2);
	}
	cout<<a[q].i;
	return 0;
}

时间限制500ms

2023/7/25 15:15
加载中...