Pagini recente » Cod sursa (job #2511783) | Cod sursa (job #2113603) | Cod sursa (job #1579234) | Cod sursa (job #579117) | Cod sursa (job #1256908)
#include <fstream>
#include <stdlib.h>
using namespace std;
#define Nmax 3000005
int v[Nmax];
int n, k;
ifstream f ("sdo.in");
ofstream g ("sdo.out");
void read(){
f >> n >> k;
for (int i = 1; i <= n; ++i)
f >> v[i];
}
void swap(int& a, int& b){
a = (a + b) - (b = a);
}
int part(int l, int r){
int i = l - 1;
int j = r + 1;
int p = v[( rand() % (r - l + 1) + l)];
while(1){
do ++i; while (v[i] < p);
do --j; while (v[j] > p);
if (i < j)
swap(v[i], v[j]);
else
return j;
}
return 0;
}
void solve(int l, int r){
if (l == r)
return;
int q = part(l, r);
if (q >= k)
solve(l, q);
else
solve(q + 1, r);
}
int main(){
read();
srand(9283475);
solve(1, n);
g << v[k];
return 0;
}