Cod sursa(job #1773857)

Utilizator mihai.alphamihai craciun mihai.alpha Data 8 octombrie 2016 12:14:05
Problema Orase Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.33 kb
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cctype>
#include <cstdlib>
#define BUF_SIZE 1<<17
char buf[BUF_SIZE];
int pos = BUF_SIZE;
FILE *fin, *fout;
inline char nextch(){
    if(pos==BUF_SIZE) fread(buf, BUF_SIZE, 1, fin), pos=0;
    return buf[pos++];
}

inline int read(){
    int x=0;
    char ch=nextch();
    while(!isdigit(ch)) ch=nextch();
    while(isdigit(ch)){
        x=10*x+ch-'0';
        ch=nextch();
    }
    return x;
}
 #define MAX 50000

using namespace std;
struct object {
int d;
int l;
};
object v[MAX];
bool cmp(object A, object B)  {
return A.d < B.d;
}
int main()  {
    fin = fopen("orase.in", "r");
    fout = fopen("orase.out", "w");
    int m, n;
    int dmax = -1, distc, i1, i2;
    m=read();
    n=read();
    int i, maxl, maxd, md = -1, ml =-1;
    for(i = 0;i < n;i++)  {
        v[i].d=read();
//        if(v[i].d>maxd)
//        maxd = v[i].d, md = i;
        v[i].l=read();
    }
    sort(v, v+n, cmp);
    int u = 0, uc, lc;
    for(i = 1; i <= n;i++)  {
        distc = v[i].l + v[u].l + v[i].d - v[u].d;
        if(distc > dmax){ dmax = distc;
        uc = u;
        lc = i;
        }
        if(v[i].l > v[i].d - v[u].d + v[u].l)//compar drumul de la i la i +1 cu cel de la u la i + 1
            u = i;
    }
    fprintf(fout, "%d", dmax);
    fclose(fin);
    fclose(fout);
    return 0;
}