错题解

jiaoyuyuan 2023-12-16 16:31:32 2 返回题目

#include<bits/stdc++.h>

using namespace std;

int x[1000010],y[1000010];

void q(int l,int r,int k){

if(l>=r){
	cout<<x[l]<<'\n';return;
}
int len=r-l+1;
int p=x[l+rand()%len];
int i=l,j=r;
while(i<=j){
	while(i<=j&&x[i]>p)i++;
	while(i<=j&&x[j]<p)j--;
	if(i<=j){ 
	int t=x[i];x[i]=x[j];x[j]=t;i++;j--;
	}
	int cnt=r-i+1,cntl=j-l+1,cntr=r-i+1;
	if(cntl>=k)
	   q(l,j,k);
	else if(cnt-cntr>k)
	       q(i,r,k-(cnt-cntr));
	     else{
	     	cout<<x[j+1]<<'\n'; //return;
		 }
}

}

int main(){

int i,n,k;
cin>>n>>k;
for(i=1;i<=n;i++)cin>>x[i];
q(1,n,k);
return 0;

}

{{ vote && vote.total.up }}