Pagini recente » Cod sursa (job #3030805) | Cod sursa (job #2683322) | Cod sursa (job #1286792) | Cod sursa (job #939049) | Cod sursa (job #710719)
Cod sursa(job #710719)
#include <fstream>
#include <iostream>
#include <cstdlib>
using namespace std;
int n;
int a[3000000];
int aux;
// Searches the k'th element in the vector a[]
int search(int k,int a[3000000],int beginn,int endd)
{
int i;
// Choosing a pivot at random
int pivot_pos=beginn+(rand()%(endd-beginn));
int pivot=a[pivot_pos];
//cout<<"PIVOT:"<<pivot<<'\n';
// Putting the pivot on the first position of the array
aux=a[beginn];
a[beginn]=pivot;
a[pivot_pos]=aux;
int stanga=beginn+1;
int dreapta=endd-1;
while (stanga < dreapta) {
while (a[stanga] <= pivot && stanga < dreapta) ++stanga;
while (a[dreapta] > pivot && stanga < dreapta) --dreapta;
if (stanga < dreapta) {
aux=a[stanga];
a[stanga]=a[dreapta];
a[dreapta]=aux;
}
else dreapta--;
}
aux=a[beginn];
a[beginn]=a[dreapta];
a[dreapta]=aux;
/*cout<<"LOWER :"<<dreapta-beginn+1<<'\n';
for (i=beginn; i<=dreapta; i++)
cout<<a[i]<<' ';
cout<<'\n';
cout<<"BIGGER :"<<endd-dreapta-1<<'\n';
for (i=dreapta+1; i<endd; i++)
cout<<a[i]<<' ';
cout<<'\n';*/
//cout<<k-(dreapta-beginn+1)<<"k-(dreapta-beggin) "<<'\n';
if (k<dreapta-beginn+1) return search(k,a,beginn,dreapta);
if (k>dreapta-beginn+1) return search(k-(dreapta-beginn+1),a,dreapta+1,endd);
else return pivot;
}
int main()
{
int k,i;
ifstream f("sdo.in");
f>>n>>k;
for (i=0; i<n; i++)
f>>a[i];
f.close();
int k_number=search(k,a,0,n);
ofstream g("sdo.out");
g<<k_number;
g.close();
return 0;
}