Cod sursa(job #983006)

Utilizator daniel.amarieiDaniel Amariei daniel.amariei Data 10 august 2013 17:11:34
Problema Statistici de ordine Scor 90
Compilator c Status done
Runda Arhiva educationala Marime 0.7 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[right];
	int i = left - 1;
    int j;
    for (j = left; j < right; ++j)    
        if (M[j] <= pivot)
            swap(++i, j);
    swap(++i, right);
    return i;
}

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;
}