Cod sursa(job #982795)

Utilizator daniel.amarieiDaniel Amariei daniel.amariei Data 10 august 2013 00:33:08
Problema Statistici de ordine Scor 60
Compilator c Status done
Runda Arhiva educationala Marime 0.74 kb
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 30000001

long M[MAXSIZE];

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

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

		while (p >> 1 && M[p >> 1] < x)
		{
			M[p] = M[p >> 1];
			p >>= 1;
		}

		M[p] = x;
	}

	for (i = k + 1; i <= n; ++i)
	{
		scanf("%ld", &x);
		
		if (x < M[1])
		{
			int p = 1;
			long temp;
			M[1] = x;
		
			while (1)
			{
				int c = 2 * p;
				if (c > k)	 			break;
				if (c + 1 > k) 			break;
				if (M[c] < M[c + 1]) 	++c;
				if (M[p] > M[c]) 		break;

				temp = M[p];
				M[p] = M[c];
				M[c] = temp;
				
				p = c;
			}
		}	
	}

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

	return 0;
}