Pagini recente » Cod sursa (job #1573577) | Cod sursa (job #2842124) | Cod sursa (job #1195749) | Cod sursa (job #2854913) | Cod sursa (job #1815392)
#include <iostream>
#include <fstream>
#include <algorithm>
#include <time.h>
using namespace std;
ifstream fin("sdo.in");
ofstream fout("sdo.out");
int n,k,v[3000005];
int partitie(int p,int r)
{
int x,i,j;
x=v[p];
i=p-1;
j=r+1;
while(1){
do
{
i++;
}while(v[i]<x);
do
{
j--;
}while(v[j]>x);
if(i>=j)
return j;
swap(v[i],v[j]);
}
}
int partitie_aleatoare(int p, int r){
int i;
i=(rand() % (r-p)) + p + 1;
swap(v[p],v[i]);
return partitie(p,r);
}
int select(int p,int r,int i)
{
if(p==r)
return v[p];
int q,length;
q=partitie_aleatoare(p,r);
length=q-p+1;
if(i<=length)return select(p,q,i);
else return select(q+1,r,i-length);
}
int main()
{
srand(time(NULL));
fin>>n>>k;
for(int i=1;i<=n;i++)fin>>v[i];
fout<<select(1,n,k);
return 0;
}