Pagini recente » Cod sursa (job #1270653) | Cod sursa (job #366381)
Cod sursa(job #366381)
#include<fstream>
#include<iostream>
#define inf "orase.in"
#define outf "orase.out"
#define MaxN 50001
#define MINF -0x3f3f3f3f
using namespace std;
fstream f(inf,ios::in),g(outf,ios::out);
int N;
long M;
long D[MaxN],L[MaxN];
long Max[MaxN];
int st,sf;
void Citire()
{
f>>M>>N;
for(int i=1;i<=N;i++)
{
f>>D[i]>>L[i];
}
}
void Sort(int i,int j)
{
long aux;
if(D[i]>D[j])
{
aux=D[i];
D[i]=D[j];
D[j]=aux;
aux=L[i];
L[i]=L[j];
L[j]=aux;
}
else if(D[i]==D[j])
{
if(L[i]>L[j])
{
aux=L[i];
L[i]=L[j];
L[j]=aux;
}
}
}
void Merge(int p,int q,int m)
{
long v[MaxN],a[MaxN];
int i,j,k=1;
i=p;j=m+1;
while( (i<=m) && (j<=q) )
{
if(D[i]<=D[j])
{
v[k]=D[i];
a[k]=L[i];
k++;
i++;
}
else
{
v[k]=D[j];
a[k]=L[j];
k++;
j++;
}
}
if(i<=m)
{
for(j=i;j<=m;j++)
{
v[k]=D[j];
a[k]=L[j];
k++;
}
}
else
{
for(i=j;i<=q;i++)
{
v[k]=D[i];
a[k]=L[i];
k++;
}
}
k=1;
for(i=p;i<=q;i++)
{
D[i]=v[k];
L[i]=a[k];
k++;
}
}
void MergeSort(int i,int j)
{
int m;
if((j-i)<=1)Sort(i,j);
else
{
m=(i+j)/2;
MergeSort(i,m);
MergeSort(m+1,j);
Merge(i,j,m);
}
}
int main()
{
long max;
Citire();
MergeSort(1,N);
/*for(int i=1;i<=N;i++)
{
g<<D[i]<<" "<<L[i]<<endl;
}*/
//Max[1]=MINF;
Max[2]=D[2]-D[1]+L[1]+L[2];
st=1;
sf=2;
//g<<D[2]<<" "<<L[2]<<endl;
int poz,poz2;
for(int i=3;i<=N;i++)
{
poz=sf;
poz2=st;
//g<<sf<<endl;
if(Max[sf]-L[sf]+(D[i]-D[sf])+L[i]>Max[sf])
{
Max[i]=Max[sf]-L[sf]+(D[i]-D[sf])+L[i];
poz=i;
}
if(L[i]+L[i-1]+(D[i]-D[i-1])>Max[sf])
{
Max[i]=L[i]+L[i-1]+(D[i]-D[i-1]);
poz2=i-1;
poz=i;
}
else Max[i]=Max[sf];
st=poz2;
sf=poz;
}
//for(int i=1;i<=N;i++)g<<Max[i]<<" ";
//g<<endl;
g<<Max[N];
f.close();
g.close();
return 0;
}