Cod sursa(job #808271)

Utilizator vlad.doruIon Vlad-Doru vlad.doru Data 6 noiembrie 2012 16:23:50
Problema Statistici de ordine Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 0.79 kb
#include <fstream>
#include <cstdlib>

using namespace std;

ifstream in("sdo.in");
ofstream out("sdo.out");

const int N=3000100;

int v[N],n,k;

void Sdo(int left,int right){
	int randpivot=(rand()%(right-left))+left;
	swap(v[randpivot],v[left]);
	int pivot=v[left],l=left+1,r=right;
	while(l<r){
		if(v[l]>pivot){
			swap(v[l],v[r]);
			r--;
			continue;
		}
		l++;
	}
	if(v[l]<=pivot){
		swap(v[left],v[l]);
		if(l==k){
			out<<pivot;
			return;
		}
		if(l<k){
			Sdo(l+1,right);
			return;
		}
		Sdo(left,l-1);
	}		
	else{
		swap(v[left],v[l-1]);
		if(l-1==k){
			out<<pivot;
			return;
		}
		if(l-1<k){
			Sdo(l,right);
			return;
		}
		Sdo(left,l-2);
	}
}

int main(){
	in>>n>>k;
	for(int i=1;i<=n;++i){
		in>>v[i];
	}
	Sdo(1,n);
	return 0;
}