Pagini recente » Cod sursa (job #3356758) | Cod sursa (job #2286240) | Cod sursa (job #3320760) | Cod sursa (job #989524) | Cod sursa (job #3351084)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("sdo.in");
ofstream fout("sdo.out");
const int N=3000001;
int A[N], n, k;
int partitie(int A[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 select(int A[N],int li,int lf,int kn)
{
if(li==lf)
return;
int q=partitie(A, li, lf);
int t=q-li+1;
if(t>=kn)
select(A,li,q,kn);
else
select(A,q+1,lf,kn-t);
}
int main()
{
srand(time(NULL));
fin>>n>>k;
for(int i=1;i<=n;i++)
fin>>A[i];
select(A,1,n,k);
fout<<A[k]<<"\n";
return 0;
}