Pagini recente » Cod sursa (job #2515229) | Cod sursa (job #1812695) | Cod sursa (job #3231428) | Cod sursa (job #1461107) | Cod sursa (job #808282)
Cod sursa(job #808282)
#include <fstream>
#include <cstdlib>
#include <algorithm>
using namespace std;
ifstream in("sdo.in");
ofstream out("sdo.out");
const int N=3001000;
int v[N],n,k;
void Sdo(int left,int right){
if(left==right){
out<<v[left];
return;
}
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);
nth_element(v+1,v+k,v+n+1);
out<<v[k];
return 0;
}