Pagini recente » Cod sursa (job #856845) | Cod sursa (job #2238294) | Cod sursa (job #436639) | Cod sursa (job #773630) | Cod sursa (job #2225238)
#include <cstdio>
#include <stdlib.h>
#include <time.h>
using namespace std;
int N, K, i, left, right, limleft, limright, p;
int long List[3000005];
int main()
{
freopen("sdo.in", "r", stdin);
freopen("sdo.out", "w", stdout);
srand(time(NULL));
scanf("%d%d", &N, &K);
for(i=1; i<=N; i++)scanf("%ld", &List[i]);
left=limleft=1; right=limright=N;
while(p!=K){
p=rand()%(limright-limleft+1)+limleft;
left=limleft; right=limright;
while(left<p || right>p){
while(left<p && List[left]<=List[p])left++;
while(right>p && List[right]>=List[p])right--;
if(List[left]>List[right]){
int aux;
aux=List[left];
List[left]=List[right];
List[right]=aux;
if(p==left)p=right;
else if(p==right)p=left;
if(left<p)left++;
if(right>p)right--;
}
}
if(K<p)limright=right=p-1;
if(K>p)limleft=left=p+1;
}
printf("%ld", List[K]);
return 0;
}