Pagini recente » Cod sursa (job #1426645) | Cod sursa (job #2164791) | Cod sursa (job #2052158) | Monitorul de evaluare | Cod sursa (job #1307753)
#include <cstdio>
#include <algorithm>
using namespace std;
unsigned long int m[300000],stanga[300000],dreapta[30000];
int n,k,ns,nd;
void sdo(int st, int dr, int x)
{
int i,c=0;
ns=0;
nd=0;
for(i=st;i<=dr;i++)
{
if(m[i]<x)
{
stanga[ns]=m[i];
ns++;
}
if(m[i]>x)
{
dreapta[nd]=m[i];
nd++;
}
if(m[i]==x)
c++;
}
for(i=0;i<ns;i++)
m[st+i]=stanga[i];
for(i=ns;i<ns+c;i++)
m[st+i]=x;
for(i=ns+c;i<ns+c+nd;i++)
m[st+i]=dreapta[i-ns-c];
if(st+ns==k)
return;
if(st+ns>k)
sdo(st,st+ns-1,m[(st+st+ns-1)/2]);
else
sdo(st+ns+c,dr,m[(st+ns+c+dr)/2]);
}
int main()
{
freopen("sdo.in", "r", stdin);
freopen("sdo.out", "w", stdout);
scanf("%d %d ", &n, &k);
k--;
int i;
for(i=0;i<n;i++)
scanf("%u ", &m[i]);
sdo(0,n-1,m[(n-1)/2]);
printf("%d", m[k]);
return 0;
}