Pagini recente » Cod sursa (job #2507366) | Cod sursa (job #1993009) | Cod sursa (job #1566858) | Cod sursa (job #1979584) | Cod sursa (job #1463483)
#include <cstdio>
#include <algorithm>
#define NMAX 3000007
using namespace std;
FILE *fin, *fout;
int n, k, v[NMAX];
int Mpartition(int st, int dr)
{
int i = st-1, j = st, mij = (st+dr)/2;
swap(v[dr], v[mij]);
for( ;j< dr; j++)
{
if(v[j] < v[dr])
{
i++;
swap(v[i], v[j]);
}
}
swap(v[i+1], v[dr]);
return i+1;
}
int solve(int st, int dr, int poz)
{
if(st == dr)
{
return v[st];
}
int poz1 = Mpartition(st, dr);
if(poz < poz1) return solve(st, poz1-1, poz);
if(poz > poz1) return solve(poz1 + 1, dr, poz - poz1);
if(poz == poz1) return v[poz];
}
int main()
{
fin = freopen("sdo.in", "r", stdin);
fout = freopen("sdo.out", "w", stdout);
scanf("%d %d", &n, &k);
for(int i = 1; i<= n; i++) scanf("%d", &v[i]);
printf("%d\n", solve(1, n, k));
fclose(fin);
fclose(fout);
return 0;
}