#include
#include
#include
#include
using namespace std;
struct nod{
int l;
int r;
int flag;
int64 data;
};
int n,tem,m,a,b,c;
__int64 ans[100010];
__int64 sum;
struct nod tree[400040];
void maintain(int node){
tree[node].data=tree[node*2].data+tree[node*2+1].data;
tree[node].flag=tree[node*2].flag||tree[node*2+1].flag;
}
void build(int node,int l,int r){
tree[node].l=l;
tree[node].r=r;
tree[node].flag=1;
if(l==r){
tree[node].data=ans[l];
if(ans[l]<=1)tree[node].flag=0;
return;
}
int mid=(tree[node].l+tree[node].r)/2;
build(node*2,l,mid);
build(node*2+1,mid+1,r);
maintain(node);
}
void update(int node,int l,int r){
if(tree[node].flag==0)return;
if(tree[node].l==tree[node].r&&tree[node].l==l&&tree[node].r==r){
tree[node].data=(int64)sqrt(1.0*tree[node].data);
if(tree[node].data<=1)tree[node].flag=0;
return ;
}
int mid=(tree[node].l+tree[node].r)/2;
if(r<=mid)
update(node*2,l,r);
else if(l>mid)
update(node*2+1,l,r);
else {
update(node*2,l,mid);
update(node*2+1,mid+1,r);
}
maintain(node);
}
void query(int node,int l,int r){
if(tree[node].l==l&&tree[node].r==r){
sum+=tree[node].data;
return;
}
int mid=(tree[node].l+tree[node].r)/2;
if(r<=mid)
query(node*2,l,r);
else if(l>mid)
query(node*2+1,l,r);
else {
query(node*2,l,mid);
query(node*2+1,mid+1,r);
}
}
int main(){
int count = 1;
while(scanf("%d",&n)!=EOF){
memset(ans,0,sizeof(ans));
for(int i = 1;i <= n; i++){
scanf("%ld",&ans[i]);
}
build(1,1,n);
scanf("%d",&m);
printf("Case #%d:\n",count++);
for(int i = 1;i <= m; i++){
scanf("%d%d%d",&a,&b,&c);
if(a==0){
update(1,b,c);
}
if(a==1){
sum=0;
query(1,b,c);
printf("%I64d\n",sum);}}}}
杭电amc hdu4027 Runtime Error (ACCESS_VIOLATION) 求看!
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
悬赏问题
- ¥15 c程序不知道为什么得不到结果
- ¥40 复杂的限制性的商函数处理
- ¥15 程序不包含适用于入口点的静态Main方法
- ¥15 素材场景中光线烘焙后灯光失效
- ¥15 请教一下各位,为什么我这个没有实现模拟点击
- ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
- ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
- ¥20 有关区间dp的问题求解
- ¥15 多电路系统共用电源的串扰问题
- ¥15 slam rangenet++配置