Cod sursa(job #2313255)

Utilizator NToniBoSSNicolae Tonitza NToniBoSS Data 6 ianuarie 2019 15:15:56
Problema Orase Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.23 kb
#include <bits/stdc++.h>
/// TONI BO$$ was here
/// #MLC

using namespace std;
struct oras
{
    int dist,lg;
    bool operator <(const oras &other) const
    {
        return dist<other.dist;
    }
};

oras aux[50002],v[50002];

int main()
{
    int m,n,i,ct,town,maxdist;
    freopen("orase.in","r",stdin);
    freopen("orase.out","w",stdout);
    scanf("%d%d",&m,&n);
    for(i=1; i<=n; i++)
        scanf("%d%d",&aux[i].dist,&aux[i].lg);
    sort(aux+1,aux+1+n);
    /*for(i=1; i<=n; i++)
        printf("%d %d\n",v[i].dist,v[i].lg);*/
    maxdist=0;
    ct=0;
    for(i=1; i<=n;)
        if(aux[i].dist==aux[i+1].dist)
        {
            maxdist=max(maxdist,aux[i].lg+aux[i+1].lg);
            v[++ct]={aux[i].dist,max(aux[i].lg,aux[i+1].lg)};
            i+=2;
        }
        else
        {
            v[++ct]={aux[i].dist,aux[i].lg};
            i++;
        }
    town=0;
    for(i=2; i<=n; i++)
    {
        if(v[i].dist-v[town].dist+v[town].lg+v[i].lg<v[i].dist-v[i-1].dist+v[i-1].lg+v[i].lg)
            town=i-1;
        if(v[i].dist-v[town].dist+v[town].lg+v[i].lg>maxdist)
            maxdist=v[i].dist-v[town].dist+v[town].lg+v[i].lg;
    }
    printf("%d",maxdist);

    return 0;
}