神犇们可以帮我把除主函数以外的代码加上注释吗?
#include<bits/stdc++.h>
#define REP(i,a,b) for(int i=a,i##_end_=b;i<=i##_end_;++i)
#define DREP(i,a,b) for(int i=a,i##_end_=b;i>=i##_end_;--i)
typedef long long ll;
using namespace std;
void File(){
freopen("bzoj5017.in","r",stdin);
freopen("bzoj5017.out","w",stdout);
}
template<typename T>void read(T &_){
T __=0,mul=1; char ch=getchar();
while(!isdigit(ch)){
if(ch=='-')mul=-1;
ch=getchar();
}
while(isdigit(ch))__=(__<<1)+(__<<3)+(ch^'0'),ch=getchar();
_=__*mul;
}
const int maxn=5e5+10;
const ll mod=1e9+7;
int n,l[maxn],r[maxn];
ll x[maxn],y[maxn],ans;
int main(){
// File();
read(n);
REP(i,1,n)read(x[i]),read(y[i]),l[i]=r[i]=i;
REP(i,1,n)while(l[i]>1 && x[i]-x[l[i]-1]<=y[i]){
y[i]=max(y[i],x[l[i]-1]+y[l[i]-1]-x[i]);
//cout<<x[l[i]-1]+y[l[i]-1]-x[i]<<" ";
l[i]=l[l[i]-1];
y[i]=max(y[i],x[l[i]]+y[l[i]]-x[i]);
//cout<<x[l[i]]+y[l[i]]-x[i]<<endl;
}
DREP(i,n,1)while(r[i]<n && x[r[i]+1]-x[i]<=y[i]){
l[i]=min(l[i],l[r[i]+1]);
//cout<<l[r[i]+1]<<" ";
r[i]=r[r[i]+1];
l[i]=min(l[i],l[r[i]]);
//cout<<l[r[i]]<<endl;
}
REP(i,1,n){
ans=(ans+1ll*i*(r[i]-l[i]+1)%mod)%mod;
//cout<<l[i]<<" "<<r[i]<<endl;
}
printf("%lld\n",(ans+mod)%mod);
return 0;
}