Pagini recente » Cod sursa (job #1471210) | Cod sursa (job #841605) | Cod sursa (job #2106697) | Cod sursa (job #2745123) | Cod sursa (job #425602)
Cod sursa(job #425602)
/*#include <cstdio>
#include <istream>
#include <algorithm>
using namespace std;
#define NMAX 3000005
int N, K;
int V[NMAX];
void citire()
{
scanf("%d%d",&N,&K);
for(int i = 1 ; i <= N ; i++)
scanf("%d",&V[i]);
}
int main()
{
freopen("sdo.in","r",stdin);
freopen("sdo.out","w",stdout);
citire();
sort(V + 1, V + N);
printf("%d",V[K]);
return 0;
}*/
#include <fstream>
#include <ctime>
#include <cstdlib>
using namespace std;
#define MAX_N 3000005
ifstream fin ("sdo.in");
ofstream fout ("sdo.out");
int A[MAX_N], N, K;
void citire()
{
fin >> N >> K;
for(int i = 1; i <= N; ++i)
fin >> A[i];
}
int part(int A[MAX_N], int st, int dr)
{
int i = st, j = dr, p = A[st];
while(1)
{
while(A[i] < p)
i++;
while(p < A[j]);
j--;
if(i < j)
swap(A[i], A[j]);
else
return j;
}
return 0;
}
void sel(int A[MAX_N], int st, int dr, int k)
{
if(st == dr)
return;
int q = part(A, st, dr);
int t = q - st + 1;
if(t >= k)
sel(A, st, q, k);
else
sel(A, q + 1, dr, k - t);
}
int main()
{
citire();
sel(A, 1, N, K);
fout << A[K] << "\n";
}