Pagini recente » Cod sursa (job #1336927) | Cod sursa (job #783057) | Cod sursa (job #533134) | Cod sursa (job #1144430) | Cod sursa (job #1829364)
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <ctime>
using namespace std;
FILE *f, *g;
int n, v[3000001];
int mid, k;
void readFile()
{
f = fopen("sdo.in", "r");
fscanf(f, "%d%d", &n, &k);
int i;
for(i = 1; i <= n; i ++)
fscanf(f, "%d", &v[i]);
fclose(f);
}
void nthElement(int st, int dr)
{
int i, j, aux;
int piv = (st + dr) / 2;
i = st;
j = dr;
do
{
while(i < dr && v[i] < v[piv])
i ++;
while(j > st && v[j] > v[piv])
j --;
if(i <= j)
{
aux = v[i];
v[i] = v[j];
v[j] = aux;
i ++;
j --;
}
}
while(i <= j);
if(k < dr && k > piv)
nthElement(i, dr);
else
if(k > st && k < piv)
nthElement(st, j);
}
void mix()
{
srand(time(0));
int i, j, aux;
for (i = n; i >= 1; i --)
{
j = 1 + rand() % i;
aux = v[i];
v[i] = v[j];
v[j] = aux;
}
}
void solve()
{
mix();
nthElement(1, n);
mid = v[k];
// mid = nth_element();
}
void printFile()
{
g = fopen("sdo.out", "w");
fprintf(g, "%d\n", mid);
fclose(g);
}
int main()
{
readFile();
solve();
printFile();
return 0;
}