Pagini recente » Cod sursa (job #34963) | Cod sursa (job #2162832) | Cod sursa (job #1884020) | Cod sursa (job #153821) | Cod sursa (job #855024)
Cod sursa(job #855024)
#include <fstream>
#include <cstdlib>
#include <ctime>
#define NMAX 3000001
using namespace std;
int v[NMAX];
int N;
int K;
int partition(int left , int right)
{
int i=left,j=right,aux;
int p = v[left + (rand() % (right - left + 1))];
while(i<=j)
{
while(v[i]<p) i++;
while(v[j]>p) j--;
if(i< j)
{
aux=v[i];
v[i]=v[j];
v[j]=aux;
}
else
{
return j - left + 1;
}
}
}
void SDO(int left , int right , int K)
{
while (left != right)
{
int q = partition(left , right);
if (q >= K) right = q + left - 1;
else left = q + left , K = K - q;
}
}
int main()
{
srand(time(NULL));
ifstream input("sdo.in");
ofstream output("sdo.out");
input >> N >> K;
for (int i = 1 ; i<=N;i++)
{
input >> v[i];
}
SDO(1,N,K);
output << v[K];
input.close();
output.close();
return 0;
}