题意:

  长度为N的序列,初始时间戳为0,有M次操作。

  C l r d:代表区间[l, r]的数加d,当前时间戳加1.

  Q l r:代表输出当前时间戳内[l, r]的区间和.

  H l r t:代表输出时间戳为t时[l, r]的区间和.

  B t:代表把时间戳置为t.

题解:

  先初始化一棵带lazy线段树,之后就是主席树的做法,查询就是线段树区间求和操作。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
using namespace std;
const int maxn = 1e5+10;
typedef long long ll;
int n, m;
int w[maxn];
int tot, tim;
int root[maxn];
int l, r, t;
char s[5];
struct node {int l, r, lazy;ll sum;
}tre[maxn*40];
void build(int l, int r, int &x) {x = ++tot;tre[x].lazy = 0;if(l==r) {scanf("%lld", &tre[x].sum);return ;}int mid = l+r>>1;build(l, mid, tre[x].l);build(mid+1, r, tre[x].r);tre[x].sum = tre[tre[x].l].sum+tre[tre[x].r].sum;return ;
}
void update(int l, int r, int &x, int y, int ql, int qr, int val) {tre[++tot] = tre[y];tre[tot].sum += 1ll*(qr-ql+1)*val;x = tot;if(l==ql&&qr==r) {tre[x].lazy += val;return ;}int mid = l+r>>1;if(qr<=mid) update(l, mid, tre[x].l, tre[y].l, ql, qr, val);else if(ql>mid) update(mid+1, r, tre[x].r, tre[y].r, ql, qr, val);else {update(l, mid, tre[x].l, tre[y].l, ql, mid, val);update(mid+1, r, tre[x].r, tre[y].r, mid+1, qr, val);}
}
ll query(int l, int r, int x, int ql, int qr) {if(ql==l&&qr==r) return tre[x].sum;int mid = l+r>>1;ll res = 1ll*(qr-ql+1)*tre[x].lazy;if(qr<=mid) res += query(l, mid, tre[x].l, ql, qr);else if(ql>mid) res += query(mid+1, r, tre[x].r, ql, qr);else res += query(l, mid, tre[x].l, ql, mid)+query(mid+1, r, tre[x].r, mid+1, qr);return res;
}
int main() {int f = 0;while(~scanf("%d%d", &n, &m)) {if(f) puts("");f++;tim = tot = 0;build(1, n, root[0]);for(int i = 1; i <= m; i++) {scanf("%s", s);if(s[0]=='C') scanf("%d%d%d", &l, &r, &t), update(1, n, root[++tim], root[tim-1], l, r, t);if(s[0]=='Q') scanf("%d%d", &l, &r), printf("%lld\n", query(1, n, root[tim], l, r));if(s[0]=='H') scanf("%d%d%d", &l, &r, &t), printf("%lld\n", query(1, n, root[t], l, r));if(s[0]=='B') scanf("%d", &tim);}}
}

View Code

转载于:https://www.cnblogs.com/Pneuis/p/8993014.html

HDU - 4348 To the moon相关推荐

  1. hdu 4348 To the moon (主席树)

    版权声明:本文为博主原创文章,未经博主允许不得转载. hdu 4348 题意: 一个长度为n的数组,4种操作 : (1)C l r d:区间[l,r]中的数都加1,同时当前的时间戳加1 . (2)Q ...

  2. HDU - 4348 To the moon(主席树区间更新-标记永久化)

    题目链接:点击查看 题目大意:给出一个初始时长度为 n 的序列,有 m 次操作,每种操作分为下列四种类型: C l r d:新建一个继承了前一个版本的数组,并将区间 [ l , r ] 内的数字都加上 ...

  3. HDU 4348 To the moon

    HDU_4348 用可持久化线段树就可以实现O(1)的back操作,同时如果想效率比较高的话,推荐用单点修改+区间查询的模式替代下传标记的区间修改+区间查询的模式来完成对区间和的查询. 至于如何不下传 ...

  4. HDU 4348 To the moon(主席树区间修改)

    题意 给你一个区间,支持如下操作: 在一段区间内加上一个值,并生成一个历史版本 查询某个版本下一段区间内的和 回到一个历史版本上并舍弃之后的版本 做法 这就是主席树区间修改裸题啦QwQ 上一篇博客我讲 ...

  5. HDU 4383 To The Moon 解题报告

    HDU 4383 To The Moon 题意翻译 已知一个长为\(n\)的序列\(a\),你需要进行下面的四种操作. C l r d 将区间\([l,r]\)中的数加上\(d\),同时时间加\(1\ ...

  6. 【HDU - 4348】To the moon(主席树,区间更新)

    题干: Background  To The Moon is a independent game released in November 2011, it is a role-playing ad ...

  7. 【HDU - 6558】The Moon(期望dp)

    题干: Random Six is a FPS game made by VBI(Various Bug Institution). There is a gift named "Beta ...

  8. CSU-ACM集训-模板-主席树

    原hdu 2665 Kth number 题意 给\(n\)个数和\(m\)次查询,每个查询包含区间\([x,y]\),求区间内第\(K\)大的数 思路 可持久化线段树,即主席树,第一次建立一个空的线 ...

  9. [kuangbin]各种各样的题单

    [kuangbin]各种各样的题单 专题1 简单搜索 POJ 1321 POJ 2251 POJ 3278 POJ 3279 POJ 1426 POJ 3126 POJ 3087 POJ 3414 F ...

最新文章

  1. python图像中如何显示中文
  2. 【Java学习笔记】字符串和Date的转换
  3. html背景图片尺寸位置百分比,css – 如何计算背景大小百分比?
  4. 带你了解Python炫酷的颜色输出与进度条打印
  5. 通过 NPOI 生成 Excel
  6. Pulseaudio之meson编译(十二)
  7. Atitit 作用域的理解attilax总结 1.1. 作用域是指对某一变量和方法具有访问权限的代码空间, 1 1.2. 作用域的使用提高了程序逻辑的局部性,增强程序的可靠性,减少名字冲突。 1 1
  8. 详述差分进化算法(DE)代码复现
  9. 广州地铁公厕(洗手间)和母婴室信息汇总
  10. Windows查看开关机记录
  11. B站收藏夹快速导出详细步骤
  12. word中html在哪,如何word中显示部分的域代码在哪
  13. 深圳计算机免考申请在哪,深圳自考申请免考要什么条件
  14. 如何让自己像打游戏一样发了疯、拼了命、石乐志的学习或者工作?
  15. 码云联合实训邦推出高校软件工程视频实训课程
  16. MMA-符号学运算的奥妙
  17. python操作pdf与图片相互转换
  18. xampp mysql ssl_xampp搭建https服务器
  19. ZIP压缩算法原理解析(好文推荐,看完就懂)
  20. Dubbo分布式服务框架入门(附工程)

热门文章

  1. 信息学奥赛一本通(C++)在线评测系统——基础(一)C++语言——1071:菲波那契数
  2. 【Qt】数据库实战(三)
  3. 【Tools】MarkDown教程(四)-MarkDown中的UML图
  4. 【内核驱动】 内核驱动中添加系统调用
  5. 【Linux网络编程】原始套接字实例:MAC 头部报文分析
  6. 抛出错误_如何找到抛出ORA00933错误的SQL
  7. Spring Boot WebMagic 入库时 mapper注入提示空指针,以及正确的操作
  8. 【算法】Dijkstra算法(单源最短路径问题) 邻接矩阵和邻接表实现
  9. 数据库原理学习笔记(二)数据库范式
  10. Apache(3)——配置文件里的各参数(1)