Cod sursa(job #1028855)

Utilizator andrettiAndretti Naiden andretti Data 14 noiembrie 2013 19:17:01
Problema Orase Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 kb
#include<stdio.h>
#include<algorithm>
#define maxn 50005
using namespace std;

struct street{int d,l;} a[maxn];
int n,m,nr,sol;
int s[maxn<<1];

void read()
{
    scanf("%d%d",&m,&n);
    for(int i=1;i<=n;i++)
     scanf("%d%d",&a[i].d,&a[i].l);
}

bool cmp(const street &x,const street &y){
    return x.d<y.d;
}

void solve()
{
    sort(a+1,a+n+1,cmp);

    for(int i=2;i<=n;i++)
     if(a[i].d==a[i-1].d)
     {
         if(a[i-1].l>a[i].l)
          swap(a[i-1],a[i]);
     }
     else a[++nr]=a[i-1];
     a[++nr]=a[n];

     n=0;
     for(int i=1;i<nr;i++)
     {
        s[++n]=a[i].l+a[i+1].l+a[i+1].d-a[i].d;
        if(i<nr-1) s[++n]=-2*a[i+1].l;
     }

     int sum=0;
     for(int i=1;i<=n;i++)
     {
         sum+=s[i];
         sol=max(sol,sum);
         if(sum<0) sum=0;
     }
}

int main()
{
    freopen("orase.in","r",stdin);
    freopen("orase.out","w",stdout);

    read();
    solve();
    printf("%d",sol);

    fclose(stdin);
    fclose(stdout);
    return 0;
}