Pagini recente » Cod sursa (job #1903963) | Cod sursa (job #1706153) | Cod sursa (job #2325817) | Cod sursa (job #801560) | Cod sursa (job #2830278)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("sdo.in");
ofstream fout("sdo.out");
int N, K;
vector<int> v;
/// gasim pivotul
int pivot(int st, int dr)
{
int poz=st+rand()%(dr-st+1), i=st;
swap(v[dr],v[poz]);
for(int j=st;j<dr;j++)
if(v[j]<v[dr]){
swap(v[j],v[i]);
i++;
}
swap(v[i],v[dr]);
return i;
}
int quickSelect(int st, int dr, int nr)
{
int poz=pivot(st,dr);
if(poz-st+1==nr)
return v[poz];
if(poz-st+1>nr)
return quickSelect(st,poz-1,nr);
return quickSelect(poz+1,dr,nr-(poz-st+1));
}
int main()
{
fin>>N>>K;
int x;
for(int i=0;i<N;i++){
fin>>x;
v.push_back(x);
}
fout<<quickSelect(0,N-1,K);
fin.close();
fout.close();
return 0;
}