Pagini recente » Cod sursa (job #642149) | Cod sursa (job #1860019) | Cod sursa (job #766272) | Cod sursa (job #1324713) | Cod sursa (job #2180418)
#include <fstream>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
ifstream in("sdo.in");
ofstream out("sdo.out");
#define MAX 3000005
int v[MAX];
int n,k;
int partition(int p,int r) {
int temp,rnd=p+rand()%(r-p+1);
int i=p-1,x=v[r];
temp=v[r];
v[r]=v[rnd];
v[rnd]=temp;
for (int j=p;j<r;j++) {
if (v[j]<=x) {
i++;
temp=v[j];
v[j]=v[i];
v[i]=temp;
}
}
temp=v[r];
v[r]=v[i+1];
v[i+1]=temp;
return i+1;
}
int k_th_el(int p,int r,int k) {
int pos=partition(p,r);
if (pos-p==k-1)
return v[pos];
else if (pos-p>k-1)
return k_th_el(p,pos-1,k);
else
return k_th_el(pos+1,r,k-pos+p-1);
}
int main() {
in>>n>>k;
for (int i=0;i<n;i++)
in>>v[i];
out<<k_th_el(0,n-1,k-1);
in.close();
out.close();
return 0;
}