Pagini recente » Cod sursa (job #3127607) | Cod sursa (job #1349297) | Cod sursa (job #2345233) | Cod sursa (job #1150669) | Cod sursa (job #1833105)
#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)
{
// if (st >= dr) return;
int i, j, aux;
int piv = (dr + st) / 2;//(rand() % dr - st + 1) + st;
int x = v[piv];
i = st;
j = dr;
// printf("**%d %d %d\n", piv, v[i], v[j]);
do
{
while(i < dr && v[i] < x)
i ++;
while(j > st && v[j] > x)
j --;
if(i <= j)
{
aux = v[i];
v[i] = v[j];
v[j] = aux;
i ++;
j --;
}
/* printf("************%d %d\n", i, j );
for(int i2 = 1; i2 <= n; i2 ++)
printf("%d ", v[i2]);
printf("\n");*/
}while(i <= j);
//nthElement(1, n);
// printf("%d %d %d %d\n", k, piv, st, dr);
if(j > st && k <= j)
/* printf("-"),*/nthElement(st, j);
else
if(i < dr && k >= i)
/* printf("+"),*/nthElement(i, dr);
}
void mix()
{
int i, j, aux;
for (i = n; i >= 1; i --)
{
j = 1 + rand() % i;
aux = v[i];
v[i] = v[j];
v[j] = aux;
}
/* for(i = 1; i <= n; i ++)
printf("%d ", v[i]);
printf("\n");*/
}
void solve()
{
srand(time(0));
mix();
nthElement(1, n);
/*int i;
for(i = 1; i <= n; i ++)
printf("++%d ", v[i]);*/
//
// nth_element(v + 1, v + k, v + n + 1);
mid = v[k];
/* for(i = 1; i <= n; i ++)
printf("%d ", v[i]);
printf("\n");*/
}
void printFile()
{
g = fopen("sdo.out", "w");
fprintf(g, "%d\n", mid);
fclose(g);
}
int main()
{
readFile();
solve();
printFile();
return 0;
}