Cod sursa(job #1736760)

Utilizator Bulgaru_Robert_Razvan_323CBBulgaru Robert Razvan Bulgaru_Robert_Razvan_323CB Data 2 august 2016 16:25:40
Problema Statistici de ordine Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.78 kb
#include <fstream>
#include <stdio.h>
#include <stdlib.h>

using namespace std;

#define MAX 3000000

ifstream in("sdo.in");
ofstream out("sdo.out");

int n,k;

int v[MAX];

int partition(int v[MAX],int p,int r) {
	int temp,rnd=p+rand()%(r-p+1);

	temp=v[rnd];
	v[rnd]=v[r];
	v[r]=temp;

	int i=p-1,x=v[r];

	for (int j=p;j<r;j++) {
		if (v[j]<=x) {
			i++;

			temp=v[i];
			v[i]=v[j];
			v[j]=temp;
		}
	}

	temp=v[i+1];
	v[i+1]=v[rnd];
	v[rnd]=temp;

	return i+1;
}

int kThMin(int v[MAX],int low,int high,int k) {
	int pos;

	pos=partition(v,low,high);

	if (pos-low+1==k)
		return v[pos];
	else if (pos-low+1>k)
		return kThMin(v,low,pos-1,k);
	else
		return kThMin(v,pos+1,high,k-pos+low-1);
} 

int main() {
	in>>n>>k;

	for (int i=0;i<n;i++)
		in>>v[i];

	out<<kThMin(v,0,n-1,k);

	return 0;
}