等差数列,用差分不用想
差分数组 d 维护当前数值与前一数值的差值,两遍前缀和即可
题目样例给的公差与首相是相同的,但是大部分情况是不同的,在尾项应直接减去本次操作所带来的所有影响
const int N=1e7+5;
int i,j,k;
int n,m;
ll d[N];
int main()
{
//IOS;
while(~sdd(n,m)){
int l,r,s,e;
for(int i=1;i<=m;i++){
sdd(l,r); sdd(s,e);
ll cur=(e-s)/(r-l); //公差
d[l]+=s;
d[l+1]+=(cur-s);
d[r+1]-=(e+cur);
d[r+2]+=e;
}
ll ans=0,maxx=0,res=0,sum=0;
for(int i=1;i<=n;i++){
res+=d[i];
sum+=res;
ans^=sum;
maxx=max(maxx,sum);
}
printf("%lld %lld\n",ans,maxx);
}
//PAUSE;
return 0;
}