Cod sursa(job #1557769)

Utilizator al.mocanuAlexandru Mocanu al.mocanu Data 28 decembrie 2015 11:43:49
Problema Statistici de ordine Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 0.79 kb
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#define MAX 3000005

int n, k, i, a[MAX];

void swap(int* a, int* b){
	if(a != b){
		*a += *b;
		*b = *a - *b;
		*a -= *b;
	}
}

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

void sort(int s, int d, int k){
	if(s == d)
		return;
	int p = partition(s, d);
	int nr = p - s + 1;
	if(nr == k)
		return;
	if(nr > k)
		sort(s, p - 1, k);
	else
		sort(p + 1, d, k - nr);
}

int main(){
	freopen("sdo.in", "r", stdin);
	freopen("sdo.out", "w", stdout);
	srand(time(NULL));
	scanf("%d%d", &n, &k);
	for(i = 1; i <= n; i++)
		scanf("%d", &a[i]);
	sort(1, n, k);
	printf("%d\n", a[k]);
	return  0;
}