Pagini recente » Cod sursa (job #474400) | Cod sursa (job #2058235) | Cod sursa (job #2078072) | Cod sursa (job #1386843) | Cod sursa (job #2445967)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("sdo.in");
ofstream fout("sdo.out");
const int MAXN = 3 * 1e6 + 3;
int v[MAXN], aux[MAXN], ans;
int RandomGenerator(int st, int dr){
return ((rand() << 14) + rand() ) % (dr - st + 1) + st;
}
void quicksort(int st, int dr, int k){
int nr = RandomGenerator(st, dr), l = st - 1, copie;
if(st == dr){
ans = st;
return ;
}
for(int i = st; i <= dr; ++i)
if(v[i] <= v[nr] and i != nr)
aux[++l] = v[i];
aux[++l] = v[nr];
copie = l;
for(int i = st; i <= dr; ++i)
if(v[i] > v[nr]) aux[++l] = v[i];
for(int i = st; i <= dr; ++i) v[i] = aux[i];
if(copie == k){
ans = copie;
return ;
}
if(nr < k) quicksort(nr, dr, k);
else quicksort(st , nr, k);
}
int main(){
int n, k; fin >> n >> k;
for(int i = 1; i <= n; ++i) fin >> v[i];
quicksort(1, n, k);
fout << '\n' << v[ans];
return 0;
}