Pagini recente » Rating Ionita Alexandru Andrei (xKai62) | Cod sursa (job #487804) | Istoria paginii runda/aqdafs/clasament | Istoria paginii runda/simulare_oji_10_3/clasament | Cod sursa (job #1290759)
#include <cstdio>
#include <algorithm>
#include <cstdlib>
#include <ctime>
using namespace std;
int n,k,i,a[3000010];
void locate(int,int);
int main()
{
srand(time(0));
freopen("sdo.in","r",stdin);
freopen("sdo.out","w",stdout);
scanf("%d%d",&n,&k);
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
locate(1,n);
printf("%d\n",a[k]);
return 0;
}
void locate(int L,int R)
{
int M,st,dr;
if(L==R)return;
if(R==L+1)
{
if(a[L]>a[R])
{
int aux=a[L];a[L]=a[R];a[R]=aux;
}
return;
}
M=(L+R)/2;
M=a[L];
for(st=L,dr=R;dr>=st;)
{
if(a[st]<M)st++;
else
if(a[dr]>M)dr--;
else
{
int aux=a[st];a[st]=a[dr];a[dr]=aux;
st++;dr--;
}
}
if(k<=dr)locate(L,dr);
else locate(st,R);
}