Pagini recente » Cod sursa (job #1121280) | Cod sursa (job #216060) | Cod sursa (job #3159548) | Cod sursa (job #570980) | Cod sursa (job #2610359)
#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];
for(int i=st; i<=dr; i++){
if(v[i]==pivot)
continue;
if(v[i]>pivot){
if(i<pozpivot){
swap(v[pozpivot], v[i]);
pozpivot=i;
}
}
else
if(i>pozpivot){
swap(v[pozpivot], v[i]);
pozpivot=i;
}
}
return pozpivot;
}
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;
}