WA on #3~7
#include <bits/stdc++.h>
using namespace std;
#define int long long
inline int read(){
int x=0;bool f=1;char ch=getchar();
for(;ch>'9'||ch<'0';ch=getchar()) if(ch=='-') f=0;
for(;ch>='0'&&ch<='9';ch=getchar()) x=(x<<3)+(x<<1)+(ch^48);
return f?x:-x;
}
int n,m,l,r,s,t,block,bl[100005],opt,x[100005],y[100005],ad[505],da[505],sx[505],sy[505],sxq[505],sxy[505];
inline long double query(int l,int r){
int sumx=0,sumy=0;
long double _x,_y,fz=0,fm=0;
for(int i=l;i<=min(r,bl[l]*block);i++)
sumx+=(x[i]+ad[bl[i]]),sumy+=(y[i]+da[bl[i]]),
fz+=(x[i]+ad[bl[i]])*(y[i]+da[bl[i]]),fm+=(x[i]+ad[bl[i]])*(x[i]+ad[bl[i]]);
if(bl[l]^bl[r])
for(int i=(bl[r]-1)*block+1;i<=r;i++)
sumx+=(x[i]+ad[bl[i]]),sumy+=(y[i]+da[bl[i]]),
fz+=(x[i]+ad[bl[i]])*(y[i]+da[bl[i]]),fm+=(x[i]+ad[bl[i]])*(x[i]+ad[bl[i]]);
for(int i=bl[l]+1;i<bl[r];i++)
sumx+=sx[i],sumy+=sy[i],fz+=sxy[i],fm+=sxq[i];
_x=1.0*sumx/(r-l+1),_y=1.0*sumy/(r-l+1);
fz=fz+(r-l+1)*_x*_y-sumy*_x-sumx*_y,fm=fm+(r-l+1)*_x*_x-2*sumx*_x;
return fz/fm;
}
inline void Add(int l,int r,int s,int t){
for(int i=l;i<=min(r,bl[l]*block);i++)
sx[bl[l]]+=s,sxq[bl[l]]+=s*s+2*(x[i]+ad[bl[i]])*s,sxy[bl[l]]+=s*(y[i]+da[bl[i]]),x[i]+=s,
sy[bl[l]]+=t,sxy[bl[l]]+=t*(x[i]+ad[bl[i]]),y[i]+=t;
if(bl[l]^bl[r])
for(int i=(bl[r]-1)*block+1;i<=r;i++)
sx[bl[r]]+=s,sxq[bl[r]]+=s*s+2*(x[i]+ad[bl[i]])*s,sxy[bl[r]]+=s*(y[i]+da[bl[i]]),x[i]+=s,
sy[bl[r]]+=t,sxy[bl[r]]+=t*(x[i]+ad[bl[i]]),y[i]+=t;
for(int i=bl[l]+1;i<bl[r];i++)
sxq[i]+=s*s*block+2*s*sx[i],sx[i]+=s*block,sxy[i]+=s*sy[i],
sy[i]+=t*block,sxy[i]+=t*sx[i],da[i]+=t,ad[i]+=s;
}
inline void b(int l,int r,int s,int t){
for(int i=l;i<=min(bl[l]*block,r);i++)
sx[bl[i]]-=x[i],sxq[bl[i]]-=x[i]*x[i],sxy[bl[i]]-=x[i]*y[i],ad[bl[i]]=da[bl[i]]=0,
x[i]=s+i,sx[bl[i]]+=x[i],sxq[bl[i]]+=x[i]*x[i],sxy[bl[i]]+=x[i]*y[i],
sy[bl[i]]-=y[i],sxy[bl[i]]-=x[i]*y[i],y[i]=i+t,sy[bl[i]]+=y[i],sxy[bl[i]]+=x[i]*y[i];
if(bl[l]^bl[r])
for(int i=(bl[r]-1)*block+1;i<=r;i++)
sx[bl[i]]-=x[i],sxq[bl[i]]-=x[i]*x[i],sxy[bl[i]]-=x[i]*y[i],ad[bl[i]]=da[bl[i]]=0,
x[i]=s+i,sx[bl[i]]+=x[i],sxq[bl[i]]+=x[i]*x[i],sxy[bl[i]]+=x[i]*y[i],
sy[bl[i]]-=y[i],sxy[bl[i]]-=x[i]*y[i],y[i]=i+t,sy[bl[i]]+=y[i],sxy[bl[i]]+=x[i]*y[i];
for(int i=bl[l]+1;i<bl[r];i++){
int lt=((i-1)*block+1),rt=i*block;
sxy[i]=(rt-lt+1)*s*t+(s+t)*(lt+rt)*(lt+rt-1)/2+rt*(rt+1)*(2*rt+1)/6-lt*(lt-1)*(2*lt-1)/6,
sxq[i]=(rt-lt+1)*s*s+s*(lt+rt)*(rt-lt+1)+rt*(rt+1)*(2*rt+1)/6-lt*(lt-1)*(2*lt-1)/6,
sx[i]=(rt-lt+1)*s+(lt+rt)*(rt-lt+1)/2,sy[i]=(rt-lt+1)*t+(lt+rt)*(rt-lt+1)/2;
ad[i]=da[i]=0;
}
}
signed main(){
// freopen("analyze.in","r",stdin);
// freopen("analyze.out","w",stdout);
n=read(),m=read(),block=sqrt(n);
for(int i=1;i<=n;i++)
x[i]=read(),bl[i]=(i-1)/block+1,sx[bl[i]]+=x[i],sxq[bl[i]]+=x[i]*x[i];
for(int i=1;i<=n;i++)
y[i]=read(),sy[bl[i]]+=y[i],sxy[bl[i]]+=x[i]*y[i];
// for(int i=1;(i-1)*block<n;i++)
// printf("%lld %lld %lld %lld\n",sx[i],sy[i],sxq[i],sxy[i]);
while(m--){
opt=read(),l=read(),r=read();
if(opt==1) cout<<fixed<<setprecision(10)<<query(l,r)<<'\n';
else{
s=read(),t=read();
if(opt&1) b(l,r,s,t);
else Add(l,r,s,t);
}
}
return 0;
}