Pagini recente » Cod sursa (job #2086026) | Clasament onis-2014-runda-1 | Cod sursa (job #2255610) | Cod sursa (job #1916795) | Cod sursa (job #2198298)
#include <iostream>
#include <ctime>
#include <cstdlib>
#include <fstream>
#include <cstdio>
using namespace std;
const int N=3000000;
int v[N+1], k;
//ifstream in("sdo.in");
FILE * in = fopen("sdo.in", "r");
ofstream out("sdo.out");
void partitie3(int st, int dr, int &p, int &u)
{
int pivot = v[st + rand() % (dr - st + 1)], i=st;
p=st;
u=dr;
while(i<=u)
{
if(v[i]<pivot)
swap(v[i++], v[p++]);
else if(v[i]>pivot)
swap(v[i],v[u--]);
else i++;
}
p--;u++;
}
void qs(int st, int dr)
{
if(st>=dr) return;
int p,u;
partitie3(st,dr,p,u);
if(k<=p && k>=st) qs(st,p);
else if(k>=u && k<=dr) qs(u,dr);
else return;
}
int main()
{
int n, i, j;
//in>>n>>k;
fscanf(in, "%d%d", &n, &k);
for(int i=1;i<=n; ++i) //in>>v[i];
{
fscanf(in, "%d", &v[i]);
}
srand(time(0));
/*
for (i = n; i >= 1; i--)
{
j = rand() % i + 1;
swap(v[i], v[j]);
}
*/
qs(1,n);
out<<v[k];
return 0;
}