Pagini recente » Cod sursa (job #447324) | Cod sursa (job #2759151) | Cod sursa (job #1571638) | Cod sursa (job #1857118) | Cod sursa (job #431578)
Cod sursa(job #431578)
#include<cstdio>
#include<cstdlib>
#include<ctime>
#include<fstream>
using namespace std;
#define N 3000010
ifstream in("sdo.in");
ofstream out("sdo.out");
int n,k;
int a[N];
inline void citire()
{
in>>n>>k;
for(int i=1; i<=n; ++i)
in>>a[i];
}
inline int part(int p,int u)
{
int piv=a[p+rand()%(u-p+1)];
int i=p-1,j=u+1;
while(true)
{
++i;
--j;
while(a[i]<piv)
++i;
while(piv<a[j])
--j;
if(i<j)
swap(a[i],a[j]);
else
return j;
}
return j;
}
void rezolva(int p,int u)
{
if(p>=u)
return;
int poz=part(p,u);
if(poz-p+1>=k)
rezolva(p,poz);
else
{
k-=poz-p+1;
rezolva(poz+1,u);
}
}
int main()
{
citire();
srand(time(NULL));
int k1=k;
rezolva(1,n);
out<<a[k1]<<'\n';
return 0;
}