Pagini recente » Cod sursa (job #2298336) | Cod sursa (job #1086747) | Cod sursa (job #1740167) | Cod sursa (job #3149474) | Cod sursa (job #1014208)
#include<fstream>
#include<cstdlib>
using namespace std;
ifstream f ("sdo.in");
ofstream g("sdo.out");
int v[3000000],n,k,i;
int pivot(int st, int dr)
{
int x1,x2,x3,min,max;
srand(time(NULL));
x1=v[st+ rand()%(dr-st+1)];
x2=v[st+ rand()%(dr-st+1)];
x3=v[st+ rand()%(dr-st+1)];
if (x1<=x2 && x1<=x3) min=x1;
if (x2<=x1 && x2<=x3) min=x2;
if (x3<=x1 && x3<=x2) min=x3;
if (x1>=x2 && x1>=x3) max=x1;
if (x2>=x1 && x2>=x3) max=x2;
if (x3>=x2 && x3>=x1) max=x3;
return (x1+x2+x3-max-min);
}
void sdo(int st, int dr)
{
int p=pivot(st,dr);
int i=st,j=dr;
if (st<dr)
{
while (i<=j)
{
while (v[i]<p) i++;
while (v[j]>p) j--;
if (i<=j)
{
int aux=v[i];
v[i]=v[j];
v[j]=aux;
i++;
j--;
}
}
if (k<=j) sdo(st,j);
else sdo(i,dr);
}
}
int main ()
{
f>>n>>k;
for (i=1;i<=n;i++)
f>>v[i];
sdo(1,n);
g<<v[k];
f.close();
g.close();
return 0;
}