P4145
#include <bits/stdc++.h>
using namespace std;
#define AK_IOI 10100
long long n,m;
struct node{
long long sum;
long long maxn;
}zzp[AK_IOI];
long long Naoh[AK_IOI];
void pushup(long long rt){
zzp[rt].sum=zzp[rt<<1].sum+zzp[rt<<1|1].sum;
zzp[rt].maxn=max(zzp[rt<<1].maxn,zzp[rt<<1|1].maxn);
}
void build(long long l,long long r,long long rt){
if (l==r){
zzp[rt].sum=Naoh[l];
zzp[rt].maxn=Naoh[l];
return ;
}
long long mid=(l+r)>>1;
build(l,mid,rt*2);
build(mid+1,r,rt*2+1);
pushup(rt);
}
void ccf(long long l,long long r,long long x,long long y,long long rt){
if (x>r||y<l) return ;
if (zzp[rt].maxn==1) return ;
if (x==y){
zzp[rt].sum=sqrt(zzp[rt].sum);
zzp[rt].maxn=zzp[rt].sum;
return ;
}
long long mid=(x+y)>>1;
ccf(l,r,x,mid,rt*2);
ccf(l,r,mid+1,y,rt*2+1);
pushup(rt);
}
long long que(long long l,long long r,long long x,long long y,long long rt){
if (x>r||y<l) return 0;
if (l>=x&&y<=r) return zzp[rt].sum;
long long mid=(x+y)>>1;
return (que(l,r,x,mid,rt*2)+que(l,r,mid+1,y,rt*2+1));
}
int main()
{
cin>>n;
for (long long i=1;i<=n;i++) cin>>Naoh[i];
build(1,n,1);
cin>>m;
for (long long i=1;i<=m;i++){
int c,m,h;
cin>>c>>m>>h;
if (c==1){
ccf(m,h,1,n,1);
}
if (c==0){
cout<<que(m,h,1,n,1)<<endl;
}
}
return 0;
}
这个代码哪里错了啊?
好像ccf函数有错,但本蒟蒻查不出来awa。