样例输出7,15,30
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define pl (p<<1)
#define pr (p<<1|1)
const int N=1e5+100;
struct Tree{ll sum,mx;}tr[N<<2];
int n,q,op,l,r;ll a[N];
void push_up(int p){tr[p].sum=tr[pl].sum+tr[pr].sum,tr[p].mx=max(tr[pl].mx,tr[pr].mx);}
void update(int l,int r,int le,int ri,int p){
if(l==le&&r==ri)return tr[p].sum=tr[p].mx=sqrt(tr[p].sum),void();
if(tr[p].mx==1)return;
int mid=l+r>>1;
if(ri<=mid)update(l,mid,le,ri,pl);
else if(le>mid)update(mid+1,r,le,ri,pl);
else update(l,mid,le,mid,pl),update(mid+1,r,mid+1,ri,pl);
push_up(p);
}ll query(int l,int r,int le,int ri,int p){
if(l==le&&r==ri)return tr[p].sum;
int mid=l+r>>1;ll ret;
if(ri<=mid)ret=query(l,mid,le,ri,pl);
else if(le>mid)ret=query(mid+1,r,le,ri,pr);
else ret=query(l,mid,le,mid,pl)+query(mid+1,r,mid+1,ri,pr);
push_up(p);
return ret;
}void build(int l,int r,int p){
if(l==r)return tr[p].sum=tr[p].mx=a[l],void();
int mid=l+r>>1;build(l,mid,pl),build(mid+1,r,pr),push_up(p);
}int main(){
cin>>n;
for(int i=1;i<=n;i++)cin>>a[i];
build(1,n,1),cin>>q;
while(q--){
cin>>op>>l>>r;if(l>r)swap(l,r);
if(!op)update(1,n,l,r,1);
else cout<<query(1,n,l,r,1)<<'\n';
}return 0;
}