Cod sursa(job #1209892)

Utilizator an_drey_curentandreycurent an_drey_curent Data 18 iulie 2014 20:19:20
Problema Statistici de ordine Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.82 kb
#include<stdio.h>
FILE *in, *out;
int N, A[3000005], K;
void open()
{
	in = fopen("sdo.in", "rt");
	out = fopen("sdo.out", "wt");
}
void read()
{
	fscanf(in, "%d %d", &N, &K);
	for (int i = 0; i < N; i++)
		fscanf(in, "%d", &A[i]);
}
void swap(int i , int j)
{
	int aux = A[i];
	A[i] = A[j];
	A[j] = aux;
}
int sdo(int left, int right, int order)
{
	if (left >= right) return A[left];

	int i = left, j = right, piv = A[(left + right) / 2];

	while (i <= j)
	{
		while (A[i] < piv) i++;
		while (A[j] > piv) j--;
		
		if (i <= j)
		{
			swap(i, j);
			i++, j--;
		}
	}
	if (left <= order && order <= j) return sdo(left, j, order);
	if (i <= order && order <= right) return sdo(i, right, order);
	return piv;
}
int main()
{
	open();
	read();
	fprintf(out, "%d " , sdo(0, N - 1, K-1));
	return 0;
}