求调
查看原帖
求调
947527
Gyf117楼主2025/1/17 23:08

rt。

// Problem: P3373 【模板】线段树 2
// Contest: Luogu
// URL: https://www.luogu.com.cn/problem/P3373
// Memory Limit: 125 MB
// Time Limit: 1000 ms
// 
// Powered by CP Editor (https://cpeditor.org)

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N=1e5+7;
ll n,m,q,root=1;
ll a[N];
struct Node{
  ll l,r,v,t,t2=1;
} tr[N<<2];
ll pushup(ll u){
  tr[u].v=(tr[u<<1].v+tr[u<<1|1].v)%m;
  return 0;
}
ll build(ll u,ll l,ll r){
  tr[u].l=l;
  tr[u].r=r;
  if(l==r){
    tr[u].v=a[l]%m;
    return 0;
  }
  ll mid=l+r>>1;
  build(u<<1,l,mid);
  build(u<<1|1,mid+1,r);
  pushup(u);
  return 0;
}
ll calc(ll u,ll d,ll d2){
  (tr[u].v*=d2)%=m;
  (tr[u].t2*=d2)%=m;
  (tr[u].t*=d2)%=m;
  (tr[u].v+=(tr[u].r-tr[u].l+1)*d)%=m;
  (tr[u].t+=d)%=m;
  return 0;
}
ll pushdown(ll u){
  calc(u<<1,tr[u].t,tr[u].t2);
  calc(u<<1|1,tr[u].t,tr[u].t2);
  tr[u].t=0;
  tr[u].t2=1;
  return 0;
}
ll modify(ll u,ll l,ll r,ll v){
  if(l<=tr[u].l&&tr[u].r<=r){
    calc(u,v,1);
    return 0;
  }
  ll mid=tr[u].l+tr[u].r>>1;
  pushdown(u);
  if(l<=mid){
    modify(u<<1,l,r,v);
  }
  if(r>=mid+1){
    modify(u<<1|1,l,r,v);
  }
  pushup(u);
  return 0;
}

ll modify2(ll u,ll l,ll r,ll v){
  if(l<=tr[u].l&&tr[u].r<=r){
    calc(u,0,v);
    return 0;
  }
  ll mid=tr[u].l+tr[u].r>>1;
  pushdown(u);
  if(l<=mid){
    modify2(u<<1,l,r,v);
  }
  if(r>=mid+1){
    modify2(u<<1|1,l,r,v);
  }
  pushup(u);
  return 0;
}
ll query(ll u,ll l,ll r){
  if(l<=tr[u].l&&tr[u].r<=r){
    return tr[u].v;
  }
  ll mid=tr[u].l+tr[u].r>>1;
  pushdown(u);
  ll res=0;
  if(l<=mid){
    (res+=query(u<<1,l,r))%=m;
  }
  if(r>=mid+1){
    (res+=query(u<<1|1,l,r))%=m;
  }
  return res;
}
int main()
{
  cin>>n>>q>>m;
  for(ll i=1;i<=n;++i){
    cin>>a[i];
  }
  build(root,1,n);
  while(q--){
    ll op,l,r,k;
    cin>>op>>l>>r;
    if(op==1){
      cin>>k;
      modify(root,l,r,k);
    }
    if(op==2){
      cin>>k;
      modify2(root,l,r,k);
    }
    if(op==3){
      cout<<query(root,l,r)<<endl;
    }
  }
  return 0;
}

@2huk

2025/1/17 23:08
加载中...