Pagini recente » Cod sursa (job #2293565) | Cod sursa (job #864987) | Cod sursa (job #2697498) | Cod sursa (job #668410) | Cod sursa (job #1970828)
#include <fstream>
#include <cstring>
#include <vector>
#include <algorithm>
#include <stack>
#include <iomanip>
#include <queue>
#include <cstdlib>
#include <ctime>
using namespace std;
ifstream fin("sdo.in");
ofstream fout("sdo.out");
#define nmax 1000010
int a[nmax],n,i,k;
int divide(int p, int q)
{
int st,dr,x;
x=rand()%(q-p+1)+p;
swap(a[x],a[p]);
x=a[p];
st=p;
dr=q;
while (st<dr)
{
while (st<dr&&a[dr]>=x)
dr--;
a[st]=a[dr];
while (st<dr&&a[st]<=x)
st++;
a[dr]=a[st];
}
a[st]=x;
return st;
}
int sdo(int p, int q)
{
int m=divide(p,q);
if (k==m)
return a[k];
if (m>k)
return sdo(p,m-1);
return sdo(m+1,q);
}
int main()
{
srand(time(NULL));
fin >> n >> k;
for (i=1; i<=n; i++)
fin >> a[i];
fout << sdo(1,n) << '\n';
}