#include<bits/stdc++.h>
using namespace std;
struct Node{
long long l,r,val,max;
}a[400005];
void init(long long l,long long r,long long i){
if(l==r){
a[i].l=l;
a[i].r=r;
}
else {
a[i].l=l;
a[i].r=r;
long long mid=(l+r)>>1;
init(l,mid,i*2);
init(mid+1,r,i*2+1);
}
return ;
}
void build_tree(long long i){
if(a[i].l==a[i].r){
scanf("%lld",&a[i].val);
a[i].max=a[i].val;
}
else {
build_tree(i*2);
build_tree(i*2+1);
a[i].max=max(a[i*2+1].max,a[i*2].max);
a[i].val=a[i*2+1].val+a[i*2].val;
}
return ;
}
void change(long long l,long long r,long long i){
if(a[i].max<2){
return ;
}
if(a[i].l > r || a[i].r < l)return ;
if(a[i].l==a[i].r){
a[i].val=sqrt(a[i].val);
a[i].max=a[i].val;
return ;
}
change(l,r,i*2);
change(l,r,i*2+1);
a[i].val=a[i*2].val+a[i*2+1].val;
a[i].max=max(a[i*2].max,a[i*2+1].max);
return ;
}
long long query(long long l,long long r,long long i){
if(a[i].l>=l && a[i].r<=r)return a[i].val;
if(a[i].l>r || a[i].r<l)return 0;
return query(l,r,i*2)+query(l,r,i*2+1);
}
int main(){
//freopen("P4145_1.in","r",stdin);
long long n;
cin>>n;
init(1,n,1);
build_tree(1);
long long m;
scanf("%lld",&m);
while(m--){
long long k,l,r;
scanf("%lld%lld%lld",&k,&l,&r);
if(l>r)swap(l,r);
if(k==0){
change(l,r,1);
// for(long long i=1;i<=4*n;i++){
// if(a[i].l==a[i].r && a[i].l!=0){
// cout<<a[i].l<<" "<<a[i].val<<endl;
// }
//}
}
else {
printf("%d\n",query(l,r,1));
}
}
return 0;
}
正确:前五个点