Cod sursa(job #183704)

Utilizator gabitzish1Gabriel Bitis gabitzish1 Data 22 aprilie 2008 15:02:49
Problema Heavy metal Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.98 kb
#include <stdio.h>
#include <stdlib.h>

int n, ord[100000], best[100000], maxim;

typedef struct
{
	int a, b;
} interval;
interval a[10000], b[100000];

int max (int x, int y) { return x > y ? x : y; }

int cmp(const void *p, const void *q)
{
	int x = *(int*)p, y = *(int*)q;
	if (a[x].b == a[y].b) return a[x].a - a[y].a;
	return a[x].b - a[y].b;
}

void citire()
{
	freopen("heavymetal.in","r",stdin);
	freopen("heavymetal.out","w",stdout);

	int i;
	scanf("%d",&n);
	for (i = 0; i < n; i++)
	{
		scanf("%d %d",&a[i].a,&a[i].b);
		ord[i] = i;
	}

	qsort(ord, n, sizeof(int), cmp);

	for (i = 1; i <= n; i++) b[i] = a[ ord[i-1] ] ;
	for (i = 1; i <= n; i++) ord[i] = i;
}

int main()
{
	int i, j;
	citire();
	for (i = 1; i <= n; i++)
	{
		best[i] = b[i].b - b[i].a;
		for (j = i - 1; j >= i / 2; j--)
			if (b[j].b <= b[i].a) best[i] = max(best[i], best[j] + b[i].b - b[i].a);
		if (best[i] > maxim) maxim = best[i];
	}
	printf("%d\n",maxim);
	return 0;
}