Pagini recente » Cod sursa (job #539315) | Cod sursa (job #2602077) | Cod sursa (job #2182222) | Votati personajul preferat Infoarena | Cod sursa (job #1064473)
#include<fstream>
#include<cstdlib>
#include<ctime>
using namespace std;
ifstream fin("sdo.in");
ofstream fout("sdo.out");
int tab[3000000], n, lo, hi;
inline void swap(int &a, int &b) {
int aux = a;
a = b;
b = aux;
}
int partition() {
int i, j, piv;
srand(time(NULL));
piv = rand() % (hi - lo) + lo;
swap(tab[hi-1], tab[piv]);
j = lo-1;
for(i = lo; i < hi-1; i++) {
if(tab[i] < tab[hi-1]) {
j++;
swap(tab[j], tab[i]);
}
}
swap(tab[hi-1], tab[j+1]);
return j+1;
}
int main() {
int k, i, stop = 0, m;
fin >> n >> k;
k--;
for(i = 0; i < n; i++) {
fin >> tab[i];
}
lo = 0, hi = n;
while(stop == 0) {
m = partition();
if(m == k) stop = 1;
else {
if(m < k) lo = m+1;
else hi = m;
}
}
fout << tab[m];
return 0;
}