rt,code:
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,m,a[200200],op,l,r,v;
struct segtree{
int l,r,tag;
double sin,cos;
}t[800800];
void pushdown(int p){
if(!t[p].tag){
t[p*2].sin=t[p*2].sin*cos(t[p].tag)+t[p*2].cos*sin(t[p].tag),t[p*2].cos=t[p*2].cos*cos(t[p].tag)-t[p*2].sin*sin(t[p].tag);
t[p*2+1].sin=t[p*2+1].sin*cos(t[p].tag)+t[p*2+1].cos*sin(t[p].tag),t[p*2+1].cos=t[p*2+1].cos*cos(t[p].tag)-t[p*2+1].sin*sin(t[p].tag);
t[p*2].tag+=t[p].tag;
t[p*2+1].tag+=t[p].tag;
t[p].tag=0;
}
}
void build(int p,int l,int r){
t[p].l=l,t[p].r=r,t[p].tag=0;
if(l==r){
t[p].sin=sin(a[l]);
t[p].cos=cos(a[l]);
return ;
}
t[p].sin=(t[p*2].sin+t[p*2+1].sin);
t[p].cos=(t[p*2].cos+t[p*2+1].cos);
}
void change(int p,int l,int r,int c){
if(l<=t[p].l&&t[p].r<=r){
t[p].tag+=c;
t[p].sin=t[p].sin*cos(c)+t[p].cos*sin(c),t[p].cos=t[p].cos*cos(c)-t[p].sin*sin(c);
return ;
}
pushdown(p);
int mid=(t[p].l+t[p].r)>>1;
if(l<=mid){
change(p*2,l,r,c);
}
if(r>mid){
change(p*2+1,l,r,c);
}
t[p].sin=t[p*2].sin+t[p*2+1].sin;
t[p].cos=t[p*2].cos+t[p*2+1].cos;
}
double ask(int p,int l,int r){
if(l<=t[p].l&&r>=t[p].r){
return t[p].sin;
}
pushdown(p);
int mid=(t[p].l+t[p].r)>>1;
double val=0;
if(l<=mid){
val+=ask(p*2,l,r);
}
if(r>mid){
val+=ask(p*2+1,l,r);
}
return val;
}
signed main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
build(1,1,n);
cin>>m;
for(int i=1;i<=m;i++){
cin>>op;
if(op==1){
cin>>l>>r>>v;
change(1,l,r,v);
}
else{
cin>>l>>r;
cout<<fixed<<setprecision(1)<<ask(1,l,r)<<endl;
}
}
return 0;
}