Pagini recente » Cod sursa (job #2843162) | Istoria paginii runda/oni2014_ziua_viii | Istoria paginii utilizator/margarita_si_retelele_de_socializare | Cod sursa (job #815330) | Cod sursa (job #2064663)
#include <cstdio>
#include <cstdlib>
using namespace std;
int k,n,v[500010];
void swap(int &a,int &b)
{
int aux;
aux = a;
a = b;
b = aux;
}
int part_Hoare(int st, int dr)
{
int pivot = v[st + (rand() % (dr - st + 1) + rand() % (dr-st+1) + rand()%(dr-st+1))/3];
int i = st-1,j = dr + 1;
while(1)
{
do{
i++;
}while(v[i] < pivot);
do{
j--;
}while(v[j] > pivot);
if(i>=j)
return j;
swap(v[i],v[j]);
}
}
void qsort(int st,int dr)
{
if(st < dr)
{
int p = part_Hoare(st,dr);
if(p==k) return;
if(p > k) qsort(st,p);
else qsort(p+1,dr);
}
}
int main()
{
int i;
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);
qsort(1,n);
printf("%d",v[k]);
}