Pagini recente » Cod sursa (job #2441776) | Cod sursa (job #353543) | Cod sursa (job #1696285) | Cod sursa (job #1750582) | Cod sursa (job #794633)
Cod sursa(job #794633)
#include <fstream>
#include <stdlib.h>
using namespace std;
int n, k;
int a[3000001];
// Swap two elements in a vector
void swap(int i, int j)
{
a[i] ^= a[j];
a[j] ^= a[i];
a[i] ^= a[j];
}
// Returns the kth element in the vector
int rank(int k, int left, int right)
{
int i = left - 1, j = right + 1;
int pivot = left + (rand() % (right - left)) + 1;
swap(left, pivot);
pivot = left;
while (i <= j)
{
while (i < j && a[++i] < a[pivot]) if (i == j) break;
while (a[--j] > a[pivot]) ;
if (i < j) swap(i, j);
}
swap(pivot, j);
if (k < j) return rank(k, left, j);
else if (k > j) return rank(k, j, right);
else return a[j];
}
int main()
{
ifstream ifs("sdo.in");
ofstream ofs("sdo.out");
ifs >> n >> k;
for (int i = 1; i <= n; ++i)
ifs >> a[i];
ofs << rank(k, 0, n) << endl;
ifs.close();
ofs.close();
return 0;
}