Pagini recente » Borderou de evaluare (job #787138) | Cod sursa (job #701946) | Cod sursa (job #2746726)
#include <iostream>
#include <fstream>
using namespace std;
#define nmax 3000002
int a[nmax];
int oszt(int b,int j)
{
int i=b-1;
int k=j+1;
int random = b+rand() % (j - b+1);
int t=a[random];
while(1)
{
do{
i++;
}while(a[i]<t);
do{
k--;
}while(a[k]>t);
if(i<k)
swap(a[i],a[k]);
else return k;
}
}
void quick(int b,int j,int m)
{
if(b==j)
return;
int koz;
koz=oszt(b,j);
int t=koz-b+1;
if(t>=koz)
quick(b,koz,m);
else
quick(koz+1,j,m-t);
}
int main()
{
srand(time(NULL));
ifstream be("sdo.in");
ofstream ki("sdo.out");
int n,m;
be>>n>>m;
for(int i=1;i<=n;i++)
be>>a[i];
quick(1,n,m);
ki<<a[m]<<endl;
return 0;
}