Cod sursa(job #612854)
#include<fstream.h>
#define N 3000005
int A[N];
int n, m;
ifstream f("sdo.in");
ofstream g("sdo.out");
int swap(int i, int j) {
int aux = A[i];
A[i] = A[j];
A[j] = aux;
}
int modul(int no, int d) {
while(no >= d) {
no -= d;
}
return no;
}
int partition(int l, int r) {
int randNr = rand() % (r - l + 1);
swap(l + randNr, r);
int x = A[r];
int i = l - 1;
for(int j = l; j < r; j++) {
if (A[j] < x) {
i++;
swap(i,j);
}
}
swap(i + 1, r);
return i + 1;
}
int ord_stat(int l, int r, int m) {
if (l < r) {
int q = partition(l, r);
if(q - l + 1 > m) {
return ord_stat(l, q - 1, m);
}
else
if (q - l + 1 == m) {
return A[q];
}
else
if(q - l + 1 < m) {
return ord_stat(q + 1, r, m - q + l - 1);
}
}
else
return A[l];
}
void read() {
f >> n >> m;
for(int i = 1; i <= n; i++) {
f >> A[i];
}
}
int main() {
read();
g << ord_stat(1, n, m);
}