Pagini recente » Cod sursa (job #1688368) | Cod sursa (job #2407135) | Cod sursa (job #1492782) | Cod sursa (job #778589) | Cod sursa (job #644510)
Cod sursa(job #644510)
#include<fstream>
#include<iostream>
#include<set>
using namespace std;
#define MAX_N 3000001
int n,k,j,i;
int A[MAX_N];
void sel( int li, int lf, int k)
{
if(li == lf)
return;
int q ;
int i = li-1, j = lf+1, p = A[li + (rand()%(lf-li+1))];
q=-1;
while(q==-1)
{
do
{
++i;
} while(A[i] < p);
do
{
--j;
} while(p < A[j]);
if(i < j)
swap(A[i], A[j]);
else
q=j;
}
int t = q-li+1;
if(t >= k)
sel( li, q, k);
else
sel( q+1, lf, k-t);
}
int main(){
ifstream f("sdo.in");
ofstream g("sdo.out");
f>>n>>k;
for(i=1;i<=n;i++){
f>>A[i];
}
sel(1,n,k);
g<<A[k];
return 0;
}