Pagini recente » Cod sursa (job #1948109) | Cod sursa (job #2613325) | Cod sursa (job #1458776) | Cod sursa (job #2813509) | Cod sursa (job #1553305)
#include<cstdio>
#include<ctime>
#include<cstdlib>
#define DIM 3000005
using namespace std;
int part(int, int);
void sel(int, int, int);
int N, K, i;
int v[DIM];
int main()
{
srand(time(NULL));
freopen("sdo.in","r",stdin);
freopen("sdo.out","w",stdout);
scanf("%d%d", &N, &K);
for (i = 1; i <= N; i++)
scanf("%d", &v[i]);
sel(1, N, K);
printf("%d", v[K]);
}
int part(int left, int right)
{
int i = left - 1, j = right + 1, p = v[left + (rand()%(right - left + 1))];
int aux;
while (1)
{
do
{
i++;
} while (v[i] < p);
do
{
j--;
} while (p < v[j]);
if (i < j)
{
aux = v[i];
v[i] = v[j];
v[j] = aux;
}
else
return j;
}
return 0;
}
void sel(int left, int right, int k)
{
if (left == right)
return;
int q = part(left, right);
int t = q - left + 1;
if (t >= k)
sel(left, q, k);
else
sel(q + 1, right, k - t);
}