Pagini recente » Cod sursa (job #784596) | Cod sursa (job #1671370) | Cod sursa (job #224873) | Cod sursa (job #1177734) | Cod sursa (job #2857133)
#include <fstream>
#include <cstdlib>
#include <ctime>
#include <iostream>
#define nmax 3000001
using namespace std;
ifstream f("sdo.in");
ofstream g("sdo.out");
int v[nmax];
int buf[nmax];
int sortSec(int a, int b)
{
int piv= (rand()%(b-a))+a;
int st=a,dr=b-1;
for(int i=a;i<b;i++)
{
if(v[i]<v[piv])
{
buf[st]=v[i];
st++;
}
if(v[i]>v[piv])
{
buf[dr]=v[i];
dr--;
}
}
buf[st]=v[piv];
for(int i=a;i<b;i++)
{
v[i]=buf[i];
}
return st;
}
int main()
{
srand(time(0));
int n,k;
f>>n>>k;
k--;
for(int i=0;i<n;i++)
{
f>>v[i];
}
int st=0,dr=n;
while(st!=dr-1)
{
int mid=sortSec(st,dr);
//cout<<st<<' '<<dr<<' '<<mid<<'\n';
if(k<mid) dr=mid;
else st=mid;
}
g<<v[st]<<'\n';
return 0;
}