Pagini recente » Cod sursa (job #108144) | Cod sursa (job #2793396) | Cod sursa (job #1817400) | Cod sursa (job #1389122) | Cod sursa (job #1075379)
#include <cstdlib>
#include <fstream>
using namespace std;
ifstream f("sdo.in");
ofstream g("sdo.out");
int v[3000001],n,k;
int partitie (int ls, int rd)
{
int p1 = (rand()%(rd-ls+1))+ls;
int p2 = (rand()%(rd-ls+1))+ls;
int p3 = (rand()%(rd-ls+1))+ls;
int p;
if (v[p1]<=v[p2])
p=p1;
else p=p2;
if(v[p]>v[p3])
p=p3;
swap(v[p],v[rd]);
int i=ls, j=rd;
while(i<j)
{
while(v[i]<v[rd] && i<j)
i++;
while(v[j]>v[rd] && i<j)
j--;
if(i<j)
swap(v[i],v[j]);
}
swap(v[i],v[rd]);
return i;
}
void sdo(int ls, int rd)
{
if (ls<rd)
{
int p = partitie(ls,rd);
if(k==p);
else if (k<p)
sdo(ls,p-1);
else
sdo(p+1,rd);
}
}
int main()
{
f>>n>>k;
for(int i=1; i<=n; ++i)
f>>v[i];
sdo(1,n);
g<<v[k];
f.close();
g.close();
return 0;
}