「SPOJ TTM 」To the moon「标记永久化」
题意
概括为主席树区间加区间询问
题解
记录一下标记永久化的方法。每个点存add
和sum
两个标记,表示这个区间整个加多少,区间和是多少(这个区间和不包括祖先结点区间加)
然后区间加的时候,给路上每结点的sum
更新,然后到达完整区间后更新add
。询问的时候把路径上所有结点(不包括自己)的add
加起来乘以区间长度,再加上sum
大概思想就是:区间内的加法用sum
维护,区间外的加法询问的时候再考虑贡献
#include <algorithm>
#include <cstdio>
using namespace std;
typedef long long ll;
const int N = 1e5 + 10;
int n, m, a[N];
int T[N], id, L[N << 6], R[N << 6];
ll s[N << 6], add[N << 6];
void build(int &rt, int l, int r) {
rt = ++ id;
if(l < r) {
int mid = (l + r) >> 1;
build(L[rt], l, mid);
build(R[rt], mid + 1, r);
s[rt] = s[L[rt]] + s[R[rt]];
} else s[rt] = a[l];
}
void update(int &rt, int pre, int l, int r, int ql, int qr, int x) {
rt = ++ id; L[rt] = L[pre]; R[rt] = R[pre];
s[rt] = s[pre] + (qr - ql + 1) * x; add[rt] = add[pre];
if(ql == l && r == qr) { add[rt] += x; return ; }
int mid = (l + r) >> 1;
if(qr <= mid) update(L[rt], L[pre], l, mid, ql, qr, x);
else if(ql > mid) update(R[rt], R[pre], mid + 1, r, ql, qr, x);
else {
update(L[rt], L[pre], l, mid, ql, mid, x);
update(R[rt], R[pre], mid + 1, r, mid + 1, qr, x);
}
}
ll query(int rt, int l, int r, int ql, int qr, ll sum = 0) {
if(ql == l && qr == r) return sum * (r - l + 1) + s[rt];
sum += add[rt];
int mid = (l + r) >> 1;
if(qr <= mid) return query(L[rt], l, mid, ql, qr, sum);
if(ql > mid) return query(R[rt], mid + 1, r, ql, qr, sum);
return query(L[rt], l, mid, ql, mid, sum) + query(R[rt], mid + 1, r, mid + 1, qr, sum);
}
int main() {
scanf("%d%d", &n, &m);
for(int i = 1; i <= n; i ++)
scanf("%d", a + i);
static char op[5];
int tnow = 0; build(T[0], 1, n);
for(int l, r, d, i = 1; i <= m; i ++) {
scanf("%s", op);
if(* op == 'C') {
scanf("%d%d%d", &l, &r, &d);
update(T[tnow + 1], T[tnow], 1, n, l, r, d);
tnow ++;
}
if(* op == 'Q') {
scanf("%d%d", &l, &r);
printf("%lld\n", query(T[tnow], 1, n, l, r));
}
if(* op == 'H') {
scanf("%d%d%d", &l, &r, &d);
printf("%lld\n", query(T[d], 1, n, l, r));
}
if(* op == 'B') {
scanf("%d", &tnow);
}
}
return 0;
}
「SPOJ TTM 」To the moon「标记永久化」的更多相关文章
- 「SPOJ 3105」Power Modulo Inverted
「SPOJ 3105」Power Modulo Inverted 传送门 题目大意: 求关于 \(x\) 的方程 \[a^x \equiv b \;(\mathrm{mod}\; p) \] 的最小自 ...
- 何解決 LinqToExcel 發生「無法載入檔案或組件」問題何解決 LinqToExcel 發生「無法載入檔案或組件」問題
在自己的主機上透過 Visual Studio 2013 與 IISExpress 開發與測試都還正常,但只要部署到測試機或正式機,就是沒辦法順利執行,卡關許久之後找我協助.我發現錯誤訊息確實很「一般 ...
- FileUpload控件「批次上传 / 多档案同时上传」的范例--以「流水号」产生「变量名称」
原文出處 http://www.dotblogs.com.tw/mis2000lab/archive/2013/08/19/multiple_fileupload_asp_net_20130819. ...
- 「前端开发者」如何把握住「微信小程序」这波红利?
由于前两周一直在老家处理重要事情,虽然朋友圈被「微信小程序」刷爆了,但并没有时间深入了解. 昨天回广州之后,第一件事情就是把「微信小程序」相关的文章.开发文档.设计规范全部看了一遍,基本上明白了「微信 ...
- 2018.08.04 spoj TTM to the moon(主席树)
spoj传送门 vjudge传送门 主席树板子题. 支持历史版本的区间和,区间和,区间修改和时光倒流. 其中新奇一点的也只有区间修改了,这个东西直接标记永久化就行了. 如果想下传标记的话也行,需要在p ...
- SPOJ - TTM 主席树
给你一个系列\(a[1...n]\),要求可以区间求和,区间更新,也可以回溯过去 经典的主席树板子题,很久以前做的题了,代码太丑回炉重写 PS.题目标题To The Moon也是我最喜欢的游戏之一 这 ...
- SPOJ 16549 - QTREE6 - Query on a tree VI 「一种维护树上颜色连通块的操作」
题意 有操作 $0$ $u$:询问有多少个节点 $v$ 满足路径 $u$ 到 $v$ 上所有节点(包括)都拥有相同的颜色$1$ $u$:翻转 $u$ 的颜色 题解 直接用一个 $LCT$ 去暴力删边连 ...
- 「 SPOJ GSS3 」 Can you answer these queries III
# 题目大意 GSS3 - Can you answer these queries III 需要你维护一种数据结构,支持两种操作: 单点修改 求一个区间的最大子段和 # 解题思路 一个区间的最大子段 ...
- 被「李笑来老师」拉黑之「JavaScript微博自动转发的脚本」
故事的背景如下图,李笑来 老师于10月19日在 知乎Live 开设 一小时建立终生受用的阅读操作系统 的讲座,他老人家看到大家伙报名踊跃,便在微博上发起了一个 猜数量赢取iPhone7 的活动. 因为 ...
随机推荐
- __formart__
__format__ 一.__format__ 自定制格式化字符串 date_dic = { 'ymd': '{0.year}:{0.month}:{0.day}', 'dmy': '{0.day}/ ...
- S02_CH10_ User GPIO实验
S02_CH10_ User GPIO实验 在之前的第四章课程中,我们详细的讲解了如何在VIVADO软件下封装一个简单的流水灯程序.在ZYNQ开发过程中,有时候我们可能会需要与ARM硬核进行通信,在这 ...
- java中的exception stack有时候不输出的原因
有时候,我们在看java错误日志时,只看到一个java.lang.NullPointerException,却没有看到错误的栈,原因是启动时候有一项参数可以选择配置:OmitStackTraceInF ...
- .Net下二进制形式的文件存储与读取
.Net下图片的常见存储与读取凡是有以下几种:存储图片:以二进制的形式存储图片时,要把数据库中的字段设置为Image数据类型(SQL Server),存储的数据是Byte[].1.参数是图片路径:返回 ...
- ASP.NET 中的 Session 怎么正确使用
Session对象用于存储从一个用户开始访问某个特定的aspx的页面起,到用户离开为止,特定的用户会话所需要的信息.用户在应用程序的页面切换时,Session对象的变量不会被清除. 对于一个Web应用 ...
- 使用 FTP 迁移 SQL Server 数据_迁移数据_快速入门(SQL Server)_云数据库 RDS 版-阿里云
背景信息 阿里云数据库 SQL Server 版导入数据有如下限制: 仅支持导入 SQL Server 2005.SQL Server 2008.SQL Server 2008R2 版本数据 仅支持全 ...
- DIP常用资源整理
Deep Learning(深度学习): ufldl的2个教程(这个没得说,入门绝对的好教程,Ng的,逻辑清晰有练习):一 ufldl的2个教程(这个没得说,入门绝对的好教程,Ng的,逻辑清晰有练习) ...
- DVA-subscriptions
import { routerRedux } from 'dva/router' export default { namespace: 'notice', state: { notices:[], ...
- Linux学习(五)-Linux组管理和权限管理
Linux组基本介绍 在Linux中的每一个用户必须属于一个组,不能独立与组外.在Linux中每个文件有所有者,所在组,其他组的概念 所有者 所在组 其它组 改变用户所在组 1.文件/目录 所有者 文 ...
- weblogic 反序列化漏洞 getshell
上传cmd.jsp,效果: 上传马: