#include<bits/stdc++.h>
using namespace std;
long long q[10000001];
int n,m,l,r,k;
long long s=9999999999999;
struct SEtree
{
int l,r;
int sum;
int mx;
#define l(x) tree[x].l
#define r(x) tree[x].r
#define sum(x) tree[x].sum
#define mx(x) tree[x].mx
} tree[5000000];
void build(int p,int l,int r,int s)
{
l(p)=l;r(p)=r;
if(l==r)
{
sum(p)=q[l];
mx(p)=q[l];
return;
}
int mid=(l+r)>>1;
build(p*2,l,mid,s);
build(p*2+1,mid+1,r,s);
sum(p)=sum(p*2)+sum(p*2+1);
mx(p)=max(mx(p*2),mx(p*2+1));
}
void change(int p,int l,int r)
{
if(l(p)==r(p))
{
sum(p)=sqrt(sum(p));
mx(p)=sqrt(mx(p));
return;
}
int mid=(l(p)+r(p))/2;
if(l<=l(p)&&mx(p*2)>1)
{
change (p*2,l,r);
}
if(r>=r(p)&&mx(p*2+1)>1)
{
change(p*2+1,l,r);
}
sum(p)=sum(p*2)+sum(p*2+1);
mx(p)=max(mx(p*2),mx(p*2)+1);
}
int ask(int p,int l,int r)
{
if(l<=l(p)&&r(p)<=r)
{
return sum(p);
}
int mid=(l(p)+r(p))/2;
int val=0;
if(l<=mid)
{
val+=ask(p*2,l,r);
}
if(r>=r(p))
{
val+=ask(p*2+1,l,r);
}
return val;
}
int main()
{int a,b;
int ans;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>q[i];
}
build(1,1,n,s);
cin>>m;
for(int i=1;i<=m;i++)
{
scanf("%d",&k);
if(k==1)
{
cin>>a>>b;
if(a>b)swap(a,b);
ans=ask(1,a,b);
cout<<ans<<'\n';
}
if(k==0)
{
scanf("%d%d",&l,&r);
if(l>r)swap(l,r);
change(1,l,r);
}
}
return 0;
}
有的位置莫名会变成0