利用差分的思想解决 多次对数组区间加相同数,或者加一个等差数列
最好思路:从目标数列往前推两次前缀和,反推差分数组应该怎么加
#include<bits/stdc++.h> #define int long long using namespace std; int n,m,l,r,s,e,d,maxv,ans; int a[10000005],sum[10000005]; signed main() { cin>>n>>m; for(int i=1;i<=m;i++) { scanf("%d%d%d%d",&l,&r,&s,&e); d=(e-s)/(r-l); a[l]+=s; a[l+1]+=d-s; a[r+1]-=(d+e); a[r+2]+=e; } for(int i=1;i<=n;i++)sum[i]=sum[i-1]+a[i]; for(int i=1;i<=n;i++)sum[i]+=sum[i-1]; for(int i=1;i<=n;i++) { maxv=max(maxv,sum[i]); ans^=sum[i]; } cout<<ans<<' '<<maxv; return 0; } //洛谷p4231
标签:10000005,int,long,问题,差分,数组,等差数列 From: https://www.cnblogs.com/zbyQIN/p/18514565