Pagini recente » Cod sursa (job #3273180) | Cod sursa (job #2568788) | Cod sursa (job #1836325) | Clasamentul arhivei de probleme | Cod sursa (job #612991)
Cod sursa(job #612991)
#include<cstdio>
#include<ctime>
#include<cstdlib>
#include<iostream>
#include<algorithm>
using namespace std;
int v[3000005];
int part(int st, int dr)
{
int poz,i;
poz=st+rand()%(dr-st+1);
swap(v[dr],v[poz]);
for(i=poz=st;i<dr;i++)
if(v[i]<v[dr])
swap(v[i],v[poz++]);
swap(v[dr],v[poz]);
return poz;
}
int bin(int st, int dr, int k)
{
int pp=part(st,dr);
while(pp!=k)
{
if(pp<k)
st=pp+1;
else dr=pp-1;
pp=part(st,dr);
}
return v[k];
}
int main()
{
int n,k;
srand(time(NULL));
freopen("sdo.in","r",stdin);
freopen("sdo.out","w",stdout);
scanf("%d%d",&n,&k);
for(int i=1;i<=n;i++)
scanf("%d",&v[i]);
printf("%d\n",bin(1,n,k));
return 0;
}
/*
A few months later...
Aigis: Who's overanalyzing now?
Aigis: ...
Aigis: Wait.
*/