HDU - 4348 To the moon
题意:
长度为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相关推荐
- hdu 4348 To the moon (主席树)
版权声明:本文为博主原创文章,未经博主允许不得转载. hdu 4348 题意: 一个长度为n的数组,4种操作 : (1)C l r d:区间[l,r]中的数都加1,同时当前的时间戳加1 . (2)Q ...
- HDU - 4348 To the moon(主席树区间更新-标记永久化)
题目链接:点击查看 题目大意:给出一个初始时长度为 n 的序列,有 m 次操作,每种操作分为下列四种类型: C l r d:新建一个继承了前一个版本的数组,并将区间 [ l , r ] 内的数字都加上 ...
- HDU 4348 To the moon
HDU_4348 用可持久化线段树就可以实现O(1)的back操作,同时如果想效率比较高的话,推荐用单点修改+区间查询的模式替代下传标记的区间修改+区间查询的模式来完成对区间和的查询. 至于如何不下传 ...
- HDU 4348 To the moon(主席树区间修改)
题意 给你一个区间,支持如下操作: 在一段区间内加上一个值,并生成一个历史版本 查询某个版本下一段区间内的和 回到一个历史版本上并舍弃之后的版本 做法 这就是主席树区间修改裸题啦QwQ 上一篇博客我讲 ...
- HDU 4383 To The Moon 解题报告
HDU 4383 To The Moon 题意翻译 已知一个长为\(n\)的序列\(a\),你需要进行下面的四种操作. C l r d 将区间\([l,r]\)中的数加上\(d\),同时时间加\(1\ ...
- 【HDU - 4348】To the moon(主席树,区间更新)
题干: Background To The Moon is a independent game released in November 2011, it is a role-playing ad ...
- 【HDU - 6558】The Moon(期望dp)
题干: Random Six is a FPS game made by VBI(Various Bug Institution). There is a gift named "Beta ...
- CSU-ACM集训-模板-主席树
原hdu 2665 Kth number 题意 给\(n\)个数和\(m\)次查询,每个查询包含区间\([x,y]\),求区间内第\(K\)大的数 思路 可持久化线段树,即主席树,第一次建立一个空的线 ...
- [kuangbin]各种各样的题单
[kuangbin]各种各样的题单 专题1 简单搜索 POJ 1321 POJ 2251 POJ 3278 POJ 3279 POJ 1426 POJ 3126 POJ 3087 POJ 3414 F ...
最新文章
- python图像中如何显示中文
- 【Java学习笔记】字符串和Date的转换
- html背景图片尺寸位置百分比,css – 如何计算背景大小百分比?
- 带你了解Python炫酷的颜色输出与进度条打印
- 通过 NPOI 生成 Excel
- Pulseaudio之meson编译(十二)
- Atitit 作用域的理解attilax总结 1.1. 作用域是指对某一变量和方法具有访问权限的代码空间,	1 1.2. 作用域的使用提高了程序逻辑的局部性,增强程序的可靠性,减少名字冲突。	1 1
- 详述差分进化算法(DE)代码复现
- 广州地铁公厕(洗手间)和母婴室信息汇总
- Windows查看开关机记录
- B站收藏夹快速导出详细步骤
- word中html在哪,如何word中显示部分的域代码在哪
- 深圳计算机免考申请在哪,深圳自考申请免考要什么条件
- 如何让自己像打游戏一样发了疯、拼了命、石乐志的学习或者工作?
- 码云联合实训邦推出高校软件工程视频实训课程
- MMA-符号学运算的奥妙
- python操作pdf与图片相互转换
- xampp mysql ssl_xampp搭建https服务器
- ZIP压缩算法原理解析(好文推荐,看完就懂)
- Dubbo分布式服务框架入门(附工程)
热门文章
- 信息学奥赛一本通(C++)在线评测系统——基础(一)C++语言——1071:菲波那契数
- 【Qt】数据库实战(三)
- 【Tools】MarkDown教程(四)-MarkDown中的UML图
- 【内核驱动】 内核驱动中添加系统调用
- 【Linux网络编程】原始套接字实例:MAC 头部报文分析
- 抛出错误_如何找到抛出ORA00933错误的SQL
- Spring Boot WebMagic 入库时 mapper注入提示空指针,以及正确的操作
- 【算法】Dijkstra算法(单源最短路径问题) 邻接矩阵和邻接表实现
- 数据库原理学习笔记(二)数据库范式
- Apache(3)——配置文件里的各参数(1)