Cod sursa(job #319960)

Utilizator taloibogdanTaloi Bogdan Cristian taloibogdan Data 2 iunie 2009 22:43:30
Problema Heavy metal Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.99 kb
#include<stdio.h>
#include<algorithm>
using namespace std;
struct ch{long x,y,px,py;}a[100050],aa[200050];
long n,i,j,m,b[100050],nr;
long cmp(ch a,ch b)
{if(a.y<b.y)return 1;
return 0;}
int main()
{
 freopen("heavymetal.in","r",stdin);
 freopen("heavymetal.out","w",stdout);
 scanf("%ld",&n);
 for(i=1;i<=n;++i)
    scanf("%ld%ld",&a[i].x,&a[i].y),a[i].px=a[i].x,a[i].py=a[i].y,aa[2*i-1].y=a[i].x,aa[2*i].y=a[i].y,aa[2*i].x=i,aa[2*i-1].x=-i;
 sort(aa,aa+n*2+1,cmp);
 for(i=1;i<=n*2;++i)
    {if(aa[i].y>aa[i-1].y)++nr;
     if(aa[i].x>0)a[aa[i].x].y=nr;
             else a[aa[i].x*(-1)].x=nr;}
 sort(a,a+n+1,cmp);
 for(i=1;i<=n;++i)
    {for(j=a[i-1].y+1;j<=a[i].y;++j)b[j]=b[j-1];
     for(j=i;a[j].y==a[i].y;--j)
        if(b[a[i].y]<b[a[j].x]+a[j].py-a[j].px)b[a[i].y]=b[a[j].x]+a[j].py-a[j].px;
     for(j=i+1;a[j].y==a[i].y;++j)
        if(b[a[i].y]<b[a[j].x]+a[j].py-a[j].px)b[a[i].y]=b[a[j].x]+a[j].py-a[j].px;
     if(b[a[i].y]>m)m=b[a[i].y];}
 printf("%ld",m);
 return 0;
}