这玩意忒难了
#include<bits/stdc++.h>
using namespace std;
int l[1000001],g[1000001],f[2][1000001][2],oi,jj,t[2],s[2][1000001],ans,n,m;
void fuck()
{
memset(f,0x3f,sizeof(f));
t[1]=0;
for(int j=1;j<=3;j++)
for(int k=g[j];k<=g[j]+2;k++)
if(k>=g[1])
s[1][++t[1]]=k;
for(int i=1;i<=t[1];i++)
f[1][i][0]=s[1][i]-g[1];
oi=0,jj=1;
for(int i=2;i<=n;i++)
{
oi^=1,jj^=1;t[jj]=0;
int lf=max(1,i-2),rf=min(n,i+2);
for(int j=lf;j<=rf;j++)
for(int k=g[j];k<=g[j]+2;k++)
if(k>=g[i])
s[jj][++t[jj]]=k;
for(int j=1;j<=t[jj];j++)
{
f[jj][j][1]=f[jj][j][0]=0x3f3f3f3f;
for(int k=1;k<=t[oi];k++)
{
if(s[oi][k]>s[jj][j])
f[jj][j][0]=min(f[jj][j][0],f[oi][k][1]);
else if(s[oi][k]<s[jj][j])
f[jj][j][1]=min(f[jj][j][1],f[oi][k][0]);
else
f[jj][j][0]=min(f[jj][j][0],f[oi][k][0]),f[jj][j][1]=min(f[jj][j][1],f[oi][k][1]);
}
f[jj][j][0]+=s[jj][j]-g[i];
f[jj][j][1]+=s[jj][j]-g[i];
}
}
int re=0x3f3f3f3f;
for(int i=1;i<=t[jj];i++)
re=min(re,f[jj][i][0]);
ans+=re;
}
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d%d",&l[i],&g[i]);
fuck();
for(int i=1;i<=n;i++)
g[i]=N-l[i];
fuck();
printf("%d",ans);
return 0;
}