Pagini recente » Cod sursa (job #1689982) | Cod sursa (job #1648751) | Cod sursa (job #2519986) | Cod sursa (job #2021060) | Cod sursa (job #1348840)
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <ctime>
using namespace std;
ifstream in ("sdo.in");
ofstream out ("sdo.out");
const int MAXN = 3000010;
int V[MAXN];
int partition (int st, int dr)
{
int i, j, p;
i = st - 1;
j = dr + 1;
p = V[st + rand () % (dr - st + 1)];
while (1){
do{
i ++;
} while (V[i] < p);
do{
j --;
} while (V[j] > p);
if (i < j)
swap (V[i], V[j]);
else
return j;
}
}
void my_nth (int st, int dr, int K)
{
if (st >= dr)
return;
int p = partition (st, dr);
int t = p - st + 1;
if (K <= t)
my_nth (st, p, K);
else
my_nth (p + 1, dr, K - t);
}
int main()
{
srand (time (0));
int N, K, i;
in >> N >> K;
for (i = 1; i <= N; i ++)
in >> V[i];
my_nth (1, N, K);
out << V[K];
return 0;
}