Pagini recente » Cod sursa (job #846161) | Cod sursa (job #2936119) | Cod sursa (job #316495) | Cod sursa (job #1600501) | Cod sursa (job #1615826)
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <ctime>
using namespace std;
int v[3000001];
void interschimbare(int &a, int &b);
int elementK(int k, int n);
int main()
{
FILE *fin = fopen("sdo.in", "r");
FILE *fout = fopen("sdo.out", "w");
int n, k, rez;
srand(time(NULL));
fscanf(fin, "%d%d", &n, &k);
for(int i = 1; i <= n; ++i)
fscanf(fin, "%d", &v[i]);
rez = elementK(k, n);
fprintf(fout, "%d", rez);
return 0;
}
int elementK(int k, int n){
int st, dr, pivot, poz, i, j;
st = 1;
dr = n;
do{
poz = st + (rand() % (dr - st + 1));
pivot = v[poz];
interschimbare(v[st], v[poz]);
i = st + 1;
j = dr;
while(i <= j){
while(i <= j && pivot >= v[i])
++i;
while(i <= j && pivot < v[j])
--j;
if(i <= j){
interschimbare(v[i], v[j]);
++i;
--j;
}
}
--i;
interschimbare(v[st], v[i]);
if(i == k)
return v[i];
if(i > k)
dr = i - 1;
else st = i + 1;
}while( st <= dr);
}
void interschimbare(int &a, int &b){
int aux = a;
a = b;
b = aux;
}