20pts AC #1 #6 #7 #8
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e5+1;
struct tree{
int add,mul,l,r;
}t[4*N];
int n,m,a[N],b[N],x,y,le,ri,k,t1,id,ii;
void down(int po){
t[po].add=t[po*2].add+t[po*2+1].add;
t[po].mul=min(t[po*2].mul,t[po*2+1].mul);
}
void build(int l,int r,int po){
t[po].l=l,t[po].r=r;
if(l==r){
t[po].add=a[l]+b[l];
t[po].mul=a[l]*b[l];
return ;
}
int mid=(l+r)/2;
build(l,mid,po*2);
build(mid+1,r,po*2+1);
down(po);
}
void p1(int l,int r,int kk,int tt,int po){
if(t[po].mul>kk) return ;
if(t[po].l==t[po].r){
a[t[po].l]+=tt;
b[t[po].l]+=tt;
t[po].add=a[t[po].l]+b[t[po].l];
t[po].mul=a[t[po].l]*b[t[po].l];
return ;
}
int mid=(t[po].l+t[po].r)/2;
if(l<=mid) p1(l,mid,kk,tt,po*2);
if(r>mid) p1(mid+1,r,kk,tt,po*2+1);
down(po);
}
void p2(int idd,int xx,int yy,int po){
if(t[po].r==t[po].l){
a[idd]=xx;
b[idd]=yy;
t[po].add=a[idd]+b[idd];
t[po].mul=a[idd]*b[idd];
return ;
}
int mid=(t[po].l+t[po].r)/2;
if(idd<=mid) p2(idd,xx,yy,po*2);
if(idd>mid) p2(idd,xx,yy,po*2+1);
down(po);
}
int p3(int l,int r,int po){
if(t[po].r<l||t[po].l>r) return 0;
if(t[po].l>=l&&t[po].r<=r){
return t[po].add;
}
int ans=0;
int mid=(t[po].l+t[po].r)/2;
ans+=p3(l,r,po*2);
ans+=p3(l,r,po*2+1);
return ans;
}
signed main(){
ios::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
cin>>n>>m;
for(int i=1;i<=n;i++) cin>>a[i];
for(int i=1;i<=n;i++) cin>>b[i];
build(1,n,1);
for(int i=1;i<=m;i++){
cin>>id;
if(id==1){
cin>>le>>ri>>k>>t1;
if(t1)p1(le,ri,k,t1,1);
}
if(id==2){
cin>>ii>>x>>y;
p2(ii,x,y,1);
}
if(id==3){
cin>>le>>ri;
cout<<p3(le,ri,1)<<"\n";
}
}
return 0;
}