Pagini recente » Cod sursa (job #3258651) | Cod sursa (job #1075555) | Cod sursa (job #3208350) | Cod sursa (job #3280242) | Cod sursa (job #938924)
Cod sursa(job #938924)
#include <iostream>
#include <fstream>
#include <cstdlib>
using namespace std;
int A[3000100], K;
pair<int, int> partition(int l, int r) {
int pivot = A[rand() % (r - l) + l];
/// I = A[l..i) < pivot and A[i..j) == pivot and A[k..r) > pivot
int i = l, j = l, k = r;
while(j < k) {
while(j < k && A[k - 1] > pivot) k--;
if(j < k) {
swap(A[j], A[k - 1]);
if(A[j] != pivot) swap(A[i++], A[j]);
j++;
}
}
return make_pair(i, j);
}
void SDO(int l, int r) {
if(l < r) {
pair<int,int> p = partition(l, r);
if(K < p.first) SDO(l, p.first);
else if(p.second <= K) SDO(p.second, r);
}
}
int main()
{
ifstream in ("sdo.in");
ofstream out ("sdo.out");
int N, i;
in >> N >> K;
K--;
for(i = 0; i < N; i++) in >> A[i];
SDO(0, N);
out << A[K] << "\n";
return 0;
}