传送门1
传送门2
写在前面:现在要干的事情更多了
思路:开方这玩意好像没法加lazy,只能暴力向下找,但是我们可以想到当有一段全是1的时候这一段一定不用再修改了,所以我们加一个判断这段区间是否全为1的标记,这样就能大大减少复杂度了,剩下就是狂敲代码了
注意:LL
代码:

#include<bits/stdc++.h>
#define LL long long
using namespace std;
int n,m;
LL a[100002];
struct os
{LL sum;bool f;
}tree[400002];
void build(int now,int begin,int end)
{if (begin==end) {tree[now].sum=a[end];return;}int mid=(begin+end)>>1;build(now<<1,begin,mid);build(now<<1|1,mid+1,end);tree[now].sum=tree[now<<1].sum+tree[now<<1|1].sum;
}
void update(int now,int begin,int end,int l,int r)
{if (tree[now].f) return;if (begin==end){tree[now].sum=sqrt(tree[now].sum);if (tree[now].sum<=1) tree[now].f=1;return;}int mid=(begin+end)>>1;if (mid>=l) update(now<<1,begin,mid,l,r);if (mid<r) update(now<<1|1,mid+1,end,l,r);tree[now].sum=tree[now<<1].sum+tree[now<<1|1].sum;tree[now].f=tree[now<<1].f&tree[now<<1|1].f;
}
LL get(int now,int begin,int end,int l,int r)
{if (l<=begin&&end<=r) return tree[now].sum;LL ans=0;int mid=(begin+end)>>1;if (mid>=l) ans+=get(now<<1,begin,mid,l,r);if (mid<r) ans+=get(now<<1|1,mid+1,end,l,r);return ans;
}
main()
{scanf("%d",&n);for (int i=1;i<=n;i++) scanf("%lld",&a[i]);build(1,1,n);scanf("%d",&m);int opt,x,y;while (m--){scanf("%d%d%d",&opt,&x,&y);if (x>y) swap(x,y);if (opt) printf("%lld\n",get(1,1,n,x,y));else update(1,1,n,x,y);}
}

【codevs2492】【Tyvj1941】上帝造题的七分钟2,线段树的特别技巧相关推荐

  1. 【BZOJ3132】【TYVJ1716】上帝造题的七分钟 二维树状数组

    题目大意 维护一个\(n\times m\)的矩阵,有两种操作: \(1~x_1~y_1~x_2~y_2~v\):把\((a,b),(c,d)\)为顶点的矩形区域内的所有数字加上\(v\). \(2~ ...

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

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

  3. BZOJ3038 上帝造题的七分钟

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

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

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

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

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

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

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

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

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

  8. 上帝造题的七分钟(ybtoj-树状数组)

    文章目录 题目描述 解析 代码 thanks for reading! 题目描述 解析 差点活活恶心死 搬砖题 (其实细节没有那么多,还是代码能力太差) 利用矩阵的二维差分 加上树状数组搞一搞 就完事 ...

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

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

最新文章

  1. gorm 密码字段隐藏_非常专业且免费的密码管理工具
  2. Spring(3.2.3) - Beans(11): depends-on
  3. python如何控制运行时间_python 限制函数执行时间,自己实现
  4. java读取邮箱附件_使用javamail获取附件内容
  5. 利用数组实现栈java,用java编写出来:用数组实现一个栈
  6. php中的解析范围符,PHP 范围解析操作符(::)用法分析【访问静态成员和类常量】...
  7. C Tricks(八)—— 硬币和骰子的模拟
  8. 自学python免费教材-python零基础自学教材
  9. g4600黑苹果efi_授人以鱼不如授人以渔,黑苹果EFI相关问题分析方法以及解决思路...
  10. 软件测试方法(单元测试、集成测试、系统测试、确认测试)
  11. 客户体验的投资回报率,你知道怎么算吗?
  12. 儿童智能手环方案/案列/APP/小程序/网站
  13. 什么是大数据以及大数据的相关技术?
  14. JAVA多线程同步计数器
  15. 学习笔记(5):JavaWeb基础核心技术-5. 佟刚_JavaWEB_Servlet 的配置及生命周期方法
  16. C# 模拟 HTTP POST请求
  17. 2019百度地图离线地图制作
  18. MyBatis之Base64加密数据源
  19. mysql自动备份脚本下载+简单解读
  20. java汉字转换拼音

热门文章

  1. 【Python成长之路】装逼的一行代码:快速共享文件【华为云分享】
  2. Docker集群管理之Swarm介绍
  3. 一统江湖的大前端(7)React.js-从开发者到工程师
  4. 一统江湖的大前端(4)shell.js——穿上马甲我照样认识你
  5. Android笔记 隐式意图vs显示意图+隐式意图打开短信应用demo
  6. -3dB下的正确率是100%!!!
  7. day4 数组的初始化和练习
  8. nodejs后端使用art-template
  9. java的interface_java中如何实现一个接口interface-百度经验
  10. scala模板写入es_Spark——scala 实用小方法