Pagini recente » Cod sursa (job #2561145) | Cod sursa (job #233238) | Cod sursa (job #1879874) | Cod sursa (job #3181366) | Cod sursa (job #2184956)
#include <cstdio>
#include <algorithm>
using namespace std;
FILE* FIN=freopen("orase.in","r",stdin);
FILE* FOUT=freopen("orase.out","w",stdout);
struct drum
{
int l;
int d;
};
int n,m,sol;
drum v[50025],maxv;
bool cmp(int i,int j)
{
return v[i].d<v[j].d;
}
void citire()
{
int i;
maxv.l=0;
maxv.d=0;
scanf("%d%d",&m,&n);
for(i=0;i<n;i++)
{
scanf("%d%d",&v[i].d,&v[i].l);
if(maxv.l<v[i].l)
{
maxv.l=v[i].l;
maxv.d=v[i].d;
}
}
sort(v,v+n,cmp);
}
void whoismax(int &poz)
{
int log;
for(log=1;log<=n;log<<=1);
for(poz=-1;log;log>>=1)
if(poz+log<n&&v[poz+log].d<maxv.d)
poz+=log;
poz++;
}
void play(int poz)
{
int i,p1=0,j,p2=n-1,x;
for(i=1;i<poz;i++)
{
if(v[p1].l+v[i].d-v[p1].d>v[i].l)
p1=i;
}
for(j=n-2;j>poz;j--)
{
if(v[p2].l+v[p2].d-v[j].l>v[j].l)
p2=j;
}
sol=v[p1].l+v[p2].l+v[p2].d-v[p1].d;
x=v[p1].l+v[poz].d+v[poz].l-v[p1].l;
if(sol<x)
sol=x;
x=v[p2].l+v[poz].l+v[p2].d-v[poz].d;
if(sol<x)
sol=x;
}
int main()
{
int p;
citire();
whoismax(p);
play(p);
printf("%d",sol);
return 0;
}