Pagini recente » Cod sursa (job #1399878) | Cod sursa (job #399692) | Cod sursa (job #1902000) | Cod sursa (job #423998) | Cod sursa (job #3264291)
#include <fstream>
#include <cstdlib>
#include <iostream>
using namespace std;
ifstream fin("statisticiordine.in");
ofstream fout("statisticiordine.out");
const unsigned int NMAX = 4e6;
unsigned int v[NMAX];
void part3 (unsigned int v[], int st, int dr, int &p1, int &p2) {
p1 = st;
p2 = dr - 1;
int i = st;
while (i <= p2) {
if (v[i] < v[dr]) {
swap (v[i], v[p1]);
p1++;
i++;
} else if (v[i] > v[dr]) {
swap(v[i], v[p2]);
p2--;
} else { // v[i] == v[dr]
i++;
}
}
++p2;
swap (v[dr], v[p2]);
}
void solo(unsigned int v[], int st, int dr, int k) {
if (st == dr) {
return;
}
int p1, p2;
part3(v, st, dr, p1, p2);
if (k < p1) {
solo(v, st, p1 - 1, k);
}
if (k > p2) {
solo(v, p2 + 1, dr, k);
}
}
int main() {
int n, k;
fin >> n >> k;
k--;
for (int i = 0; i < n; i++) {
fin >> v[i];
}
for (int i = n - 1; i >= 0; i--) {
int p = rand() % (i + 1);
swap(v[i], v[p]);
}
solo(v, 0, n - 1, k);
fout << v[k];
}