操作:

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相关推荐

  1. 【线段树】 SPOJ 2713 Can you answer these queries IV

    更新操作:一段区间内的全部数开根号 查询操作:一段区间内的sum值 在一个值更新操作十几次之后会变成 1 之后就不需要再更新这段了 所以在update 某个区间 r-l+1==sum[rt] j就re ...

  2. 【SPOJ】Count On A Tree II(树上莫队)

    [SPOJ]Count On A Tree II(树上莫队) 题面 洛谷 Vjudge 洛谷上有翻译啦 题解 如果不在树上就是一个很裸很裸的莫队 现在在树上,就是一个很裸很裸的树上莫队啦. #incl ...

  3. 【SPOJ】Power Modulo Inverted(拓展BSGS)

    [SPOJ]Power Modulo Inverted(拓展BSGS) 题面 洛谷 求最小的\(y\) 满足 \[k\equiv x^y(mod\ z)\] 题解 拓展\(BSGS\)模板题 #inc ...

  4. 【SPOJ】2319 BIGSEQ - Sequence

    [算法]数位DP [题解]动态规划 题目要求的是大整数--没办法只写了小数字的,感觉应该没错. 大题框架是最大值最小化的二分问题. 对于每一块要求count(b)-count(a-1)≥s 已知a如何 ...

  5. 【SPOJ】7258. Lexicographical Substring Search(后缀自动机)

    http://www.spoj.com/problems/SUBLEX/ 后缀自动机系列完成QAQ...撒花..明天or今晚写个小结? 首先得知道:后缀自动机中,root出发到任意一个状态的路径对应一 ...

  6. 【BZOJ2780】【SPOJ】Sevenk Love Oimaster(广义后缀自动机)

    Description 有n个大串和m个询问,每次给出一个字符串s询问在多少个大串中出现过. Solution 广义后缀自动机入门题. 其实就是在插入一个串后将last设为root即可. 然后统计每个 ...

  7. 【线段树】GSS5 - Can you answer these queries V(luogu-SPOJ 2916)

    正题 luogu-SPOJ 2916 题目大意 给你一个序列,有若干询问,每次给出左右端点的区间,问你最大字段和 解题思路 用线段树维护区间信息,询问的区间如果有交则分类讨论求解 code #incl ...

  8. 【原】YUI压缩与CSS media queries下的bug

    大概是上个月,使用YUI压缩一个css文件后,发现只要是被压缩后的css文件有部分根本无法工作,一直都不知啥问题引起的,让我感到头疼. 今天发现了只要是在媒体查询中的样式无法起作用,于是才开始怀疑是m ...

  9. 【动态规划】状态机模型:买卖股票的最佳时机 IV

    买卖股票的最佳时机 IV 如果有n天,那么 一共要走n条线段.w[i] 表示 第i天 收益为 w[i]. 交易一次,相当于从0->1->0走一圈,交易k次,一共要走k圈. f[i][j]: ...

最新文章

  1. 为什么Python不是未来的编程语言?
  2. 步步为营-20-XML
  3. FPFH+ICP点云配准
  4. 解决: Caused by: java.lang.IllegalStateException: Cannot load driver class: com.mysql.jdbc.Driver
  5. java执行内存_java运行时内存
  6. linux下tomcat启动后出现多个java进程
  7. 【渝粤题库】陕西师范大学164210 冲突与沟通管理 作业 (专升本)
  8. oracle条件索引查询,Oracle复合索引用于范围查询条件
  9. SQL语句 操作实例
  10. Android马甲包封装上架
  11. android 启动视频,android 启动页面全屏播放视频
  12. 2020-10-22 css画八边形等
  13. 百亿题典之C++编程题面试题
  14. 常用数据库默认端口号
  15. OpenNI的安装与开发环境配置
  16. php自动内链处理速度慢,织梦关键词自动内链、php5.5以上失效问题解决方法
  17. 商业银行、信托、券商等金融机构与融资租赁的合作模式解析
  18. Acrylamide-PEG-Thiol,ACA-PEG-SH,丙烯酰胺-聚乙二醇-巯基线性双功能PEG试剂
  19. 物联网网格:避免物联网碎片化的起点(下)
  20. 淘宝运营 动销率 售罄率两者区别 以及优化方案

热门文章

  1. 干掉ubuntu中的overlay scrollbar
  2. C语言基础教程读书笔记2(第二章常量、变量、类型转换)
  3. oracle关于分区,关于Oracle分区
  4. tab键怎么关闭_C/C++应用无障碍化如何支持Tab键浏览
  5. 安装的python没有菜单栏_由非root用户安装python包/工具
  6. ios用的什么编译器编译_您最喜欢什么编译器?
  7. linux桌面xfce美化_Xfce Linux桌面环境,Arduino机器人,热门DevOps书籍,FreeDOS,Python,Go等
  8. 如何训练您的医生...使用开源
  9. JavaScript深度迭代遍历未知对象
  10. Bootstrap导航条所支持的组件