Cod sursa(job #761882)

Utilizator igsifvevc avb igsi Data 27 iunie 2012 18:28:36
Problema Statistici de ordine Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 0.79 kb
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int n, k, A[3000001];
int i, ls, ld, l, r, ll, lr, temp;
	
int main()
{
	FILE *in = fopen("sdo.in", "r");
	FILE *out = fopen("sdo.out", "w");
	
	fscanf(in, "%d %d", &n, &k);
	for(i = 0; i < n; i++)
		fscanf(in, "%d", &A[i]);
	
	srand(time(NULL));
	k--;
	ls = 0; ld = n - 1;
	do
	{
		l = ls; r = ld;
		ll = 0; lr = -1;
		i = l + (rand() % (r - l + 1));
		temp = A[i];
		A[i] = A[l];
		A[l] = temp;
	
		while(l < r)
		{
			if(A[l] > A[r])
			{
				temp = A[l];
				A[l] = A[r];
				A[r] = temp;
			
				temp = ll;
				ll = -lr;
				lr = -temp;
			}
		
			l += ll;
			r += lr;
		}
		
		i = l;
		
		if(i > k)
		{
			ld = i - 1;
		}
		else
		{
			ls = i + 1;
		}
	} while(i != k);
	
	fprintf(out, "%d\n", A[k]);
	
	fclose(in);
	fclose(out);
	return 0;
}