洛谷P4145:https://www.luogu.org/problemnew/show/P4145

思路

这道题的重点在于sqrt(1)=1 一个限制条件

与正常线段树不同的是区间修改为开方

那么我们用一个数组记录每个区间的最大值 只有当这个区间的最大值大于1时才需要开方

因此 当我们更新到叶子节点时把每个区间的最大值和sum值开方即可

注意题目中说l可能大于r 要交换

代码

#include<iostream>
#include<cmath>
using namespace std;
#define ll long long
#define maxn 100010
ll sum[maxn<<2],Max[maxn<<2],a[maxn];
ll n,m;
void build(ll l,ll r,ll k)
{if(l==r){sum[k]=a[l];Max[k]=sum[k];//叶子节点    return;}ll mid=(l+r)>>1;build(l,mid,k<<1);build(mid+1,r,k<<1|1);sum[k]=sum[k<<1]+sum[k<<1|1];Max[k]=max(Max[k<<1],Max[k<<1|1]);//更新上层的值 return;
}
ll query(ll x,ll y,ll l,ll r,ll k)//常规询问
{if(x<=l&&r<=y) return sum[k];ll res=0;ll mid=(l+r)>>1;if(x<=mid) res+=query(x,y,l,mid,k<<1);if(y>mid) res+=query(x,y,mid+1,r,k<<1|1);return res;
}
void update(ll x,ll y,ll l,ll r,ll k)
{if(l==r)//叶子节点时
    {sum[k]=sqrt(sum[k]);Max[k]=sqrt(Max[k]);return;}ll mid=(l+r)>>1;if(x<=mid&&Max[k<<1]>1) update(x,y,l,mid,k<<1);//满足最大值大于1 if(y>mid&&Max[k<<1|1]>1) update(x,y,mid+1,r,k<<1|1);sum[k]=sum[k<<1]+sum[k<<1|1];//更新上层的值 Max[k]=max(Max[k<<1],Max[k<<1|1]);
}
int main()
{cin>>n;for(ll i=1;i<=n;i++) cin>>a[i];build(1,n,1);cin>>m;for(ll i=1;i<=m;i++){ll k,l,r;cin>>k>>l>>r;if(l>r)//交换
        {int temp;temp=l;l=r;r=temp;}if(k==0){update(l,r,1,n,1);}if(k==1){cout<<query(l,r,1,n,1)<<endl;}}
}

View Code

转载于:https://www.cnblogs.com/BrokenString/p/9762423.html

【题解】洛谷P4145 花神游历各国(线段树)相关推荐

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

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

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

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

  3. 洛谷 P3373 【模板】线段树 2 题解

    洛谷 P3373 [模板]线段树 2 题解 题面 题目链接:[戳这里](https://www.luogu.org/problemnew/show/P3373) 题目描述 输入输出格式 输入输出样例 ...

  4. 洛谷P3588 [POI2015]PUS(线段树优化建图)

    题面 传送门 题解 先考虑暴力怎么做,我们把所有\(r-l+1-k\)中的点向\(x\)连有向边,表示\(x\)必须比它们大,那么如果这张图有环显然就无解了,否则的话我们跑一个多源最短路,每个点的\( ...

  5. 洛谷P2221 [HAOI2012]高速公路(线段树+概率期望)

    传送门 首先,答案等于$$ans=\sum_{i=l}^r\sum_{j=i}^r\frac{sum(i,j)}{C_{r-l+1}^2}$$ 也就是说所有情况的和除以总的情况数 因为这是一条链,我们 ...

  6. 洛谷 P3372 【模板】线段树 1(线段树区间加区间找)

    题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某区间每一个数加上x 2.求出某区间每一个数的和 输入格式 第一行包含两个整数N.M,分别表示该数列数字的个数和操作的总个数. 第二行包含 ...

  7. 洛谷T44252 线索_分治线段树_思维题

    分治线段树,其实就是将标记永久化,到最后再统一下传所有标记. 至于先后顺序,可以给每个节点开一个时间戳. 一般地,分治线段树用于离线,只查询一次答案的题目. 本题中,标记要被下传 222 次. Cod ...

  8. [BZOJ5286][洛谷P4425][HNOI2018]转盘(线段树)

    5286: [Hnoi2018]转盘 Time Limit: 20 Sec  Memory Limit: 512 MB Submit: 15  Solved: 11 [Submit][Status][ ...

  9. 洛谷 P3372 【模板】线段树 1

    文章目录 题目描述 输入格式 输出格式 输入输出样例 说明 [样例解释] AC的C++代码(结合注释理解) 题目描述 如题,已知一个数列,你需要进行下面两种操作: 将某区间每一个数加上k. 求出某区间 ...

最新文章

  1. 在Mac上使用pip3安装python的数据统计模块实录
  2. js图表控件:highcharts的应用(二)
  3. 关于SAP 对生产订单的月度结算
  4. 干货 | 大白话彻底搞懂 HBase RowKey 详细设计
  5. winserver 服务开机启动
  6. 互联网公司分批返岗;Safari 将封杀超过398天的 HTTPS 证书;TypeScript 3.8 发布 | 极客头条...
  7. Linux快速查找库文件位置
  8. C数组 奇偶分开,奇前偶后
  9. 京东一面:如何用 Nginx 禁止国外 IP 访问网站,直接凉凉!
  10. Phase2 Day2 数组和链表
  11. 中科院SCI期刊分区(又称JCR期刊分区)知多少
  12. 《东周列国志》第二十回 晋献公违卜立骊姬 楚成王平乱相子文
  13. CSC申请成功经验(自动化到生物信息,德国KIT-CSC攻博)
  14. Centos7 使用cobbler搭建PXE网络装机服务器安装Centos、Windows、PE、自定义wim镜像
  15. 7.深入浅出:互补输出级——参考《模拟电子技术基础》清华大学华成英主讲
  16. DPad down是哪个键_上海crm系统哪个好_仓库erp管理
  17. 面试华为测试岗,收到offer后我却毫不犹豫拒绝了....
  18. 恶意驱动锁首手动处理的两种方法
  19. 调整oracle scn,调高SCN的方法
  20. 提取文件名--VBA代码分享

热门文章

  1. C++基础知识(一)—— C++程序结构
  2. CortexM0开发 —— LPC11C14的UART使用方法
  3. Source Insight(vs2012,ultraedit) 中Tab键设置为4个空格代替
  4. 获取硬盘总容量,柱面数,磁道数,扇区数
  5. uni-app微信小程序动态样式设置;微信小程序style行内式无效;微信小程序style行内式编译报错;微信小程序:style设置样式
  6. 什么是跨域?跨域如何解决
  7. 前端学习(3188):ant-design的icon图标
  8. [vue] 你期待vue3.0有什么功能或者改进的地方?
  9. 前端学习(2871):Vue路由权限『前后端全解析』2
  10. 前端学习(1843):前端面试题之vue管理状态