Cod sursa(job #1533099)

Utilizator CosminRusuCosmin Rusu CosminRusu Data 22 noiembrie 2015 00:54:56
Problema Statistici de ordine Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.64 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], a[n - 1]);
	int left = 0;
	for(int i = 0 ; i < n - 1 ; ++ i)
		if(a[i] <= a[n - 1])
			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 = 0 ; i < n ; ++ i)
		fin >> a[i];
	fout << nthElement(a, n, k - 1) << ' ';
}