Pagini recente » Cod sursa (job #1349536) | Cod sursa (job #1075636) | Cod sursa (job #2166558) | Cod sursa (job #1907551) | Cod sursa (job #1539214)
#include <iostream>
#include <fstream>
#include <string.h>
using namespace std;
const int maxn = 3000005;
int a[maxn];
int partition(int *a, int st, int dr, int pivot) {
swap(a[pivot], a[dr]);
int l = st;
for(int i = st ; i < dr ; ++ i)
if(a[i] <= a[dr])
swap(a[l ++], a[i]);
swap(a[l], a[dr]);
return l;
}
int nthElement(int *a, int st, int dr, int k) {
// if(st > dr)
// return -1;
if(st == dr)
return a[st];
int pivot = rand() % (dr - st + 1) + st;
int ind = partition(a, st, dr, pivot);
if(ind == k)
return a[ind];
if(k < ind)
return nthElement(a, st, ind - 1, k);
else
return nthElement(a, ind + 1, dr, k - ind);
}
int main() {
ifstream fin("sdo.in");
ofstream fout("sdo.out");
srand(time(NULL));
int n, k;
fin >> n >> k;
for(int i = 0 ; i < n ; ++ i)
fin >> a[i];
fout << nthElement(a, 0, n - 1, k - 1) << ' ';
}