rt,全 WA
#include <bits/stdc++.h>
using namespace std;
int n,m,l,r,opt,bl[100005],block;
long double x,a[100005],s[355],s2[355],tag[355];
inline void Add(int l,int r,int x){
for(int i=l;i<=min(r,bl[l]*block);i++)
s2[bl[i]]+=2*(a[i]+tag[bl[i]])*x+x*x,a[i]+=x,s[bl[i]]+=x;
if(bl[l]^bl[r])
for(int i=(bl[r]-1)*block+1;i<=r;i++)
s2[bl[i]]+=2*(a[i]+tag[bl[i]])*x+x*x,a[i]+=x,s[bl[i]]+=x;
for(int i=bl[l]+1;i<bl[r];i++) s2[i]+=block*x*x+2*s[i]*x,s[i]+=block*x,tag[i]+=x;
}
inline long double sum(int l,int r){
long double res=0;
for(int i=l;i<=min(bl[l]*block,r);i++)
res+=a[i]+tag[bl[i]];
if(bl[l]^bl[r])
for(int i=(bl[r]-1)*block+1;i<=r;i++)
res+=a[i]+tag[bl[i]];
for(int i=bl[l]+1;i<bl[r];i++)
res+=s[i];
return res;
}
inline long double sum2(int l,int r){
long double res=0;
for(int i=l;i<=min(bl[l]*block,r);i++)
res=res+(a[i]+tag[bl[i]])*(a[i]+tag[bl[i]]);
if(bl[l]^bl[r])
for(int i=(bl[r]-1)*block+1;i<=r;i++)
res=res+(a[i]+tag[bl[i]])*(a[i]+tag[bl[i]]);
for(int i=bl[l]+1;i<bl[r];i++)
res+=s2[i];
return res;
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
cin>>n>>m,block=sqrt(n);
for(int i=1;i<=n;i++) cin>>a[i],bl[i]=(i-1)/block+1,s[bl[i]]+=a[i],s2[bl[i]]+=a[i]*a[i];
while(m--){
cin>>opt>>l>>r;
if(opt==1){
cin>>x;
Add(l,r,x);
}
else if(opt==2) cout<<fixed<<setprecision(4)<<sum(l,r)/(r-l+1)<<'\n';
else cout<<fixed<<setprecision(4)<<(sum(l,r)/(r-l+1))*(sum(l,r)/
(r-l+1))+(sum2(l,r)-2*sum(l,r)*sum(l,r)/(r-l+1))/(r-l+1)<<'\n';
}
return 0;
}