Pagini recente » Cod sursa (job #379863) | Cod sursa (job #976727) | Cod sursa (job #1896347) | Cod sursa (job #1474851) | Cod sursa (job #1679685)
#include <fstream>
#include <algorithm>
#include <vector>
#include <cstring>
#include <cstdlib>
#include <ctime>
using namespace std;
ifstream fin("sdo.in");
ofstream fout("sdo.out");
int n, k;
int v[3000005];
int getPos(int left, int right) {
int piv = left + rand()%(right - left + 1);
swap(v[left], v[piv]);
for (int di = 0, dj = -1; left < right; left += di, right += dj) {
if (v[left] > v[right]) {
swap(v[left], v[right]);
swap(di, dj);
di *= -1, dj *= -1;
}
}
return left;
}
int main() {
srand(time(NULL));
fin >> n >> k;
for (int i = 1; i <= n; ++i)
fin >> v[i];
int left = 1, right = n;
while (left <= right) {
int mid = getPos(left, right);
if (mid == k) {
fout << v[k] << '\n';
return 0;
}
if (mid > k)
right = mid - 1;
else
left = mid + 1;
}
return 0;
}
//Trust me, I'm the Doctor!