Pagini recente » Cod sursa (job #235592) | Cod sursa (job #1919086) | Cod sursa (job #956844) | Cod sursa (job #222741) | Cod sursa (job #1539246)
#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;
}
void print(int *a, int st, int dr) {
for(int i = st ; i <= dr ; ++ i)
cout << a[i] << ' ';
cout << '\n';
}
int nthElement(int *a, int n, int k) {
int ind = 0;
swap(a[rand() % n], a[n - 1]);
for(int i = 0 ; i < n - 1 ; ++ i)
if(a[i] <= a[n - 1])
swap(a[i], a[ind ++]);
swap(a[ind], a[n - 1]);
if(ind == k)
return a[ind];
else if(k < ind)
return nthElement(a, ind, k);
else
return nthElement(a + ind, n - ind, 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, n, k - 1);
}