Pagini recente » Cod sursa (job #1471065) | Cod sursa (job #1812936) | Cod sursa (job #2831149) | Cod sursa (job #1522205) | Cod sursa (job #1876459)
#include <fstream>
#include <cstdio>
#include <cstdlib>
#include <ctime>
#define Nmax 3000001
using namespace std;
ofstream g("sdo.out");
int n,k,v[Nmax];
int _qsort(int st,int dr,int x)
{
swap(v[x],v[dr]);
x = dr;
int a = st,b = dr-1;
while (a<=b)
{
if (v[a]>v[x] && v[b]<=v[x])
{
swap(v[a],v[b]);
b--;
a++;
}
else
{
if(v[a]<=v[x])
a++;
if (v[b]>v[x])
b--;
}
}
swap(v[a],v[x]);
return a;
}
int ctbqs(int st,int dr,int poz)
{
int x = rand()%(dr+1-st)+st;
int mid = _qsort(st,dr,x);
if (poz==mid)
return v[mid];
if (poz<mid)
return ctbqs(st,mid-1,poz);
else
return ctbqs(mid+1,dr,poz);
}
int main()
{
srand(time(NULL));
freopen("sdo.in","r",stdin);
scanf("%d%d",&n,&k);
for (int i=1;i<=n;i++)
scanf("%d",&v[i]);
g<<ctbqs(1,n,k);
return 0;
}