Pagini recente » Cod sursa (job #1422311) | Cod sursa (job #2835691) | Cod sursa (job #2286150) | Cod sursa (job #2732772) | Cod sursa (job #672853)
Cod sursa(job #672853)
#include<cstdio>
#include<cstdlib>
using namespace std;
int n,k,v[3000010];
void read()
{
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]);
}
void sch(int &a,int &b)
{
int aux;
aux=a;
a=b;
b=aux;
}
int partitie(int st, int dr)
{
int i,j,piv;
piv=st+rand()%(dr-st+1);
sch(v[piv],v[dr]);
for(i=j=st;i<dr;i++)
if(v[i]<v[dr])
sch(v[i],v[j++]);
sch(v[j],v[dr]);
return j;
}
int sdo(int st, int dr)
{
int val,x;
if(st == dr) return v[st];
if(st>dr)
return 0;
val=partitie(st,dr);
if(val==k)
return v[val];
if(k<val)
x=sdo(st,val-1);
else
x=sdo(val+1,dr);
return x;
}
void rez()
{
int val;
val=sdo(1,n);
printf("%d\n",val);
}
int main()
{
read();
rez();
return 0;
}