Pagini recente » Borderou de evaluare (job #1294076) | Cod sursa (job #2539338) | Cod sursa (job #3145119) | Cod sursa (job #2540493) | Cod sursa (job #1549902)
#include <fstream>
#include <cstdlib>
#include <vector>
using namespace std;
ifstream f("sdo.in");
ofstream g("sdo.out");
vector<int> V;
int n,x,i,k;
int quick(std::vector<int> &V, size_t start, size_t stop, int k)
{
int i,j,pivot,loc;
if (start==stop) {g<<V[stop]; return 0;}
pivot = V[start + rand() % (stop-start+1)];
i = start; j = stop;
while (1)
{
while(V[i]<pivot)
i++;
while(V[j]>pivot)
j--;
if (i<j)
{
swap(V[i],V[j]); i++; j--;
}
else break;
}
loc = j - start + 1;
if (loc>=k) quick(V,start,j,k);
else quick(V,j+1,stop,k-loc);
}
int main()
{
f>>n>>k;
for (i=1;i<=n;i++)
{f>>x; V.push_back(x);}
quick(V,0,V.size()-1,k);
return 0;
}