题解:

因为卡空间,所以直接到spoj上面去做了

区间修改的线段树

但是加lazy会把之前的操作修改

正确的解法是lazy不下传,只是在当前计算

但是听说可以记录时间的下传,我弱弱不会

代码:

  1. #include<cstdio>
  2. #include<cmath>
  3. #include<cstring>
  4. #include<algorithm>
  5. using namespace std;
  6. const int N=;
  7. typedef long long ll;
  8. struct aa
  9. {
  10. int lc,rc,l,r;
  11. ll add,sum;
  12. int len(){return r-l+;}
  13. }a[N*];
  14. int n,m,rt[N],time,tot,Time[N];
  15. void build(int &u,int l,int r)
  16. {
  17. u=++tot;
  18. a[u].l=l,a[u].r=r;
  19. if (l==r) {scanf("%lld",&a[u].sum);return;}
  20. int mid=(l+r)>>;
  21. build(a[u].lc,l,mid);
  22. build(a[u].rc,mid+,r);
  23. a[u].sum=a[a[u].lc].sum+a[a[u].rc].sum;
  24. }
  25. void insert(int &now,int old,int l,int r,ll d)
  26. {
  27. now=++tot;
  28. a[now]=a[old];
  29. if (a[old].l==l&&a[old].r==r)
  30. {
  31. a[now].add+=d;
  32. return;
  33. }
  34. a[now].sum+=d*(r-l+);
  35. int mid=(a[now].l+a[now].r)>>;
  36. if (r<=mid) insert(a[now].lc,a[old].lc,l,r,d);
  37. else if (mid<l) insert(a[now].rc,a[old].rc,l,r,d);
  38. else
  39. {
  40. insert(a[now].lc,a[old].lc,l,mid,d);
  41. insert(a[now].rc,a[old].rc,mid+,r,d);
  42. }
  43. }
  44. ll query(int u,int l,int r)
  45. {
  46. ll tmp=a[u].add*(r-l+);
  47. if (a[u].l==l&&a[u].r==r) return a[u].sum+tmp;
  48. int mid=(a[u].l+a[u].r)>>;
  49. if (r<=mid) return tmp+query(a[u].lc,l,r);
  50. else if (mid<l) return tmp+query(a[u].rc,l,r);
  51. return tmp+query(a[u].lc,l,mid)+query(a[u].rc,mid+,r);
  52. }
  53. int main()
  54. {
  55. scanf("%d%d",&n,&m);
  56. build(rt[],,n);
  57. time=;
  58. char ch[];
  59. int x,y,t;ll d;
  60. for (int i=;i<=m;i++)
  61. {
  62. scanf("%s",ch);
  63. if (ch[]=='C')
  64. {
  65. scanf("%d%d%lld",&x,&y,&d);
  66. time++;
  67. insert(rt[time],rt[time-],x,y,d);
  68. Time[time]=tot;
  69. }
  70. if (ch[]=='Q')
  71. {
  72. scanf("%d%d",&x,&y);
  73. printf("%lld\n",query(rt[time],x,y));
  74. }
  75. if (ch[]=='H')
  76. {
  77. scanf("%d%d%d",&x,&y,&t);
  78. printf("%lld\n",query(rt[t],x,y));
  79. }
  80. if (ch[]=='B')
  81. {
  82. scanf("%d",&time);
  83. tot=Time[time];
  84. }
  85. }
  86. return ;
  87. }

hdu4348的更多相关文章

  1. [HDU4348]To the moon(主席树+标记永久化)

    学可持久化treap的时候才发现自己竟然没写过需要标记下传的主席树,然而现在发现大部分操作都可以标记永久化,下传会增大占用空间. 这题一种写法是和普通的线段树一样标记下传,注意所有修改操作(包括put ...

  2. HDU4348 To the moon

    Time Limit: 2000MS   Memory Limit: 65536KB   64bit IO Format: %I64d & %I64u Description Backgrou ...

  3. 【主席树】【bzoj2161】[hdu4348]

    #include<cstdio> #include<algorithm> #include<cstring> #define N 400000 using name ...

  4. hdu4348 - To the moon 可持久化线段树 区间修改 离线处理

    法一:暴力! 让干什么就干什么,那么久需要可持久化线段树了. 但是空间好紧.怎么破? 不down标记好了! 每个点维护sum和add两个信息,sum是这段真实的和,add是这段整体加了多少,如果这段区 ...

  5. 【HDU4348】【主席树】To the moon

    Problem Description BackgroundTo The Moon is a independent game released in November 2011, it is a r ...

  6. 可持久化线段树——区间更新hdu4348

    和线段树类似,每个结点也要打lazy标记 但是lazy标记和线段树不一样 具体区别在于可持久化后lazy-tag不用往下传递,而是固定在这个区间并不断累加,变成了这个区间固有的性质(有点像分块的标记了 ...

  7. hdu4348区间更新的主席树+标记永久化

    http://acm.hdu.edu.cn/showproblem.php?pid=4348 sb的标记永久化即可,刚开始add和sum没复制过来wa了两发...,操作和原来的都一样,出来单点变成区间 ...

  8. HDU4348:To the moon

    浅谈主席树:https://www.cnblogs.com/AKMer/p/9956734.html 浅谈标记永久化:https://www.cnblogs.com/AKMer/p/10137227. ...

  9. [HDU4348]To the moon(主席树)

    传送门 对于这个题,显然要打lazy标记了,但是lazy标记pushdown的时候肯定会增加一大堆节点,然后就MLE了.(题解这么说的,我其实不会pushdown) 所以,就换另一种方式,把标记直接打 ...

随机推荐

  1. Python3基础 函数 可变参数,将传进来的参数转成列表

             Python : 3.7.0          OS : Ubuntu 18.04.1 LTS         IDE : PyCharm 2018.2.4       Conda ...

  2. Python3基础 file open+write 对不存在的txt进行创建与写入

             Python : 3.7.0          OS : Ubuntu 18.04.1 LTS         IDE : PyCharm 2018.2.4       Conda ...

  3. caffe深度学习网络(.prototxt)在线可视化工具:Netscope Editor

    http://ethereon.github.io/netscope/#/editor 网址:http://ethereon.github.io/netscope/#/editor 将.prototx ...

  4. UVa 1629 切蛋糕(记忆化搜索)

    https://vjudge.net/problem/UVA-1629 题意: 有一个n行m列的网格蛋糕上有一些樱桃.每次可以用一刀沿着网格线把蛋糕切成两块,并且只能直切不能拐弯.要求最后每一块蛋糕上 ...

  5. 数组类型的退化Decay

    Decay即数组在某些情况下将退化为指针. 测试代码: #include <iostream> #include <typeinfo> template <typenam ...

  6. 设置网站URL启动

    当新建一个MVC WEB程序 当你打开一个视图按F5运行 这时候并且不能政策运行会出现与个错误 无法找到资源. 这时候站点的默认设置是 把这个个默认设置更改成 红色框框的地方为修改点 你以为这样就完了 ...

  7. pandas时间序列分析和处理Timeseries

    pandas最基本的时间序列类型就是以时间戳(TimeStamp)为index元素的Series类型. 生成日期范围: pd.date_range()可用于生成指定长度的DatetimeIndex.参 ...

  8. STL_iterator返回值

    1. iterator的类型 有 单向的/双向的/可以随意移动的... 2. 一些 容器/算法 的返回值 是 iterator类型的,如何确定 返回的 iterator是什么类型的? 3.

  9. AES SBox的构造(python)

    几点需要注意的,求解逆元的时候使用的是拓展欧几里得,但是那些运算规则需要变一变,模2的加减乘除(或者可以理解为多项式的运算) 在进行字节的仿射变换不用进行矩阵的运算. 一个矩阵和一个列向量进行运算的时 ...

  10. 《A_Pancers》第一次作业:团队亮相

    一.团队及团队成员介绍 1> 队名:A_Pancers 2> 团队成员组成: 201571030310/龙正圆(小组长) 201571030329/杨环宇      20157103030 ...