Cod sursa(job #2211896)

Utilizator b10nd3Oana Mancu b10nd3 Data 12 iunie 2018 12:55:20
Problema Statistici de ordine Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 kb
#include<fstream>
#include<iostream>
#include<time.h>
#include<stdlib.h>

using namespace std;

int quicksort(int left, int right, long long nr[]){
	long long p=nr[rand() % (right+1-left)+left];
	int i=left, j=right;
	while(i<=j){
    	while(nr[i]<p) i++;
	    while(nr[j]>p) j--;
	    if(i<j) {
		  swap(nr[i],nr[j]);
		  i++; j--;
	   }   
	   return j;
   }
   return 0;
}

void partition(int left, int right, int k, long long nr[]){
   if(left==right) return;
   int q=quicksort(left, right, nr);
   if(q<left) return;
   int length=q-left+1;
   if(k<=length) partition(left,q,k,nr);
   else   partition(q+1,right,k-length,nr);	
}


int main(){
	FILE *in=fopen("sdo.in","r"), *out=fopen("sdo.out","w");
	int n, k;
	fscanf(in,"%d %d",&n,&k);
	long long nr[n+1];
	for(int i=1;i<=n;i++) fscanf(in,"%lld",&nr[i]);
	fclose(in);
	
	srand(time(NULL));
	partition(1,n,k,nr);
	
	fprintf(out,"%lld",nr[k]);
	fclose(out);
	return 0;
}