Cod sursa(job #1082854)

Utilizator danny794Dan Danaila danny794 Data 14 ianuarie 2014 23:23:44
Problema Statistici de ordine Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 0.8 kb
#include <cstdio>
#include <cstdlib>

typedef long long ll;

using namespace std;

const int NMAX = 3000005;
int N, K;
int v[NMAX];

void read() {
	freopen( "sdo.in", "r", stdin );
	freopen( "sdo.out", "w", stdout );
	scanf("%i %i", &N, &K);
	for ( int i = 1; i <= N; i++ )
		scanf("%i", &v[i]);
}

void swap(int *a, int *b) {
	*a ^= (*b);
	*b ^= (*a);
	*a ^= (*b);
}

void quicksort(int b, int e) {
	if ( b < e ) {
		int p = rand() % (b - e + 1) + b;
		swap(&v[p], &v[e]);
		int x = v[e];
		int i = b - 1;
		while( v[i + 1] <= x && i < e)
			i++;
		for(int j = i + 1; j <= e; j++)
			if( v[j] <=  x ) {
				i++;
				swap(&v[i], &v[j]);
			}
		if (i == K)
			return;
		if (K < i)
			quicksort(b, i - 1);
		else
			quicksort(i + 1, e);
	}
}

int main() {
	read();
	quicksort(1, N);
	printf("%i\n",v[K]);
	return 0;
}