Pagini recente » Cod sursa (job #2700457) | Cod sursa (job #496823) | Cod sursa (job #3265781) | Cod sursa (job #2171977) | Cod sursa (job #2975687)
#include <bits/stdc++.h>
using namespace std;
int v[3000005];
int aux[3000005];
int randomValue(int a, int b) {
return rand() % (b - a + 1) + a;
}
int findValue(int left, int right, int k) {
int pivot = randomValue(left, right);
int currentPosition = left;
for (int i = left; i <= right; ++i) {
if (i == pivot) continue;
if (v[i] > v[pivot]) continue;
aux[currentPosition] = v[i];
currentPosition += 1;
}
aux[currentPosition] = v[pivot];
int pivotPosition = currentPosition;
currentPosition += 1;
for (int i = left; i <= right; ++i) {
if (v[i] <= v[pivot]) continue;
aux[currentPosition] = v[i];
currentPosition += 1;
}
for (int i = left; i <= right; ++i) {
v[i] = aux[i];
}
if (pivotPosition == k) {
return v[pivotPosition];
}
if (k < pivotPosition) {
return findValue(left, pivotPosition - 1, k);
}
return findValue(pivotPosition + 1, right, k);
}
int main() {
ifstream fin ("sdo.in");
ofstream fout ("sdo.out");
int n, k;
fin >> n >> k;
for (int i = 1; i <= n; ++i) {
fin >> v[i];
}
fout << findValue(1, n, k);
return 0;
}