Pagini recente » Cod sursa (job #215598) | Cod sursa (job #113122) | Cod sursa (job #669921) | Cod sursa (job #2290462) | Cod sursa (job #2123894)
#include <iostream>
#include <fstream>
#include <time.h>
#include <algorithm>
using namespace std;
int v[3000005];
int N, K;
void afisare()
{
for (int i = 0; i < N; ++i)
cout<<v[i]<<" ";
cout<<"\n";
}
int partitie(int st, int dr, int pivot)
{
int val = v[pivot];
int index = st;
swap(v[pivot], v[dr]);
for(int i = st; i < dr; ++i)
{
if(v[i] < val)
{
swap(v[index], v[i]);
++index;
}
}
swap(v[index], v[dr]);
return index;
}
int select(int st, int dr, int k)
{
int pivot;
if(st==dr)
return v[st];
srand(time(0));
pivot = st + rand() % (dr - st);
//cout<<pivot<<" "<<st<<" "<<dr<<endl;
pivot = partitie(st, dr, pivot);
//afisare();
//cout<<pivot<<endl;
if(k == pivot)
return v[k];
else if (k < pivot)
return select(st, pivot - 1, k);
else
return select(pivot + 1, dr, k);
}
int main()
{
ifstream in ("sdo.in");
ofstream out ("sdo.out");
in>>N>>K;
for(int i = 0; i < N; ++i)
in>>v[i];
//afisare();
//nth_element(v, v + K, v + N);
//afisare();
//cout<<v[K - 1];
out<<select(0, N - 1, K - 1);
}