C++用了快排和快读依然全TLE,求助大佬,救救我这个憨憨
查看原帖
C++用了快排和快读依然全TLE,求助大佬,救救我这个憨憨
428535
Dgucheng楼主2021/7/15 15:46
#include<bits/stdc++.h>
using namespace std;
int ans=0,k,n,a[5000001];
inline int read(){
	int x=0,f=1;
	char c=getchar();
	while(c<'0'||c>'9'){
		if(c=='-')f=-1;
		c=getchar();
	}
	while(c>='0'&&c<='9'){
		x=(x<<1)+(x<<3)+(c^48);
		c=getchar();
	} 
	return x*f;
}
void findk(int l,int r){
	if (l==r){
		ans=a[l];
		return ;
	}
	int i=l;
	int j=r;
	int f=a[(1+r)/2];
	int t;
	do {
		while (a[i]<f)i++;
		while (a[j]>f)j--;
		if (i<=j){
			t=a[i];
			a[i]=a[j];
			a[j]=t;
			i++;
			j--;
		}
	}while(i<=j);
	if (k<=j)
		findk(l,j);
	else if (i<=k)
		findk(i,r);
	else findk(j+1,i-1);
}
int main(){
	n=read();
	k=read();
	for(register int i=0;i<n;++i) a[i]=read();
	findk(0,n-1);
	printf("%d",ans);
	return 0;
}```
2021/7/15 15:46
加载中...