Pagini recente » Cod sursa (job #314224) | Cod sursa (job #1784309) | Cod sursa (job #1046599) | Cod sursa (job #184757) | Cod sursa (job #2715951)
#include <fstream>
#include <ctime>
#include <cstdlib>
using namespace std;
ifstream fin("sdo.in");
ofstream fout("sdo.out");
int nr_elem, poz, ans=-1, v[3000005];
void citire()
{
fin>>nr_elem>>poz;
nr_elem--;
poz--;
for(int i=0; i<=nr_elem; i++)
fin>>v[i];
}
void quicksort(int st, int dr)
{
if(st>=dr || ans!=-1)
{
return;
}
if(st+1==dr)
{
if(v[st]>v[dr])
swap(v[st], v[dr]);
return;
}
int piv=rand()%(dr-st+1)+st;
swap(v[piv], v[dr]);
int free_pos=st;
for(int i=st; i<dr; i++)
{
if(v[i]<=v[dr])
{
swap(v[free_pos], v[i]);
free_pos++;
}
}
swap(v[dr], v[free_pos]);
if(poz==free_pos)
ans=v[free_pos];
if(poz < free_pos)
quicksort(st, free_pos-1);
if(poz > free_pos)
quicksort(free_pos+1, dr);
}
void afisare()
{
if(ans==-1)
fout<<v[poz];
else
fout<<ans;
}
int main()
{
srand(time(0));
citire();
quicksort(0, nr_elem);
afisare();
return 0;
}