Pagini recente » Cod sursa (job #731743) | Cod sursa (job #2625084) | Sandbox (cutiuţa cu năsip) | Cod sursa (job #3261540) | Cod sursa (job #69614)
Cod sursa(job #69614)
/*
100 p
*/
#include<stdio.h>
long n,m;
typedef struct
{
long d, l;
} Oras;
Oras v[50000];
void citire()
{
freopen("orase.in","r",stdin);
freopen("orase.out","w",stdout);
long i;
scanf("%ld %ld",&m,&n);
for(i=1;i<=n;++i)
{
scanf("%ld %ld",&v[i].d,&v[i].l);
}
}
int pozitie(int p,int u)
{ int st,dr;
Oras aux;
st=p;dr=u;aux=v[p];
while(st<dr)
{ while(st<dr && v[dr].d>=aux.d) dr--;
v[st]=v[dr];
while(st<dr && v[st].d<=aux.d) st++;
v[dr]=v[st];
}
v[st]=aux;
return st;
}
void qsort(int p,int u)
{ int m=pozitie(p,u);
if(p<m) qsort(p,m-1);
if(m<u) qsort(m+1,u);
}
void calcul()
{
int i, comp;
qsort(1,n);
comp=1;
long smax=0;
for (i=2; i<=n; i++)
{
if ( v[comp].l + (m - v[comp].d) < v[i].l + (m - v[i].d) )
comp = i;
if (v[comp].l + v[i].l + (v[i].d - v[comp].d) > smax) smax=v[comp].l + v[i].l + (v[i].d - v[comp].d);
}
printf("%ld",smax);
}
int main()
{
citire();
calcul();
return 0;
}