Cod sursa(job #1831093)

Utilizator borscalinCalin-Stefan Georgescu borscalin Data 17 decembrie 2016 14:51:38
Problema Orase Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.14 kb
#include <cstdio>
#define CMAX 50000

using namespace std;

int poz[CMAX + 1],dist[CMAX + 1];

void qsort(int b,int e) {
    int st,dr,aux,piv;
    piv = poz[(b + e) >> 1];
    st = b;
    dr = e;
    while (st < dr) {
        while (poz[st] < piv)
            st++;
        while (poz[dr] > piv)
            dr--;
        if (st < dr) {
            aux = poz[st];
            poz[st] = poz[dr];
            poz[dr] = aux;
            aux = dist[st];
            dist[st] = dist[dr];
            dist[dr] = aux;
            st++;
            dr--;
        }
    }
    if (st < e)
        qsort(st + 1,e);
    if (dr > b)
        qsort(b,dr - 1);
}

int main(){
    freopen("orase.in","r",stdin);
    freopen("orase.out","w",stdout);
    int l,n,i,d,dmax = 0,st;
    scanf("%d%d",&l,&n);
    for (i=1;i<=n;i++)
        scanf("%d%d",&poz[i],&dist[i]);
    qsort(1,n);
    st = 1;
    for (i=2;i<=n;i++) {
        d = dist[st] + dist[i] + poz[i] - poz[st];
        if (d > dmax)
            dmax = d;
        if (dist[i] > dist[st] + poz[i] - poz[st])
            st = i;
    }
    printf("%d",dmax);
    return 0;
}