题意:

有\(n(1 \leq n \leq 10^5)\)个数,和\(m(1 \leq m \leq 10^5)\)操作,和一个计算\(s\),一切运算都在模\(MOD\)进行的。

操作\(l, \, m\)表示先将区间\([l, r]\)的数字之和累加到\(s\)上,然后将区间的每个数平方。

输出每次操作后的\(s\)。

分析:

虽然原理不是特别懂,但是有这样一个事实:

任意一个数\(x\)平方超过\(30\)次之后再平方就不会变了。

所以我们维护区间和的同时,再维护一个区间平方次数的最小值。

如果这个区间都平方不少于\(30\)次,那么就不用更新了,因为整个区间的数都不会变。

  1. #include <cstdio>
  2. #include <cstring>
  3. #include <algorithm>
  4. using namespace std;
  5. typedef unsigned long long LL;
  6. const LL MOD = 9223372034707292160ULL;
  7. LL add(LL a, LL b) { a += b; if(a >= MOD) a -= MOD; return a; }
  8. LL mul(LL a, LL b) {
  9. LL ans = 0;
  10. while(b) {
  11. if(b & 1) ans = add(ans, a);
  12. a = add(a, a);
  13. b >>= 1;
  14. }
  15. return ans;
  16. }
  17. const int maxn = 100000 + 10;
  18. const int maxnode = maxn * 4;
  19. int n, m;
  20. LL sumv[maxnode], mcnt[maxnode], s;
  21. void build(int o, int L, int R) {
  22. if(L == R) {
  23. scanf("%llu", &sumv[o]);
  24. mcnt[o] = 0;
  25. return;
  26. }
  27. int M = (L + R) / 2;
  28. build(o<<1, L, M);
  29. build(o<<1|1, M+1, R);
  30. sumv[o] = add(sumv[o<<1], sumv[o<<1|1]);
  31. mcnt[o] = 0;
  32. }
  33. void query(int o, int L, int R, int qL, int qR) {
  34. if(qL <= L && R <= qR) {
  35. s = add(s, sumv[o]);
  36. return;
  37. }
  38. int M = (L + R) / 2;
  39. if(qL <= M) query(o<<1, L, M, qL, qR);
  40. if(qR > M) query(o<<1|1, M+1, R, qL, qR);
  41. }
  42. void update(int o, int L, int R, int qL, int qR) {
  43. if(mcnt[o] >= 30) return;
  44. if(L == R) {
  45. sumv[o] = mul(sumv[o], sumv[o]);
  46. mcnt[o]++;
  47. return;
  48. }
  49. int M = (L + R) / 2;
  50. if(qL <= M) update(o<<1, L, M, qL, qR);
  51. if(qR > M) update(o<<1|1, M+1, R, qL, qR);
  52. sumv[o] = add(sumv[o<<1], sumv[o<<1|1]);
  53. mcnt[o] = min(mcnt[o<<1], mcnt[o<<1|1]);
  54. }
  55. int main()
  56. {
  57. int T; scanf("%d", &T);
  58. for(int kase = 1; kase <= T; kase++) {
  59. printf("Case #%d:\n", kase);
  60. scanf("%d%d", &n, &m);
  61. build(1, 1, n);
  62. s = 0;
  63. while(m--) {
  64. int qL, qR; scanf("%d%d", &qL, &qR);
  65. query(1, 1, n, qL, qR);
  66. update(1, 1, n, qL, qR);
  67. printf("%llu\n", s);
  68. }
  69. }
  70. return 0;
  71. }

HDU 5239 Doom 线段树的更多相关文章

  1. hdu 4031 attack 线段树区间更新

    Attack Time Limit: 5000/3000 MS (Java/Others)    Memory Limit: 65768/65768 K (Java/Others)Total Subm ...

  2. hdu 4288 离线线段树+间隔求和

    Coder Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Su ...

  3. hdu 3016 dp+线段树

    Man Down Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total S ...

  4. hdu 5239 Doom(线段树)

    Doom Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 524288/524288 K (Java/Others)Total Sub ...

  5. HDU 5877 dfs+ 线段树(或+树状树组)

    1.HDU 5877  Weak Pair 2.总结:有多种做法,这里写了dfs+线段树(或+树状树组),还可用主席树或平衡树,但还不会这两个 3.思路:利用dfs遍历子节点,同时对于每个子节点au, ...

  6. HDU 3308 LCIS (线段树区间合并)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3308 题目很好懂,就是单点更新,然后求区间的最长上升子序列. 线段树区间合并问题,注意合并的条件是a[ ...

  7. HDU 2795 Billboard (线段树)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2795 题目大意:有一块h*w的矩形广告板,要往上面贴广告;   然后给n个1*wi的广告,要求把广告贴 ...

  8. hdu 5480 Conturbatio 线段树 单点更新,区间查询最小值

    Conturbatio Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=54 ...

  9. hdu 1828 Picture(线段树 || 普通hash标记)

    http://acm.hdu.edu.cn/showproblem.php?pid=1828 Picture Time Limit: 6000/2000 MS (Java/Others)    Mem ...

随机推荐

  1. A(光圈)S(快门) P(程序) M(手动)曝光模式

    摄影笔记:http://mp.weixin.qq.com/s/SCzXybbCCE8VzfAQKTqlDw 曝光模式,指的就是M档(手动曝光).A档(Av档,光圈优先).S档(Tv档,快门优先),Au ...

  2. Eclipse 主题(Theme)配置

    < 程序员大牛必备的装逼神器 > 一个牛逼的程序员,除了有牛逼的技术,还要有高逼格的风格,说白了,就和人一样,单是内在美还不行,必须外表也要美,就好比,一个乞丐,他内在美,但是全身臭气熏天 ...

  3. 提升Java代码质量(一)

    博主双12入手了一本"Effective Java第二版",本系列文章将初步梳理书中内容,我也查了些资料,我会针对知识点做一点展开,方便以后复习回顾; Item1.考虑用静态工厂代 ...

  4. 【转】HEIF图片存储格式探秘

    HEIF图片存储格式探秘 2017年12月11日 18:30:43 阅读数:891 HEIF,High Efficiency Image File Format,即高效率图档格式,是由动态图像专家组( ...

  5. 洛谷CF784E Twisted Circuit

    (本题本来可能也就普及难度但是硬生生给评成了一道NOI难度的紫题,有点无语...) 这道题目是一道愚人节题目,本来只有下面的电路图,结果翻译完之后难度就直接没了. ------------ 言归正传, ...

  6. (一)我的Javascript系列:Javascript的面向对象旅程(上)

    今宵酒醒何处,杨柳岸,晓风残月 导引 我的JavaScript系列文章是我自己对JavaScript语言的感悟所撰写的系列文章.现在还没有写完.目前一共出了下面的系列: (三)我的JavaScript ...

  7. allure使用简介

    #安装依赖包pip install requests_toolbeltpip install pyyamlpip install pytest-allure-adaptor #安装allure2 说明 ...

  8. win7下一直试用Beyond Compare 4

    找到目录C:\Users\用户名\AppData\Roaming\BeyondCompare,将这个目录删除,重启compare即可.

  9. VS开发软winform软件的更改用户使用权限

    在使用软件的过程中,我们经常需要使用的软件拥有管理员权限,在开发的过程中,本人就遇到了应为权限不足的问题导致软件不能正常使用的状况. 在此我来记录我遇到的问题. 为开发的软件赋予管理员权限 https ...

  10. 2018.4.19 远程服务器重装系统之后ssh无法登陆问题

    当我们重装云服务器系统的时候输入ssh连接命令(ssh dc2-user@116.85.25.15)出现一下代码 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ...