有点意思,不需要什么懒标记之类的东西,因为一个数无论怎样开平方,最后取整的结果必然会是1,所以我们不妨用最大值来维护,若区间最大值不为1,就暴力修改,否则不用管。

#include<bits/stdc++.h>
using namespace std;
const int maxn=1e6+7;
struct node
{int l;int r;unsigned long long sum;unsigned long long mx;
}tree[maxn*4];
int n,m;
unsigned long long l,r,opt;
unsigned long long a[maxn];
void build(int now,int l,int r)
{tree[now].l=l;tree[now].r=r;if(l==r){tree[now].sum=tree[now].mx=a[l];return;}int mid=(l+r)>>1; build(now*2,l,mid);build(now*2+1,mid+1,r);tree[now].sum=tree[now*2].sum+tree[now*2+1].sum;tree[now].mx=max(tree[now*2].mx,tree[now*2+1].mx);
}
void update(int now,int l,int r)
{if(tree[now].l==tree[now].r){tree[now].sum=sqrt(tree[now].sum);tree[now].mx=sqrt(tree[now].mx);return;}int mid=(tree[now].l+tree[now].r)>>1;if(l<=mid&&tree[now*2].mx>1){update(now*2,l,r);}if(r>mid&&tree[now*2+1].mx>1){update(now*2+1,l,r);}tree[now].sum=tree[now*2].sum+tree[now*2+1].sum;tree[now].mx=max(tree[now*2].mx,tree[now*2+1].mx);
}
long long query(int now,int l,int r)
{if(tree[now].l>=l&&tree[now].r<=r){return tree[now].sum;}int mid=(tree[now].l+tree[now].r)>>1;long long ans=0;if(l<=mid){ans+=query(now*2,l,r);}if(mid<r){ans+=query(now*2+1,l,r);}return ans;
}
int main()
{scanf("%d",&n);for(int i=1;i<=n;i++){scanf("%lld",&a[i]);}build(1,1,n);scanf("%d",&m);for(int i=1;i<=m;i++){scanf("%lld%lld%lld",&opt,&l,&r);if(l>r){swap(l,r);}if(opt==0){update(1,l,r);} else{printf("%lld\n",query(1,l,r));}}return 0;
}

多说几句,数据比较毒瘤,狂开unsigned long long 就能AC

转载于:https://www.cnblogs.com/LJB666/p/10778562.html

P4145 上帝造题的七分钟2 / 花神游历各国(线段树区间开平方)相关推荐

  1. 【luogu4145】 上帝造题的七分钟2 / 花神游历各国 [线段树]

    P4145 上帝造题的七分钟2 / 花神游历各国 把一段区间里的每个数都开方 求区间和 可以发现最多开方开6次就能都变为1 所以可以hei暴力地一个点一个点地改 具体操作我用的和buildtree差不 ...

  2. P4145-上帝造题的七分钟2/花神游历各国【并查集,树状数组】

    正题 题目链接:https://www.luogu.com.cn/problem/P4145 题目大意 一个序列要求支持 区间开根向下取整 区间求和 解题思路 一个数开根约logloglog次就会到1 ...

  3. [BZOJ3211] 花神游历各国 - 线段树

    3211: 花神游历各国 Time Limit: 5 Sec  Memory Limit: 128 MB Submit: 4766  Solved: 1741 [Submit][Status][Dis ...

  4. 【暑假训练 7.10】 codevs 2492 上帝造题的七分钟2

    Description XLk觉得<上帝造题的七分钟>不太过瘾,于是有了第二部. "第一分钟,X说,要有数列,于是便给定了一个正整数数列. 第二分钟,L说,要能修改,于是便有了对 ...

  5. BZOJ3038 上帝造题的七分钟

    Time Limit: 3 Sec Memory Limit: 128 MB Description XLk觉得<上帝造题的七分钟>不太过瘾,于是有了第二部. "第一分钟,X说, ...

  6. BZOJ 3038: 上帝造题的七分钟2【线段树区间开方问题】

    3038: 上帝造题的七分钟2 Time Limit: 3 Sec  Memory Limit: 128 MB Submit: 1469  Solved: 631 [Submit][Status][D ...

  7. BZOJ 3038 上帝造题的七分钟2

    Description XLk觉得<上帝造题的七分钟>不太过瘾,于是有了第二部. "第一分钟,X说,要有数列,于是便给定了一个正整数数列. 第二分钟,L说,要能修改,于是便有了对 ...

  8. bzoj 3211: 花神游历各国 bzoj 3038: 上帝造题的七分钟2

    3211: 花神游历各国 Time Limit: 5 Sec  Memory Limit: 128 MB Submit: 3438  Solved: 1277 [Submit][Status][Dis ...

  9. 洛谷P4145 上帝造题的⑦minutes ②

    又是线段树. 区间开平方求和,套路题. 如果开到了1就不用再开下去了,否则直接到底. 记得 l > r 时交换 l r 1 #include <cstdio> 2 #include ...

最新文章

  1. 1008: [HNOI2008]越狱(计数问题)
  2. python 爬虫 记录
  3. 内存分配函数 malloc、realloc、calloc
  4. 假设检验 Hypothesis testing
  5. boost::math::interpolators::cardinal_quadratic_b_spline用法的测试程序
  6. code ./打不开vscode编辑器
  7. Array | 74. Search a 2D Matrix
  8. 【转】Dicom中的Image Orientation/Position的理解
  9. 云端上的字节,引擎火力全开
  10. linux系统生成的新文件是什么编码的,Linux系统的默认编码怎样设置?
  11. matplotlib——3D图
  12. 围观Razavi和Sansen打架——电流并联反馈
  13. Whiteboard for mac(mac画图软件)
  14. 苹果笔记本访问服务器共享文件夹,mac查看win7共享文件怎么操作_mac如何访问win7共享文件夹-win7之家...
  15. 搜狗拼音linux 知乎,搜狗拼音知乎专版下载
  16. 系统地学习打字(个人见解)
  17. 一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法
  18. 济南近郊出游——线路指南
  19. 支付宝 实现 移动网页支付、PC网页支付、混合APP支付(支持微信支付)
  20. Flutter 开发中最实用的 Dart 语法知识

热门文章

  1. 这款NLP神器火了!关键词一键提取、结果高度可视化,堪称「小白进阶大神」的实用工具包 | 开源...
  2. 2020 IEEE冯诺依曼奖得主:Michael Jordan --机器学习领域泰斗级人物
  3. SAP PP 系统怎么知道某个工单release触发的过程中检验的检验类型是03?
  4. 读德鲁克的《管理的实践》,我才明白,这些年,我错过了什么
  5. PLM系统的成功实施
  6. SAP SD基础知识之装运的组织单元(Organizational Units in Shipping)
  7. 核心算法缺位,人工智能发展面临“卡脖子”窘境
  8. Python基础之函数2 (参数的返回值)
  9. SAP MM MI01事务代码里的批次确定
  10. SAP LSMW 导入物料主数据报错 - You have not fully maintained the descriptions - 之分析