Pagini recente » Cod sursa (job #3125725) | Cod sursa (job #2174987) | Cod sursa (job #1374818) | Cod sursa (job #3237448) | Cod sursa (job #380010)
Cod sursa(job #380010)
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define NMAX 3000003
int n,k,i,j,l,r,sol,len,m[NMAX];
bool d;
char pars[1<<16];
void swap(int &a,int &b) {
int c=a;
a=b;
b=c;
}
int randPiv(int l,int r) {
return l+rand()%(r-l+1);
}
int main() {
freopen("sdo.in","r",stdin);
freopen("sdo.out","w",stdout);
scanf("%d%d\n",&n,&k);
fgets(pars,1<<16,stdin);
len=strlen(pars)-1;
for(i=0,j=0;i<len;i++)
if(pars[i]<'0' || pars[i]>'9') j++;
else m[j]=m[j]*10+pars[i]-'0';
l=1;
r=n;
do {
i=l;
j=r;
swap(m[i],m[randPiv(l,r)]);
d=false;
while(i<j) {
if(m[i]>m[j]) {
swap(m[i],m[j]);
d=!d;
}
if(d) ++i;
else --j;
}
if(i==k) sol=m[k];
else
if(k<i) r=i-1;
else l=i+1;
} while(!sol);
printf("%d\n",sol);
return 0;
}