Pagini recente » Istoria paginii runda/qwerty-4/clasament | Cod sursa (job #1796353) | Cod sursa (job #542731) | Cod sursa (job #3256879) | Cod sursa (job #1290748)
#include <fstream>
#include <algorithm>
#include <cstdlib>
#include <ctime>
using namespace std;
ifstream fin("sdo.in");
ofstream fout("sdo.out");
int n,k,i,a[3000010];
void locate(int,int);
int main()
{
srand(time(0));
fin>>n>>k;
for(i=1;i<=n;i++)
fin>>a[i];
locate(1,n);
fout<<a[k];
return 0;
}
void locate(int L,int R)
{
int M,st,dr;
if(L==R)return;
if(R==L+1)
{
if(a[L]>a[R])
{
int aux=a[L];
a[L]=a[R];
a[R]=aux;
}
return;
}
M=L+rand()%(R-L+1);
M=a[M];
for(st=L,dr=R;dr>=st;)
{
if(a[st]<M)st++;
else
if(a[dr]>=M)dr--;
else
{
int aux=a[st];
a[st]=a[dr];
a[dr]=aux;
st++;dr--;
}
}
if(k<=dr)locate(L,dr);
else locate(st,R);
}