题目 题目链接 #include<cstdio> #define lc o<<1 #define rc o<<1|1 typedef long long ll; const int N=1e5+10; int n,m; ll p; ll a[N],sum[N<<2],add[N<<2],mul[N<<2]; void build(int o,int l,int r) { add[o]=0;mul[o]=1; if(l==r) { sum[o]=a[l]%p; return; } int mid=l+r>>1; build(lc,l,mid);build(rc,mid+1,r); sum[o]=(sum[lc]+sum[rc])%p; } void push_down(int o,int l,int r) { if(mul[o]!=1) { sum[lc]=sum[lc]*mul[o]%p; sum[rc]=sum[rc]*mul[o]%p; mul[lc]=mul[lc]*mul[o]%p; mul[rc]=mul[rc]*mul[o]%p; add[lc]=add[lc]*mul[o]%p; add[rc]=add[rc]*mul[o]%p; mul[o]=1; } int mid=l+r>>1; if(add[o]) { sum[lc]=(sum[lc]+add[o]*(mid-l+1))%p; sum[rc]=(sum[rc]+add[o]*(r-mid))%p; add[lc]=(add[lc]+add[o])%p; add[rc