Pagini recente » Cod sursa (job #1115300) | Cod sursa (job #677020) | Cod sursa (job #2274716) | Cod sursa (job #2480653) | Cod sursa (job #381371)
Cod sursa(job #381371)
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
int v[3000010],i,p,u,k,n,m;
void swap(int &a,int &b){
int aux = a;
a = b;
b = aux;
}
int part(int v[],int li,int lf){
int s=li,i,p = li + rand()%(lf - (li + 1));
swap(v[p],v[li]);
for( i = li + 1; i <= lf ; i++)
if(v[i] < v[li]){
s ++;
swap(v[s],v[i]);
}
swap(v[li],v[s]);
return s;
}
int main(){
freopen("sdo.in","r",stdin);
freopen("sdo.out","w",stdout);
scanf("%d %d",&n,&k);
for(i = 1; i <= n ; i++)
scanf("%d",&v[i]);
srand(time(0));
p = 1; u = n;
while(true){
m = part(v,p,u);
if(m == k){printf("%d",v[k]);return 0;}
else
if(m > k){u = m - 1;}
else
p = m + 1;
}
return 0;}