25行到27行错了 求改
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int mod=998244353,N=2e5+5;
struct segtree{
int l,r,sumA,sumB,tagA,tagB,sum;
segtree(){
sumA=sumB=tagA=tagB=sum=0;
}
}seg[N*4];
int n,T,a[N],b[N];
void pushup(int u){
seg[u].sumA=(seg[u*2].sumA+seg[u*2+1].sumA)%mod,seg[u].sumB=(seg[u*2].sumB+seg[u*2+1].sumB)%mod,seg[u].sum=(seg[u*2].sum+seg[u*2+1].sum)%mod;
}
void build(int u,int l,int r){
seg[u].l=l,seg[u].r=r;
if(l==r){
seg[u].sumA=a[l]%mod,seg[u].sumB=b[l]%mod,seg[u].sum=a[l]*b[l]%mod;
return;
}
int mid=(l+r)>>1;
build(u*2,l,mid),build(u*2+1,mid+1,r),pushup(u);
}
void addtag(int u,int A,int B){
seg[u].tagA=(seg[u].tagA+A)%mod,seg[u].tagB=(seg[u].tagB+B)%mod;
seg[u].sumA=(seg[u].sumA+(seg[u].r-seg[u].l+1)*A%mod)%mod,seg[u].sumB=(seg[u].sumB+B*(seg[u].r-seg[u].l+1)%mod)%mod;
seg[u].sum=(seg[u].sum+seg[u].sumA*seg[u].tagB%mod+seg[u].tagA*seg[u].sumB%mod+seg[u].tagA*seg[u].tagB%mod)%mod;
}
void pushdown(int u){
addtag(u*2,seg[u].tagA,seg[u].tagB),addtag(u*2+1,seg[u].tagA,seg[u].tagB),seg[u].tagA=seg[u].tagB=0;
}
int query(int u,int l,int r){
if(seg[u].l>=l&&seg[u].r<=r){
return seg[u].sum;
}
pushdown(u);
int ret=0,mid=(seg[u].l+seg[u].r)>>1;
if(l<=mid){
ret=(ret+query(u*2,l,r))%mod;
}
else{
ret=(ret+query(u*2+1,l,r))%mod;
}
return ret;
}
void update(int u,int l,int r,int A,int B){
if(seg[u].l>=l&&seg[u].r<=r){
addtag(u,A,B);
return;
}
pushdown(u);
int mid=(seg[u].l+seg[u].r)>>1;
if(l<=mid){
update(u*2,l,r,A,B);
}
if(r>mid){
update(u*2+1,l,r,A,B);
}
pushup(u);
}
signed main(){
cin>>n>>T;
for(int i=1;i<=n;i++){
cin>>a[i];
}
for(int i=1;i<=n;i++){
cin>>b[i];
}
build(1,1,n);
for(int typ,l,r,x;T--;){
cin>>typ>>l>>r;
if(typ==3){
cout<<query(1,l,r)<<'\n';
}
else{
cin>>x;
if(typ==1){
update(1,l,r,x,0);
}
else{
update(1,l,r,0,x);
}
}
}
}