【SPOJ】2713 Can you answer these queries IV
操作:
1,把[x,y]每个数k变成sqrt(k),向下取整。
2,查询区间的和。
就算10^18,sqrt后减少的很快。
当一个数为0或1时,它不会再变化了,把不会变化的区间标记,不再访问。
所以暴力更新总的可以视为O(nlogn)的。
1 #include<cstdio> 2 #include<cmath> 3 #include<algorithm> 4 #define EPS 1e-8 5 #define MAXN 100010 6 typedef long long LL; 7 using namespace std; 8 struct node { 9 LL sum; 10 bool flag; 11 }; 12 node tree[MAXN << 2]; 13 inline void PushUp(int rt) { 14 tree[rt].sum = tree[rt << 1].sum + tree[rt << 1 | 1].sum; 15 tree[rt].flag = tree[rt << 1].flag & tree[rt << 1 | 1].flag; 16 } 17 void Build(int L, int R, int rt) { 18 if (L == R) { 19 scanf("%lld", &tree[rt].sum); 20 if (tree[rt].sum == 1 || tree[rt].sum == 0) 21 tree[rt].flag = true; 22 else 23 tree[rt].flag = false; 24 } else { 25 int mid = (L + R) >> 1; 26 Build(L, mid, rt << 1); 27 Build(mid + 1, R, rt << 1 | 1); 28 PushUp(rt); 29 } 30 } 31 LL Query(int x, int y, int L, int R, int rt) { 32 if (x <= L && R <= y) 33 return tree[rt].sum; 34 int mid = (L + R) >> 1; 35 LL ans = 0; 36 if (x <= mid) 37 ans += Query(x, y, L, mid, rt << 1); 38 if (y > mid) 39 ans += Query(x, y, mid + 1, R, rt << 1 | 1); 40 return ans; 41 } 42 void Update(int x, int y, int L, int R, int rt) { 43 if (tree[rt].flag) 44 return; 45 if (L == R) { 46 tree[rt].sum = (LL) (sqrt((double) tree[rt].sum) + EPS); 47 if (tree[rt].sum == 1) 48 tree[rt].flag = true; 49 } else { 50 int mid = (L + R) >> 1; 51 if (x <= mid) 52 Update(x, y, L, mid, rt << 1); 53 if (y > mid) 54 Update(x, y, mid + 1, R, rt << 1 | 1); 55 PushUp(rt); 56 } 57 } 58 int main() { 59 int ca = 1; 60 int n, q, cmd, x, y; 61 while (~scanf("%d", &n)) { 62 printf("Case #%d:\n", ca++); 63 Build(1, n, 1); 64 scanf("%d", &q); 65 while (q--) { 66 scanf("%d%d%d", &cmd, &x, &y); 67 if (x > y) 68 swap(x, y); 69 if (cmd) 70 printf("%lld\n", Query(x, y, 1, n, 1)); 71 else 72 Update(x, y, 1, n, 1); 73 } 74 putchar('\n'); 75 } 76 return 0; 77 }
转载于:https://www.cnblogs.com/DrunBee/archive/2012/08/29/2661516.html
【SPOJ】2713 Can you answer these queries IV相关推荐
- 【线段树】 SPOJ 2713 Can you answer these queries IV
更新操作:一段区间内的全部数开根号 查询操作:一段区间内的sum值 在一个值更新操作十几次之后会变成 1 之后就不需要再更新这段了 所以在update 某个区间 r-l+1==sum[rt] j就re ...
- 【SPOJ】Count On A Tree II(树上莫队)
[SPOJ]Count On A Tree II(树上莫队) 题面 洛谷 Vjudge 洛谷上有翻译啦 题解 如果不在树上就是一个很裸很裸的莫队 现在在树上,就是一个很裸很裸的树上莫队啦. #incl ...
- 【SPOJ】Power Modulo Inverted(拓展BSGS)
[SPOJ]Power Modulo Inverted(拓展BSGS) 题面 洛谷 求最小的\(y\) 满足 \[k\equiv x^y(mod\ z)\] 题解 拓展\(BSGS\)模板题 #inc ...
- 【SPOJ】2319 BIGSEQ - Sequence
[算法]数位DP [题解]动态规划 题目要求的是大整数--没办法只写了小数字的,感觉应该没错. 大题框架是最大值最小化的二分问题. 对于每一块要求count(b)-count(a-1)≥s 已知a如何 ...
- 【SPOJ】7258. Lexicographical Substring Search(后缀自动机)
http://www.spoj.com/problems/SUBLEX/ 后缀自动机系列完成QAQ...撒花..明天or今晚写个小结? 首先得知道:后缀自动机中,root出发到任意一个状态的路径对应一 ...
- 【BZOJ2780】【SPOJ】Sevenk Love Oimaster(广义后缀自动机)
Description 有n个大串和m个询问,每次给出一个字符串s询问在多少个大串中出现过. Solution 广义后缀自动机入门题. 其实就是在插入一个串后将last设为root即可. 然后统计每个 ...
- 【线段树】GSS5 - Can you answer these queries V(luogu-SPOJ 2916)
正题 luogu-SPOJ 2916 题目大意 给你一个序列,有若干询问,每次给出左右端点的区间,问你最大字段和 解题思路 用线段树维护区间信息,询问的区间如果有交则分类讨论求解 code #incl ...
- 【原】YUI压缩与CSS media queries下的bug
大概是上个月,使用YUI压缩一个css文件后,发现只要是被压缩后的css文件有部分根本无法工作,一直都不知啥问题引起的,让我感到头疼. 今天发现了只要是在媒体查询中的样式无法起作用,于是才开始怀疑是m ...
- 【动态规划】状态机模型:买卖股票的最佳时机 IV
买卖股票的最佳时机 IV 如果有n天,那么 一共要走n条线段.w[i] 表示 第i天 收益为 w[i]. 交易一次,相当于从0->1->0走一圈,交易k次,一共要走k圈. f[i][j]: ...
最新文章
- 为什么Python不是未来的编程语言?
- 步步为营-20-XML
- FPFH+ICP点云配准
- 解决: Caused by: java.lang.IllegalStateException: Cannot load driver class: com.mysql.jdbc.Driver
- java执行内存_java运行时内存
- linux下tomcat启动后出现多个java进程
- 【渝粤题库】陕西师范大学164210 冲突与沟通管理 作业 (专升本)
- oracle条件索引查询,Oracle复合索引用于范围查询条件
- SQL语句 操作实例
- Android马甲包封装上架
- android 启动视频,android 启动页面全屏播放视频
- 2020-10-22 css画八边形等
- 百亿题典之C++编程题面试题
- 常用数据库默认端口号
- OpenNI的安装与开发环境配置
- php自动内链处理速度慢,织梦关键词自动内链、php5.5以上失效问题解决方法
- 商业银行、信托、券商等金融机构与融资租赁的合作模式解析
- Acrylamide-PEG-Thiol,ACA-PEG-SH,丙烯酰胺-聚乙二醇-巯基线性双功能PEG试剂
- 物联网网格:避免物联网碎片化的起点(下)
- 淘宝运营 动销率 售罄率两者区别 以及优化方案
热门文章
- 干掉ubuntu中的overlay scrollbar
- C语言基础教程读书笔记2(第二章常量、变量、类型转换)
- oracle关于分区,关于Oracle分区
- tab键怎么关闭_C/C++应用无障碍化如何支持Tab键浏览
- 安装的python没有菜单栏_由非root用户安装python包/工具
- ios用的什么编译器编译_您最喜欢什么编译器?
- linux桌面xfce美化_Xfce Linux桌面环境,Arduino机器人,热门DevOps书籍,FreeDOS,Python,Go等
- 如何训练您的医生...使用开源
- JavaScript深度迭代遍历未知对象
- Bootstrap导航条所支持的组件