Pagini recente » Atasamentele paginii abce | Borderou de evaluare (job #3309091) | Cod sursa (job #3340985) | Cod sursa (job #3316630) | Cod sursa (job #3348865)
#include <fstream>
#include <time.h>
#include <random>
#include <iostream>
using namespace std;
ifstream fin("sdo.in");
ofstream fout("sdo.out");
const int Nmax = 3000005;
int findKth( int v[], int st, int dr, int k)
{
cout << " st = " << st << " dr = " << dr << " ";
if ( st == dr )
return v[st];
int pos = st + rand() % (dr - st + 1);
cout << "pos = " << pos << " ";
int pivot = v[pos], i, j;
j = st;
for ( i = st; i <= dr; ++i )
if ( v[i] <= pivot )
{
swap(v[i], v[j]);
++j;
}
cout << "partitia s a facut pe poz " << j - 1 << "\n";
if ( j - 1 - st + 1 >= k )
return findKth( v, st, j - 1, k );
return findKth(v, j, dr, k - (j - st));
}
int v[Nmax];
int main()
{
srand(time(0));
int n, i, k;
fin >> n >> k;
for ( i = 1; i <= n; ++i )
fin >> v[i];
fout << findKth(v, 1, n, k);
return 0;
}