Pagini recente » Cod sursa (job #1515943) | Cod sursa (job #2026535) | Cod sursa (job #2169404) | Cod sursa (job #1682270) | Cod sursa (job #2277868)
#include <fstream>
#include <cstdlib>
std::ifstream cin("sdo.in");
std::ofstream cout("sdo.out");
#define maxn 3000005
int n,k,v[maxn];
int getNumber(int,int,int);
int partitie(int,int);
int main()
{
cin>>n>>k;
for(int i=1;i<=n;i++)
cin>>v[i];
cout<<getNumber(k,1,n);
}
int getNumber(int k,int st, int dr){
if(st>=dr)
return v[st];
int poz=partitie(st,dr);
if(poz==k)
return v[poz];
if(poz>k)
return getNumber(k,st,poz);
else
return getNumber(k-poz,poz+1,dr);
}
int partitie(int st, int dr){
int pivot=st+ rand()%(dr-st+1);
int i=st-1, aux;
int x=v[pivot];
v[pivot]=v[dr];
v[dr]=x;
for(int j=st;j<dr;j++)
if(v[j]<x){
++i;
aux=v[j];
v[j]=v[i];
v[i]=aux;
}
v[dr]=v[i+1];
v[i+1]=x;
return i+1;
}