Pagini recente » Cod sursa (job #3342547) | Cod sursa (job #3352157) | Cod sursa (job #3309463) | Cod sursa (job #3329510) | Cod sursa (job #3351078)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("sdo.in");
ofstream fout("sdo.out");
const int MAX_N=3000005;
int A[MAX_N], N, K;
int part(int A[MAX_N],int li,int lf)
{
int i=li-1,j=lf+1,p=A[li+(rand()%(lf-li+1))];
while(1)
{
do
{
i++;
} while(A[i]<p);
do
{
j--;
} while(p<A[j]);
if(i<j)
swap(A[i],A[j]);
else
return j;
}
return 0;
}
void sel(int A[MAX_N],int li,int lf,int k)
{
if(li==lf)
return;
int q=part(A, li, lf);
int t=q-li+1;
if(t>=k)
sel(A,li,q,k);
else
sel(A,q+1,lf,k-t);
}
int main()
{
srand(time(NULL));
fin>>N>>K;
for(int i=1;i<=N;i++)
fin>>A[i];
sel(A,1,N,K);
fout<<A[K]<<"\n";
return 0;
}