Pagini recente » Cod sursa (job #2102424) | Cod sursa (job #270876) | Cod sursa (job #210865) | Cod sursa (job #3166258) | Cod sursa (job #2610371)
#include <cstdio>
#include <cstdlib>
#include <algorithm>
using namespace std;
int v[3000005];
int sparg_random(int st, int dr)
{
int pozpivot=rand()%(dr-st+1);
int pivot=v[st+pozpivot];
swap(v[st+pozpivot],v[dr]);
pozpivot=st-1;
for(int i=st; i<dr; i++)
if(v[i]<=pivot){
pozpivot=pozpivot+1;
swap(v[i], v[pozpivot]);
}
swap(v[pozpivot+1], v[dr]);
return pozpivot+1;
}
int aleg_random(int st, int dr, int poz)
{
if(st==dr)
return v[st];
int k=sparg_random(st, dr);
if(poz==k-st+1)
return v[k];
if(poz<k-st+1)
return aleg_random(st, k-1, poz);
else
return aleg_random(k+1, dr, poz-(k-st+1));
}
int main()
{ freopen("sdo.in", "r", stdin);
freopen("sdo.out", "w", stdout);
int n,k,i;
srand(12345678);
scanf("%d%d", &n, &k);
for(i=1; i<=n; i++)
scanf("%d", &v[i]);
printf("%d", aleg_random(1, n, k));
return 0;
}