Cod sursa(job #1926440)

Utilizator MaarcellKurt Godel Maarcell Data 14 martie 2017 12:58:38
Problema Statistici de ordine Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.65 kb
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <ctime>
using namespace std;

int N,K,a[3000000];

int kth_order(int *a, int sz, int k){
	if (sz==1) return a[0];
	
	int i,ind,cnt_eq=0;
	swap(a[0],a[rand()%sz]);
	
	ind=0;
	for (i=0; i<sz; i++){
		if (a[i]==a[0]) cnt_eq++;
		if (a[i]<=a[0])
			swap(a[i],a[ind]), ind++;
	}
	
	if (ind-cnt_eq<k && ind>=k) return a[0];
	if (ind>k) return kth_order(a,ind,k);
	else return kth_order(a+ind,sz-ind,k-ind);
}

int main(){
	srand(time(NULL));
	ifstream fin("sdo.in");
	ofstream fout("sdo.out");
	fin >> N >> K;
	
	int i;
	for (i=0; i<N; i++) fin >> a[i];
	
	fout << kth_order(a,N,K) << "\n";
	return 0;	
}