Pagini recente » Cod sursa (job #770636) | Cod sursa (job #662582) | Cod sursa (job #2688431) | Cod sursa (job #15421) | Cod sursa (job #855027)
Cod sursa(job #855027)
#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(true)
{
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;
}
}
}
void SDO(int left , int right , int K)
{
while (left != right)
{
int q = partition(left , right);
int t = q - left + 1;
if (t >= K) right = q;
else left = q + 1 , K = K - t;
}
}
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;
}