Cod sursa(job #982924)

Utilizator daniel.amarieiDaniel Amariei daniel.amariei Data 10 august 2013 14:51:20
Problema Statistici de ordine Scor 10
Compilator c Status done
Runda Arhiva educationala Marime 0.73 kb
#include <stdio.h>
#define MAXSIZE 30000001

long M[MAXSIZE];


void swap(int i, int j)
{
	long temp;
	temp = M[i];
	M[i] = M[j];
	M[j] = temp;
}


int partition(int left, int right)
{
	long pivot = M[left];
	int i = left + 1;
	int j = right;
	while (i < j)
	{
		while (i < right && M[i] <= pivot) ++i;
		while (M[j] > pivot) --j;
		
		if (i < j)
			swap(i++, j--);
	}		

	swap(left, j);
	return j;
}

int main()
{
	int i, n, k, p; 
	int l, r;
	freopen("sdo.in", "r", stdin);
	freopen("sdo.out", "w", stdout);

	scanf("%d %d", &n, &k);
	for (i = 1; i <= n; ++i)
		scanf("%ld", M + i);

	l = 1, r = n;
	while (1)
	{
		p = partition(l, r);
		if (p < k) l = p + 1;
		else if (p > k) r = p - 1;
		else break;
	}

	printf("%ld\n", M[k]);

	return 0;
}