题意

秋实大哥是一个儒雅之人,昼听笙歌夜醉眠,若非月下即花前。

所以秋实大哥精心照料了很多花朵。现在所有的花朵排成了一行,每朵花有一个愉悦值。

秋实大哥每天要对着某一段连续的花朵歌唱,然后这些花朵的愉悦值都会增加一个相同的值v(v可能为负)。

同时他想知道每次他唱完歌后这一段连续的花朵的愉悦值总和是多少。


思路

模板题。

AC代码

  1. #include <cstdio>
  2. #include <cmath>
  3. #include <cctype>
  4. #include <bitset>
  5. #include <algorithm>
  6. #include <cstring>
  7. #include <utility>
  8. #include <string>
  9. #include <iostream>
  10. #include <map>
  11. #include <set>
  12. #include <vector>
  13. #include <queue>
  14. #include <stack>
  15. using namespace std;
  16. #pragma comment(linker, "/STACK:1024000000,1024000000")
  17. #define eps 1e-10
  18. #define inf 0x3f3f3f3f
  19. #define pii pair<int, int>
  20. typedef long long LL;
  21. const double PI = acos(-1.0);
  22. const int maxn = 1e5 + 5;
  23. int a[maxn];
  24. struct node{
  25. int l, r;
  26. LL sum, lazy;
  27. void update(int x) {
  28. sum += 1LL*(r-l+1)*x;
  29. lazy += x;
  30. }
  31. }tree[maxn*4];
  32. void push_up(int x) {
  33. tree[x].sum = tree[x<<1].sum + tree[x<<1|1].sum;
  34. }
  35. void push_down(int x) {
  36. int lazy = tree[x].lazy;
  37. if(lazy) {
  38. tree[x<<1].update(lazy);
  39. tree[x<<1|1].update(lazy);
  40. tree[x].lazy = 0;
  41. }
  42. }
  43. void build(int x, int l, int r) {
  44. tree[x].l = l, tree[x].r = r;
  45. tree[x].sum = tree[x].lazy = 0;
  46. if(l == r) {
  47. tree[x].sum = a[l];
  48. }
  49. else {
  50. int mid = (l+r) / 2;
  51. build(x<<1, l, mid);
  52. build(x<<1|1, mid+1, r);
  53. push_up(x);
  54. }
  55. }
  56. void update(int x, int l, int r, int val) {
  57. int L = tree[x].l, R = tree[x].r;
  58. if(l <= L && R <= r) {
  59. tree[x].update(val);
  60. }
  61. else {
  62. push_down(x);
  63. int mid = (L+R) / 2;
  64. if(mid >= l) update(x<<1, l, r, val);
  65. if(r > mid) update(x<<1|1, l, r, val);
  66. push_up(x);
  67. }
  68. }
  69. LL query(int x, int l, int r) {
  70. int L = tree[x].l, R = tree[x].r;
  71. if(l <= L && R <= r) return tree[x].sum;
  72. else {
  73. push_down(x);
  74. int mid = (L+R) / 2;
  75. LL ans = 0;
  76. if(mid >= l) ans += query(x<<1, l, r);
  77. if(r > mid) ans += query(x<<1|1, l, r);
  78. push_up(x);
  79. return ans;
  80. }
  81. }
  82. int main() {
  83. int n, q;
  84. while(scanf("%d", &n) == 1) {
  85. for(int i = 1; i <= n; ++i) scanf("%d", &a[i]);
  86. build(1, 1, n);
  87. scanf("%d", &q);
  88. int l, r, val;
  89. for(int i = 0; i < q; ++i) {
  90. scanf("%d%d%d", &l, &r, &val);
  91. update(1, l, r, val);
  92. printf("%lld\n", query(1, l, r));
  93. }
  94. }
  95. return 0;
  96. }

如有不当之处欢迎指出!

UESTC - 1057 秋实大哥与花 线段树的更多相关文章

  1. UESTC - 1057 秋实大哥与花 线段树模板题

    http://acm.uestc.edu.cn/#/problem/show/1057 题意:给你n个数,q次操作,每次在l,r上加上x并输出此区间的sum 题解:线段树模板, #define _CR ...

  2. CDOJ 1057 秋实大哥与花 线段树 区间更新+区间查询

    链接: I - 秋实大哥与花 Time Limit:1000MS     Memory Limit:65535KB     64bit IO Format:%lld & %llu Submit ...

  3. 2015 UESTC 数据结构专题B题 秋实大哥与花 线段树 区间加,区间查询和

    B - 秋实大哥与花 Time Limit: 1 Sec  Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/contest/show/59 De ...

  4. UESTC-1057 秋实大哥与花(线段树+成段加减+区间求和)

    秋实大哥与花 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit St ...

  5. UESTC 1061 秋实大哥与战争 线段树区间合并

    秋实大哥与战争 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) 男儿何不带吴钩, ...

  6. 2015 UESTC 数据结构专题E题 秋实大哥与家 线段树扫描线求矩形面积交

    E - 秋实大哥与家 Time Limit: 1 Sec  Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/contest/show/59 De ...

  7. 2015 UESTC 数据结构专题A题 秋实大哥与小朋友 线段树 区间更新,单点查询,离散化

    秋实大哥与小朋友 Time Limit: 1 Sec  Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/contest/show/59 Desc ...

  8. UESTC_秋实大哥与花 2015 UESTC Training for Data Structures<Problem B>

    B - 秋实大哥与花 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submi ...

  9. uestc 1073 秋实大哥与线段树 Label:线段树

    秋实大哥与线段树 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) “学习本无底, ...

随机推荐

  1. Linux指令--ps

    Linux中的ps命令是Process Status的缩写.ps命令用来列出系统中当前运行的那些进程.ps命令列出的是当前那些进程的快照,就是执行ps命令的那个时刻的那些进程,如果想要动态的显示进程信 ...

  2. mysql 列转行,合并字段

    数据表: 列转行:利用max(case when then) max---聚合函数 取最大值 (case course when '语文' then score else 0 end) ---判断   ...

  3. 【转】 SED多行模式空间

    1. sed执行模板=sed '模式{命令1;命令2}' 即逐行读入模式空间,执行命令,最后输出打印出来 2. 为方便下面,先说下p和P,p打印当前模式空间内容,追加到默认输出之后,P打印当前模式空间 ...

  4. VUE-node.js

    1.什么是node.js 它是可以运行javascript的服务平台        可以把它当做一门后端程序,只是它的开发语言是Javascript2.Python:自己创建的服务       php ...

  5. RMI基础篇

    远程方法调用(Remote Method Invocation,RMI)从JDK1.1就已经实现,它大大增强了Java开发分布式应用的能力. RMI可以实现通过网络完成不同JVM间的通信,不仅可以传递 ...

  6. HDU3488 Tour [有向环覆盖 费用流]

    Tour Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others)Total Submis ...

  7. ACE在windows下的编译及配置(VS2010)

    ACE在windows下的编译及配置(VS2010) 分类:             -[小西南]-              2013-08-06 16:17     2354人阅读     评论( ...

  8. LeetCode - 596. Classes More Than 5 Students

    There is a table courses with columns: student and class Please list out all classes which have more ...

  9. zabbix安装步骤

    第一步:安装环境 Zabbix要求的环境 组件 版本要求 Apache版本 1 .3.1 2 MySQL版本 5.0.3 PHP版本 5.4.0 本次安装的环境 组件 版本要求 操作系统 CentOS ...

  10. MacbookPro管理员问题

    更改用户名重启之后,发现用户名还是用户名,管理员权限降成了普通用户. 参考这个帖子改的用户名: https://zhidao.baidu.com/question/259845860.html 找回管 ...