Pagini recente » Cod sursa (job #2901779) | Cod sursa (job #494800) | Cod sursa (job #2739873) | Cod sursa (job #2541251) | Cod sursa (job #183704)
Cod sursa(job #183704)
#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;
}