比赛 树形数据结构拔高 评测结果 AAATTTTTTT
题目名称 HS造题的七分钟 最终得分 30
用户昵称 QPY666 运行时间 14.022 s
代码语言 C++ 内存使用 7.96 MiB
提交时间 2025-04-17 20:31:03
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
long long n,m,a[4000100],i,j,k;
struct A{
    long long l,r,sum;
}tree[4000100];
void push(long long t,long long p,long long l,long long r){
    tree[t].l=l;
    tree[t].r=r;
    if(l==r){
        tree[t].sum=a[l];
        return;
    }
    long long mid=(l+r)/2;
    if(mid<p){
        push(t*2,p,mid+1,r);
    }
    else{
        push(t*2+1,p,l,mid);
    }
    tree[t].sum=tree[t*2].sum+tree[t*2+1].sum;
    return;
}
void kp(long long t,long long l1,long long r1,long long l,long long r){
    if(l==r){
        tree[t].sum=int(sqrt(tree[t].sum));
        return;
    }
    long long mid=(l+r)/2;
    if(mid>=r1){
        kp(t*2+1,l1,r1,l,mid);
    }
    else if(l1>mid){
        kp(t*2,l1,r1,mid+1,r);
    }
    else{
        kp(t*2+1,l1,mid,l,mid);
        kp(t*2,mid+1,r1,mid+1,r);
    }
    tree[t].sum=tree[t*2+1].sum+tree[t*2].sum;
    return;
}
long long find(long long t,long long l1,long long r1,long long l,long long r){
    if(l1==l&&r1==r){
        return tree[t].sum;
    }
    long long mid=(l+r)/2;
    if(mid>=r1){
        return find(t*2+1,l1,r1,l,mid);
    }
    else if(l1>mid){
        return find(t*2,l1,r1,mid+1,r);
    }
    else{
        return find(t*2,mid+1,r1,mid+1,r)+find(t*2+1,l1,mid,l,mid);
    }
}
int main(){
    freopen("hssqrt.in","r",stdin);
    freopen("hssqrt.out","w",stdout);
    ios::sync_with_stdio(0);
    cin>>n;
    for(int x=1;x<=n;x++){
        cin>>a[x];
        push(1,x,1,n);
    }
    cin>>m;
    for(int x=1;x<=m;x++){
        cin>>i>>j>>k;
        if(j>k){
            swap(j,k);
        }
        if(i==0){
            kp(1,j,k,1,n);
        }
        else{
            cout<<find(1,j,k,1,n)<<endl;
        }
    }
    return 0;
}