Pagini recente » Cod sursa (job #613237) | Cod sursa (job #1322202) | Cod sursa (job #1965073) | Cod sursa (job #2760835) | Cod sursa (job #2221191)
#include <cstdio>
#include <stdlib.h>
#include <time.h>
using namespace std;
int N, K, i, st, dr, stmax, drmax;
int long List[3000005], aux, p;
int k, Count;
int main()
{
freopen("sdo.in", "r", stdin);
freopen("sdo.out", "w", stdout);
scanf("%d%d", &N, &K);
for(i=1; i<=N; i++) scanf("%ld", &List[i]);
st=stmax=1; dr=drmax=N;
srand(time(NULL));
while(p!=K){
if(st>K){
st=stmax;
drmax=dr;
}
if(dr<K){
dr=drmax;
stmax=st;
}
p=rand()%(drmax-stmax+1)+stmax;
k=List[p];
while(st<dr){
while(List[st]<k && st<dr)st++;
while(List[dr]>k && dr>st)dr--;
if(st<dr){
aux=List[st];
List[st]=List[dr];
List[dr]=aux;
if(st==p)p=dr;
else if(dr==p)p=st;
}
st++;
dr--;
}
if(st!=dr){st--; dr++;}
while(List[p]<List[p-1] && p>1){aux=List[p]; List[p]=List[p-1]; List[p-1]=aux; p--;}
while(List[p]>List[p+1] && p<N){aux=List[p]; List[p]=List[p+1]; List[p+1]=aux; p++;}
}
printf("%ld", List[K]);
return 0;
}