Pagini recente » Cod sursa (job #2821104) | Cod sursa (job #962588) | Cod sursa (job #2309103) | Cod sursa (job #2810346) | Cod sursa (job #2834404)
#include<iostream>
#include<fstream>
#include<stdlib.h>
using namespace std;
const int mx=3e6+10;
int v[mx],n,k;
int partition(int left,int right){
int index=rand()%(right-left+1)+left;
int pivot=v[index];
swap(v[index],v[right]);
int j=left;
for(int i=left;i<=right;i++){
if(v[i]<=pivot){
swap(v[j],v[i]);
j++;
}
}
return j-1;
}
int find(int left, int right,int nth){
if(left==right){
return v[left];
}
int p=partition(left,right);
int lcount=p-left;
if(nth<=lcount){
return find(left,p-1,nth);
}
else{
return find(p,right,nth-lcount);
}
}
void read(){
ifstream in("sdo.in");
in>>n>>k;
for(int i=0;i<n;i++){
in>>v[i];
}
}
void solve(){
ofstream out("sdo.out");
out<<find(0,n-1,k);
}
int main(){
read();
solve();
return 0;
}