Pagini recente » Cod sursa (job #1684614) | Profil Mr. Teofilos | Cod sursa (job #971489) | Istoria paginii utilizator/horis21 | Cod sursa (job #2198314)
#include <iostream>
#include <fstream>
#include <ctime>
#include <cstdlib>
using namespace std;
ifstream in("sdo.in");
ofstream out("sdo.out");
const int N = 3000001;
int v[N],k;
void partitie3(int st,int dr,int &p,int &u)
{
int pivot = v[st+rand()%(dr-st+1)];
int 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 if(k < u && k > p)
return;
}
int main()
{
int n,i;
in>>n>>k;
for(int i = 1; i <= n; i++)
in>>v[i];
qs(1,n);
out<<v[k];
}