Cod sursa(job #2060972)

Utilizator Teodor.mTeodor Marchitan Teodor.m Data 8 noiembrie 2017 20:29:29
Problema Statistici de ordine Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.84 kb
#include <bits/stdc++.h>
using namespace std;

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

const int Nmax = 3e6 + 5;

int a[Nmax], n;

int partition(int a[], int st, int dr)
{
	int pozitie_pivot =  st + rand()%(dr - st + 1);
	int pivot = a[pozitie_pivot];
	int i = st - 1;
	swap(a[dr], a[pozitie_pivot]);
	for(int j = st; j < dr; ++j) {
		if(a[j] < pivot) {
			++i;
			swap(a[i], a[j]);
		}
	}
	swap(a[i + 1], a[dr]);
	return i + 1;
}

void quicksort(int a[], int st, int dr, int k)
{
	if(st < dr) {
		int pivot = partition(a, st, dr);

		if(k < pivot) {
			quicksort(a, st, pivot - 1, k);	
		}
		if(k > pivot) {
			quicksort(a, pivot + 1, dr, k);
		}		
	}
}

int main()
{
	srand(time(NULL));
	int k;
	f >> n >> k;

	for(int i = 1; i <= n; ++i) f >> a[i];
		
	quicksort(a, 1, n, k);
	g << a[k];
	return 0;
}