Cod sursa(job #1533096)

Utilizator CosminRusuCosmin Rusu CosminRusu Data 22 noiembrie 2015 00:53:56
Problema Statistici de ordine Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.63 kb
#include <iostream>
#include <fstream>
#include <string.h>

using namespace std;

const int maxn = 3000005;

int a[maxn];

int nthElement(int *a, int n, int k) {
	swap(a[rand() % n + 1], a[n]);
	int left = 1;
	for(int i = 1 ; i < n ; ++ i)
		if(a[i] <= a[n])
			swap(a[i], a[left ++]);
	swap(a[left], a[n]);
	if(k == left)
		return a[left];
	if(k < left)
		return nthElement(a, left, k);
	return nthElement(a + left, n - left,  k - left);
}

int main() {
	ifstream fin("sdo.in");
	ofstream fout("sdo.out");

	srand(time(NULL));

	int n, k;
	fin >> n >> k;
	for(int i = 1 ; i <= n ; ++ i)
		fin >> a[i];
	fout << nthElement(a, n, k) << ' ';
}