Description

XLk觉得《上帝造题的七分钟》不太过瘾,于是有了第二部。 “第一分钟,X说,要有数列,于是便给定了一个正整数数列。
第二分钟,L说,要能修改,于是便有了对一段数中每个数都开平方(下取整)的操作。 第三分钟,k说,要能查询,于是便有了求一段数的和的操作。
第四分钟,彩虹喵说,要是noip难度,于是便有了数据范围。 第五分钟,诗人说,要有韵律,于是便有了时间限制和内存限制。
第六分钟,和雪说,要省点事,于是便有了保证运算过程中及最终结果均不超过64位有符号整数类型的表示范围的限制。
第七分钟,这道题终于造完了,然而,造题的神牛们再也不想写这道题的程序了。”
——《上帝造题的七分钟·第二部》
所以这个神圣的任务就交给你了。

Input

第一行一个整数n,代表数列中数的个数。
第二行n个正整数,表示初始状态下数列中的数。
第三行一个整数m,表示有m次操作。
接下来m行每行三个整数k,l,r,k=0表示给[l,r]中的每个数开平方(下取整),k=1表示询问[l,r]中各个数的和。

Output

对于询问操作,每行输出一个回答。

Sample Input

10

1 2 3 4 5 6 7 8 9 10

5

0 1 10

1 1 10

1 1 5

0 5 8

1 4 8

Sample Output

19

7

6

HINT

1:对于100%的数据,1<=n<=100000,1<=l<=r<=n,数列中的数大于0,且不超过1e12。

2:数据不保证L<=R 若L>R,请自行交换L,R,谢谢!

Source

Poetize4

线段树区间开根……操作时只需要检验一下区间内是否全为一,若全为一,则不做操作;否则,单点开根。
不过……论仔细读题的重要性。注意数据范围和不保证l <= r!

#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
typedef long long LL;
const int SZ = 200010;struct SGT
{int l, r;LL sum;
}tree[SZ << 2];
LL num[200010];void update(int now)
{tree[now].sum = tree[now << 1].sum + tree[now << 1 | 1].sum;return ;
}void build(int now, int l, int r)
{tree[now].l = l;tree[now].r = r;if(l == r){tree[now].sum = num[l];return ;}int mid = (l + r) >> 1;build(now << 1, l, mid);build(now << 1 | 1, mid + 1, r);update(now);return ;
}void C(int now, int l, int r)
{if(tree[now].l == tree[now].r){tree[now].sum = sqrt(tree[now].sum);return ;}   update(now);int mid = (tree[now].l + tree[now].r) >> 1;C(now << 1, l, r);C(now << 1 | 1, l, r);update(now);return;
}void change(int now, int l, int r)
{if(l <= tree[now].l && tree[now].r <= r){if(tree[now].r - tree[now].l + 1 == tree[now].sum) return ;C(now, l, r);return;}update(now);int mid = (tree[now].l + tree[now].r) >> 1;if(l <= mid) change(now << 1, l, r);if(r > mid) change(now << 1 | 1, l, r);update(now);
}LL Ask(int now, int l, int r)
{if(l <= tree[now].l && tree[now].r <= r)return tree[now].sum;update(now);int mid = (tree[now].l + tree[now].r) >> 1;LL ans = 0;if(l <= mid) ans += Ask(now << 1, l, r);if(r > mid) ans += Ask(now << 1 | 1, l, r);return ans;
}int main()
{int n, m;scanf("%d", &n);for(int i = 1; i <= n; i++)scanf("%lld", &num[i]);build(1, 1, n);scanf("%d", &m);int op, l, r;for(int i = 1; i <= m; i++){scanf("%d%d%d", &op, &l, &r);if(l > r) swap(l, r); if(op == 1) printf("%lld\n", Ask(1, l, r));else change(1, l, r);}return 0;
}

转载于:https://www.cnblogs.com/Loi-Vampire/p/6017042.html

BZOJ 3038 上帝造题的七分钟2相关推荐

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

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

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

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

  3. BZOJ 3132 上帝造题的七分钟(二维树状数组)

    题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=3132 题意:给出一个矩阵,两种操作:(1)将某个子矩阵的数字统一加上某个值:(2)查询某 ...

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

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

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

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

  6. BZOJ3038 上帝造题的七分钟

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

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

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

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

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

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

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

最新文章

  1. 2022-2028年中国数字乡村建设深度调研及投资前景预测报告
  2. 要活102年,阿里凭借的是什么?
  3. 提高代码性能及并发性的方法浅谈
  4. f1 score 代码_腾讯广告算法大赛冠军代码解读:稠密特征工程
  5. linux添加驱动目录,Android系统添加Linux驱动
  6. 鲍鱼的“几头”是什么意思?什么样的好吃?
  7. 2015/8/26 Python基础(1):基本规则及赋值
  8. uniapp延迟执行_uni-app android 调试运行首页一直卡在加载中
  9. AdvancedWindowsPasswordRecovery3 及 注册码
  10. Java权限管理系统
  11. 人脸识别库Dlib介绍
  12. 通达OA2008从windows环境移植到linux部署手册
  13. 计算机毕业设计-SSM企业OA管理系统-JavaWeb企业OA管理系统
  14. 责任链模式实现及在Filter中的应用
  15. 听课记录高中计算机,中学信息技术听课记录
  16. html移动轮播后盾网,后盾网lavarel视频项目---Vue项目使用vue-awesome-swiper轮播插件...
  17. 深度学习 - 其本质是什么?
  18. 《数据库系统概念》——关系数据库
  19. 【Vue】Vue-cli(脚手架)的目录结构详解(转载)
  20. unity shader 实现Ps的 19号笔刷厚涂阴影效果

热门文章

  1. CVPR2005【行人检测】HOG+SVM用于人体检测的梯度方向直方图
  2. c语言mysql 学生信息管理系统_学生信息管理系统学生时代小作品源码(C语言版)...
  3. Python 开发者 2017 应该关注的 7 个类库
  4. java list 取几个字段组装成map_java.util.concurrent 并发包诸类概览
  5. thinkphp漏洞_漏洞分析之thinkPHP反序列化:这就是黑客的世界吗
  6. java封装需要多久_Java对时间操作的一些封装函数
  7. 如何使用 Convert.exe 将分区转换为 NTFS 文件系统
  8. 自己动手写操作系统(二)一个最小的“操作系统”
  9. HOST 头攻击漏洞
  10. JavaScript tip