Pagini recente » Cod sursa (job #447549) | Cod sursa (job #1294415) | Cod sursa (job #1337545) | Cod sursa (job #3250866) | Cod sursa (job #2201460)
#include <bits/stdc++.h>
#define nmax 3000005
using namespace std;
fstream f1("sdo.in", ios::in);
fstream f2("sdo.out", ios::out);
int v[nmax];
int partitionare(int st, int dr)
{
int i, j, pivval=v[rand()%(dr-st+1)+st];
swap(v[rand()%(dr-st+1)+st], v[dr]);
i=st-1;
for(j=st; j<dr; j++)
if(v[j]<=pivval)
{
i++;
swap(v[i], v[j]);
}
swap(v[i+1], v[dr]);
return i+1;
}
void solutie(int st, int dr, int k)
{
if(st<dr)
{
int piv=partitionare(st, dr);
if(k>piv-st+1) solutie(piv+1, dr, k-(piv-st+1));
else solutie(st, piv, k);
}
}
int main()
{
int i, n, k;
cin>>n>>k;
for(i=1; i<=n; i++) cin>>v[i];
solutie(1, n, k);
cout<<v[k];
return 0;
}