Pagini recente » Cod sursa (job #3291628) | Cod sursa (job #620217) | Cod sursa (job #1950921) | Cod sursa (job #1122534) | Cod sursa (job #489805)
Cod sursa(job #489805)
#include <fstream>
#include <cstdlib>
#include <ctime>
#define Nmax 3000000+2
using namespace std;
ifstream fin("sdo.in");
ofstream fout("sdo.out");
int A[Nmax];
int N,K,rez;
inline int part(int l,int r){
int x=A[l+rand()%(r-l)],i=l-1,j=r+1;
while( 1 ){
do{
++i;
}while( A[i] < x );
do{
--j;
}while( x < A[j] );
if( i< j ) swap(A[i],A[j]);
else return j;
}
}
void find(int l,int r,int i){
if( l == r ){ rez=A[l]; return; }
int m=part(l,r);
if( i<=m-l+1 ) find(l,m,i);
else find(m+1,r,i-(m-l+1));
}
int main(){
int i;
srand(time(NULL));
fin>>N>>K;
for(i=1;i<=N;++i) fin>>A[i];
find(1,N,K);
fout<<rez<<"\n";
fin.close(); fout.close();
}