Pagini recente » Cod sursa (job #940912) | Cod sursa (job #2621668) | Cod sursa (job #883231) | Cod sursa (job #701728) | Cod sursa (job #1314016)
#include <iostream>
#include <fstream>
#include <cstdlib>
using namespace std;
ifstream f("sdo.in");
ofstream g("sdo.out");
int i,n,k,j,pozitie,v[3000005];
int part(int s, int d)
{
int pivot=v[s+rand()%(d-s+1)]; //pivot aleator
while(s<=d)
{
while(pivot>v[s])
s++;
while(pivot<v[d])
d--;
if(s<=d)
{ swap(v[s],v[d]); s++; d--; }
}
return d;
}
void sord(int v[], int s, int d, int k)
{
if (s >= d)
return ;
int poz=part(s,d); //da pozitia pivotului aleator
int t=poz-s+1; //elemente intre capatul din stanga al intervalului si pozitia pivotului (incluzand pivotul)
if(t>=k) //elementul cautat se afla in subvectorul din stanga
sord(v,s,poz,k);
else //elementul cautat se afla in subvectorul din dreapta
sord(v,poz+1,d,k-t);
}
int main()
{
f>>n>>k;
for(i=1;i<=n;i++)
f>>v[i];
sord(v,1,n,k);
g<<v[k];
return 0;
}