Cod sursa(job #184679)

Utilizator firewizardLucian Dobre firewizard Data 24 aprilie 2008 01:37:27
Problema Heavy metal Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.79 kb
#include <stdio.h>
#include <stdlib.h>
#define max(a,b)((a>b)?a:b)
#define FOR(i,s,d) for(i=(s);i<=(d);++i)
long a[100005],b[100005],n,i,j,v[1000001],ind[1000001];

int comp(const void * n1 ,const void * n2){
    return b[*((long*)n1)]-b[*((long*)n2)];
}

int main ()
{
    freopen("heavymetal.in","r",stdin);
    freopen("heavymetal.out","w",stdout);
    scanf("%ld",&n);
    FOR (i,1,n){
        scanf("%ld %ld",&a[i],&b[i]);
        ind[i]=i;
        }
    qsort(ind+1,n,sizeof(long),comp);
    
    FOR (i,1,n){
       FOR (j,1,i)
           if(v[a[ind[j]]]==0)v[a[ind[j]]]=v[b[ind[i-1]]];
       FOR (j,1,i)
           if(b[ind[j]]==b[ind[i]])v[b[ind[i]]]=max(v[b[ind[i-1]]],v[a[ind[j]]]+b[ind[j]]-a[ind[j]]);
        }
    printf("%ld",v[b[ind[n]]]);
    return 0;   
}