Pagini recente » Cod sursa (job #152731) | Cod sursa (job #243949) | Cod sursa (job #2961146) | Cod sursa (job #102753) | Cod sursa (job #1731568)
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <ctime>
using namespace std;
#define NMAX 3000001
ifstream in("sdo.in");
ofstream out("sdo.out");
long ii,n,a[NMAX];
int part(int st,int dr)
{
int z = rand()%(dr-st+1) + st;
swap(a[z],a[dr]);
int x = a[dr];
int i = st-1;
for(int j = st;j<dr;j++)
{
if(a[j]<=x)
{
i++;
swap(a[j],a[i]);
}
}
swap(a[dr],a[i+1]);
return i+1;
}
int stat(int st,int dr,int i)
{
if(st==dr) {return a[st];}
if(dr>st){
int mij = part(st,dr);
int k = mij-st+1;
// cout << st << " " << dr << " " << mij << " " << k << " " << a[mij]<< endl;
//cout << a[mij] << " ";
// cout << k << " " ; for(int i=st;i<=dr;i++) cout << a[i] << " "; cout << endl;
// cout << i << " " << k << endl;
if(k == i){ return a[mij];}
if(i<k)
{
stat(st,mij-1,i);
}
else
{
// cout << mij+1 << " " << dr << endl;
stat(mij+1,dr,i-k);
}
}
}
int main()
{
srand(time(0));
in >> n >> ii;
for(int i=0;i<n;i++){ in >> a[i];}
out << stat(0,n-1,ii);
// for(int i=0;i<n;i++)
// {
// out << a[i] << " ";
// }
return 0;
}