Pagini recente » Cod sursa (job #2384815) | Cod sursa (job #1200717) | Cod sursa (job #2520060) | Cod sursa (job #3232002) | Cod sursa (job #68158)
Cod sursa(job #68158)
using namespace std;
#define MAX_N 50005
#define max(a,b) ((a)>(b)?(a):(b))
#include <stdio.h>
#include <fstream>
FILE *fin=fopen("orase.in","r"),
*fout=fopen("orase.out","w");
typedef struct
{
int d1;
int d2;
} intersection;
int m,n,i;
intersection a[MAX_N];
int b[MAX_N];
int c[MAX_N];
void sort()
{
int i,j,k;
intersection aux;
for(i=1;i<=n;i=i+1)
{
j=i;
while(j/2 && a[j/2].d1<a[j].d1)
{
aux=a[j/2];
a[j/2]=a[j];
a[j]=aux;
j=j/2;
}
}
i=n;
while(i>1)
{
aux=a[1];
a[1]=a[i];
a[i]=aux;
i=i-1;
j=1;
while(1)
{
k=2*j;
if(k>i) break;
if(k+1<=i && a[k+1].d1>a[k].d1) k=k+1;
if(a[j].d1 >= a[k].d1) break;
aux=a[j];
a[j]=a[k];
a[k]=aux;
j=k;
}
}
}
int main()
{
fscanf(fin,"%d %d",&m,&n);
for (i=1; i<=n; i++)
fscanf(fin,"%d %d",&a[i].d1,&a[i].d2);
sort();
memset(b,0,sizeof(b));
b[1]=a[1].d2;
for (i=2; i<=n; i++)
b[i]=max(b[i-1]+a[i].d1-a[i-1].d1,a[i].d2);
c[n]=a[n].d2;
for (i=n-1; i>=1; i--)
c[i]=max(c[i+1]+a[i+1].d1-a[i].d1,a[i].d2);
int sol=0;
for (i=1; i<=n; i++) {
if (a[i].d2+b[i]>sol) sol=a[i].d2+b[i];
if (a[i].d2+c[i]>sol) sol=a[i].d2+c[i];
}
fprintf(fout,"%d\n",sol);
fclose(fin);
fclose(fout);
return 0;
}