Pagini recente » Cod sursa (job #1170239) | Monitorul de evaluare | Cod sursa (job #2078703) | Cod sursa (job #3222969) | Cod sursa (job #483740)
Cod sursa(job #483740)
#include<cstdio>
#include<cstdlib>
#include<ctime>
#include<algorithm>
using namespace std;
#define Nmax 3000001
int A[Nmax], n, k;
int part(int st, int dr) {
int i=st-1, j=dr+1, val, pivot;
pivot=st+rand()%(dr-st+1);
val=A[pivot];
while(1) {
do i++; while(A[i]<val);
do j--; while(A[j]>val);
if(i<j)
swap(A[i],A[j]);
else
return j;
}
}
void rez(int st, int dr) {
if(st<dr) {
int x=part(st,dr);
if(x>=k)
rez(st,x);
else
rez(x+1,dr);
}
}
int main() {
freopen("sdo.in","r",stdin);
freopen("sdo.out","w",stdout);
srand(time(0));
scanf("%d%d",&n,&k);
for(int i=1; i<=n; i++)
scanf("%d",&A[i]);
rez(1,n);
printf("%d\n",A[k]);
return 0;
}