Pagini recente » Cod sursa (job #1194635) | Cod sursa (job #2444251) | Cod sursa (job #1055190) | Cod sursa (job #2188598) | Cod sursa (job #1126337)
#include <vector>
#include <fstream>
#include <algorithm>
using namespace std;
ifstream fin ("sdo.in");
ofstream fout ("sdo.out");
#define MAXN 3000010
int N, K;
int elements[MAXN];
int sodPartition(int left, int right) {
int i = left - 1, j = right + 1;
int p = elements[left];
while (true) {
do {
++ i;
} while(elements[i] < p);
do {
-- j;
} while(elements[j] > p);
fout << i << " " << j << "\n";
if (i < j)
swap (elements[i], elements[j]);
else {
return i;
}
}
return 0;
}
int sod (int K, int left, int right) {
if (left == right)
return elements[K];
int p = sodPartition(left, right);
fout << p << " " << elements[p] << " " << left << " " << right << "\n";
for (int i = 1; i <= N; ++ i) fout << elements[i] << " ";
fout << "\n";
if (p < K) return sod(K, p + 1, right);
else if (p >= K) return sod(K, left, p);
else return elements[K];
}
int main () {
fin >> N >> K;
for (int i = 1; i <= N; ++ i) {
fin >> elements[i];
}
nth_element(elements + 1, elements + K, elements + N + 1);
fout << elements[K] << "\n";
return 0;
}