比赛 |
树形数据结构拔高 |
评测结果 |
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;
}