Pagini recente » Cod sursa (job #1972533) | Cod sursa (job #974303) | Cod sursa (job #2041540) | Cod sursa (job #955170) | Cod sursa (job #857869)
Cod sursa(job #857869)
#include <fstream>
#include <ctime>
#include <cstdlib>
using namespace std;
int *vector_citit;
int partitionare(int stanga,int dreapta)
{
int pivot = vector_citit[stanga + rand()%(dreapta - stanga +1)];
while(stanga < dreapta)
{
while(vector_citit[stanga] < pivot)
++stanga;
while(vector_citit[dreapta] > pivot)
--dreapta;
if(stanga < dreapta)
swap(vector_citit[stanga],vector_citit[dreapta]);
else
return dreapta;
}
return 0;
}
void selecteaza(int stanga,int dreapta,int k)
{
if(stanga == dreapta)
return;
int poz = partitionare(stanga, dreapta), poz_ult = poz-stanga+1;
if(poz_ult >= k)
selecteaza(stanga,poz,k);
else
selecteaza(++stanga,dreapta,k-poz_ult);
}
int main()
{
srand(time(NULL));
int n,k;
ifstream f("sdo.in");
f >> n >> k;
--k;
vector_citit = new int[n];
--n;
for(int i=0;i<=n;++i)
f>>vector_citit[i];
f.close();
selecteaza(0,n,k);
ofstream g("sdo.out");
g<<vector_citit[k];
g.close();
return 0;
}