Pagini recente » Cod sursa (job #2857853) | Cod sursa (job #2754511) | Cod sursa (job #1287970) | Cod sursa (job #3274736) | Cod sursa (job #658829)
Cod sursa(job #658829)
#include<ctime>
#include<cstdlib>
#include<fstream>
using namespace std;
#define max 3000005
int n, k, m[max];
ifstream f("sdo.in");
ofstream g("sdo.out");
int fragment(int m[max],int first,int last)
{
int unu=first-1;
int ultim=last+1;
int q=m[first+(rand()%(last-first+1))];
while(2)
{
do{ ++unu;
}while(m[unu]<q);
do{ --ultim;
}while(m[ultim]>q);
if(unu<ultim) swap(m[unu],m[ultim]);
else return ultim;
}
return 0;
}
void processing(int m[max],int first,int last,int k)
{
if(first==last) return;
int fr=fragment(m,first,last);
int y=fr-first+1;
if(y>=k) processing(m,first,fr,k);
else processing(m,fr+1,last,k-y);
}
int main ()
{
f>>n>>k;
for(int i=1;i<=n;i++) f>>m[i];
srand(time(NULL));
processing(m,1,n,k);
g<<m[k]<<"\n";
return 0;
}