不知道为啥0pts

P3373 【模板】线段树 2

@[凤凰工作室](/user/491007) ```cpp #include<bits/stdc++.h> using namespace std; #define int long long int arr[100005],n,q,m; class stree { public: int l,r,sum; }tree[800005]; int lazya[800005],lazym[800005]; void pushup(int k) { tree[k].sum=(tree[k<<1].sum+tree[k<<1|1].sum)%m; } void pushdown(int k) { tree[k<<1].sum=((tree[k<<1].sum*lazym[k])%m+(lazya[k]*(tree[k<<1].r-tree[k<<1].l+1))%m)%m; tree[k<<1|1].sum=((tree[k<<1|1].sum*lazym[k])%m+(lazya[k]*(tree[k<<1|1].r-tree[k<<1|1].l+1))%m)%m; lazya[k<<1]=((lazya[k<<1]*lazym[k])%m+lazya[k])%m; lazya[k<<1|1]=((lazya[k<<1|1]*lazym[k])%m+lazya[k])%m; lazym[k<<1]=(lazym[k<<1]*lazym[k])%m; lazym[k<<1|1]=(lazym[k<<1|1]*lazym[k])%m; lazya[k]=0; lazym[k]=1; } void add(int L,int R,int k,int c) { if(L<=tree[k].l&&tree[k].r<=R) { lazya[k]=(lazya[k]+c)%m; tree[k].sum=(tree[k].sum+c*(tree[k].r-tree[k].l+1)%m)%m; return; } pushdown(k); int mid=(tree[k].r+tree[k].l)>>1; if(L<=mid)add(L,R,k<<1,c); if(R>mid)add(L,R,k<<1|1,c); pushup(k); } void mul(int L,int R,int k,int c) { if(L<=tree[k].l&&tree[k].r<=R) { lazym[k]=(lazym[k]*c)%m; lazya[k]=(lazya[k]*c)%m; tree[k].sum=(tree[k].sum*c)%m; return; } pushdown(k); int mid=(tree[k].r+tree[k].l)>>1; if(L<=mid)mul(L,R,k<<1,c); if(R>mid)mul(L,R,k<<1|1,c); pushup(k); } void build(int L,int R,int k) { lazym[k]=1; tree[k].r=R;tree[k].l=L; if(R==L) { tree[k].sum=arr[R]%m; return; } int mid=(tree[k].r+tree[k].l)>>1; build(L,mid,k<<1); build(mid+1,R,k<<1|1); pushup(k); } int qurey(int L,int R,int k) { if(L<=tree[k].l&&tree[k].r<=R) { return tree[k].sum; } pushdown(k); int mid=(tree[k].r+tree[k].l)>>1; int sum=0; if(L<=mid)sum=(sum+qurey(L,R,k<<1))%m; if(R>mid)sum=(sum+qurey(L,R,k<<1|1))%m; return sum; } signed main(void) { cin>>n>>q>>m; for(int i=1;i<=n;i++) cin>>arr[i]; build(1,n,1); while(q--) { int op; cin>>op; if(op==1) { int x,y,k; cin>>x>>y>>k; mul(x,y,1,k); } if(op==2) { int x,y,k; cin>>x>>y>>k; add(x,y,1,k); } if(op==3) { int x,y; cin>>x>>y; cout<<qurey(x,y,1)<<endl; } } return 0; } ``` 87,88行改了下
by _xYZPx_ @ 2023-11-25 17:15:53


|