Pagini recente » Cod sursa (job #192685) | Cod sursa (job #2707624) | Cod sursa (job #2483543) | Cod sursa (job #1547145) | Cod sursa (job #2130740)
#include <iostream>
#include <fstream>
#include <cstdlib>
using namespace std;
ifstream fin("sdo.in");
ofstream fout("sdo.out");
int v[3000001];
int partitie(int p,int r){
int pivot;
pivot = (rand()%(r - p + 1) + p);
swap(v[pivot],v[r]);
int q = r;
int x = v[r];
int i = p-1;
for(int j=p;j<r;++j){
if(v[j] <= x){
++i;
swap(v[i],v[j]);
}
}
swap(v[i + 1],v[r]);
return i + 1;
}
int orderSelect(int p,int r,int k)
{
if(p == r)
return v[p];
int q;
int aux;
q = partitie(p,r);
aux = q - p + 1;
if(aux == k)
return v[q];
else if(aux > k)
return orderSelect(p,q - 1,k);
else
return orderSelect(q + 1,r,k - aux);
}
int main()
{
int n,k,x,i;
fin >> n >> k;
for(i=1;i<=n;++i){
fin >> v[i];
}
fout << orderSelect(1,n,k);
return 0;
}