Cod sursa(job #1246264)

Utilizator roxana.istratePoenaru Roxana roxana.istrate Data 20 octombrie 2014 20:52:58
Problema Statistici de ordine Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 0.86 kb
#include <iostream>
#include <stdlib.h>
#include <time.h>  
#define MAX 3000000
using namespace std;

int N, K;
int nrs[MAX];

void partition(int left, int right){
	int r = rand() % (right - left + 1);
	int pivot = left + r, i = left + 1, j = right;

	swap(nrs[pivot], nrs[left]);

	while(i < j){
		while(i <= right && nrs[i] <= nrs[left]){
			i++;
		}
		while(j > left && nrs[j] > nrs[left]){
			j--;
		}
		if(i <= right && j > left && i < j){
			swap(nrs[i], nrs[j]);
		}
	}
	swap(nrs[left], nrs[j]);
	if(j == K) return ;
	if(j < K)
		partition(j+1, right);
	else
		partition(left, j-1);
}

int main(){
	freopen("sdo.in", "r", stdin);
	freopen("sdo.out", "w", stdout);
	scanf("%d%d", &N, &K);
	K--;
	srand(time(NULL));
	for(int i = 0; i < N; i++){
		scanf("%d", &nrs[i]);
	}
	partition(0, N-1);
	printf("%d", nrs[K]);
	return 0;
}