Pagini recente » Cod sursa (job #94139) | Cod sursa (job #1885499) | Cod sursa (job #481731) | Cod sursa (job #1503184) | Cod sursa (job #1732498)
#include <iostream>
#include <fstream>
#include <random>
#include <stdlib.h>
#include <time.h>
#define NMAX 3000010
using namespace std;
unsigned int partitie(unsigned int *v,unsigned int ii,unsigned int is){
unsigned int i,j;
i=ii-1;
j=is+1;
int pivot=v[ii];
while(true){
do{
i++;
}while(v[i]<pivot);
do{
j--;
}while(v[j]>pivot);
if(i<j)
swap(v[i],v[j]);
else return j;
}
}
unsigned int partitieAleatoare(unsigned int *v,unsigned int ii,unsigned int is){
srand(time(0));
unsigned int nr = rand() % (is-ii+1);
nr+=ii;
swap(v[nr],v[ii]);
return partitie(v,ii,is);
}
unsigned int iStatistics(unsigned int *v,unsigned int ii,unsigned int is,unsigned int i){
if(ii == is)
return v[ii];
else{
int q = partitieAleatoare(v,ii,is);
int nr = q-ii;
if(i<=q) return iStatistics(v,ii,q,i);
else return iStatistics(v,q+1,is,i);
}
}
int main()
{
ifstream f("sdo.in");
ofstream g("sdo.out");
unsigned int n,v[NMAX],i;
cin >> n >> i;
for(unsigned int i=0;i<n;i++){
cin >> v[i];
}
cout << iStatistics(v,0,n-1,i-1);
return 0;
}