Pagini recente » Cod sursa (job #1468976) | Cod sursa (job #998219) | Cod sursa (job #1830925) | Cod sursa (job #2257528) | Cod sursa (job #1560640)
#include<bits/stdc++.h>
using namespace std;
ifstream fin("sdo.in");
ofstream fout("sdo.out");
const int NMAX=3000005;
int n,k,a[NMAX];
void Qsort(int st,int dr)
{
if (st==dr) {fout<<a[st]<<"\n";return ;}
int i,poz,cnt=0,last;
poz=rand()%(dr-st+1);
poz+=st;
//punem la sfarsit
swap(a[poz],a[dr]);
last=dr+1;
for (i=st;i<dr;i++)
if (a[i]<=a[dr])
{
if (last<=dr) swap(a[i],a[last]),last++;
cnt++;
}
else if (a[i]>a[dr]) last=min(last,i);
swap(a[dr],a[st+cnt]);
if (k==(cnt+1)) fout<<a[st+cnt]<<"\n";
else if (k<(cnt+1))//se afla in stanga
Qsort(st,st+cnt-1);
else {k-=cnt+1;Qsort(st+cnt+1,dr);}
}
int main()
{
int i;
fin>>n>>k;
for (i=1;i<=n;i++) fin>>a[i];
srand(time(0));
Qsort(1,n);
return 0;
}