[HDU4348]To the moon(主席树)
对于这个题,显然要打lazy标记了,但是lazy标记pushdown的时候肯定会增加一大堆节点,然后就MLE了。(题解这么说的,我其实不会pushdown)
所以,就换另一种方式,把标记直接打到当前区间,把当前区间的父亲节点大小都更新。求区间和的时候把沿途的标记都加起来就可以了。
注意分多钟情况。
——代码
#include <cstdio>
#define ls son[now][0], l, mid
#define rs son[now][1], mid + 1, r
#define LL long long using namespace std; const int N = ; int n, m, tot;
int rt[N], son[N][], add[N];
LL sum[N]; inline void pushup(int now)
{
sum[now] = sum[son[now][]] + sum[son[now][]];
} inline void build(int &now, int l, int r)
{
now = ++tot;
add[now] = ;
if(l == r)
{
scanf("%lld", &sum[now]);
return;
}
int mid = (l + r) >> ;
build(ls);
build(rs);
pushup(now);
} inline void update(int &now, int l, int r, int last, int ql, int qr, int x)
{
now = ++tot;
add[now] = add[last];
sum[now] = sum[last];
son[now][] = son[last][];
son[now][] = son[last][];
sum[now] += (LL)x * (qr - ql + );
if(l == ql && r == qr)
{
add[now] += x;
return;
}
int mid = (l + r) >> ;
if(qr <= mid) update(ls, son[now][], ql, qr, x);
else if(ql > mid) update(rs, son[now][], ql, qr, x);
else
{
update(ls, son[now][], ql, mid, x);
update(rs, son[now][], mid + , qr, x);
}
} inline LL query(int now, int l, int r, int ql, int qr)
{
if(l == ql && r == qr) return sum[now];
int mid = (l + r) >> ;
LL ret = (LL)add[now] * (qr - ql + );
if(qr <= mid) return ret + query(ls, ql, qr);
else if(ql > mid) return ret + query(rs, ql, qr);
else return ret + query(ls, ql, mid) + query(rs, mid + , qr);
} int main()
{
int i, x, y, z, now;
bool f = ;
char s[];
while(~scanf("%d %d", &n, &m))
{
if(f) printf("\n");
else f = ;
now = tot = ;
build(rt[], , n);
for(i = ; i <= m; i++)
{
scanf("%s", s);
switch(s[])
{
case 'C': scanf("%d %d %d", &x, &y, &z); now++; update(rt[now], , n, rt[now - ], x, y, z); break;
case 'Q': scanf("%d %d", &x, &y); printf("%lld\n", query(rt[now], , n, x, y)); break;
case 'H': scanf("%d %d %d", &x, &y, &z); printf("%lld\n", query(rt[z], , n, x, y)); break;
case 'B': scanf("%d", &now); break;
}
}
}
return ;
}
[HDU4348]To the moon(主席树)的更多相关文章
- [HDU4348]To the moon(主席树+标记永久化)
学可持久化treap的时候才发现自己竟然没写过需要标记下传的主席树,然而现在发现大部分操作都可以标记永久化,下传会增大占用空间. 这题一种写法是和普通的线段树一样标记下传,注意所有修改操作(包括put ...
- hdu4348 To the moon (主席树 || 离线线段树)
Problem Description Background To The Moon is a independent game released in November 2011, it is a ...
- hdu 4348 To the moon (主席树区间更新)
传送门 题意: 一个长度为n的数组,4种操作 : (1)C l r d:区间[l,r]中的数都加1,同时当前的时间戳加1 . (2)Q l r:查询当前时间戳区间[l,r]中所有数的和 . (3)H ...
- 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 主席树 在线更新
http://acm.hdu.edu.cn/showproblem.php?pid=4348 以前做的主席树没有做过在线修改的题做一下(主席树这种东西正经用法难道不是在线修改吗),标记永久化比较方便. ...
- HDU 4348 To the moon 主席树
题意: 给出一个长度为\(n(n \leq 10^5)\)的序列,最开始时间\(t=0\),支持下面几个操作: \(C \, l \, r \, d\):将区间\([l,r]\)每个数都加上\(d\) ...
- hdu 4348 To the moon 主席树区间更新
To the moon Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Prob ...
- SP11470 TTM - To the moon[主席树标记永久化]
SP11470 TTM - To the moon C l r d:区间 \([L,R]\) 中的数都加 d ,同时当前的时间戳加 1. Q l r:查询当前时间戳区间 \([L,R]\) 中所有数的 ...
- hdu4348区间更新的主席树+标记永久化
http://acm.hdu.edu.cn/showproblem.php?pid=4348 sb的标记永久化即可,刚开始add和sum没复制过来wa了两发...,操作和原来的都一样,出来单点变成区间 ...
- HDU4348To the moon主席树,区间修改
题意: 一个长度为n的数组,4种操作 : (1)C l r d:区间[l,r]中的数都加1,同时当前的时间戳加1 . (2)Q l r:查询当前时间戳区间[l,r]中所有数的和 . (3)H l r ...
随机推荐
- 关于c#的结构体struct与class的区别
C# 结构体 struct C#中结构类型和类类型在语法上非常相似,他们都是一种数据结构,都可以包括数据成员和方法成员. 结构和类的区别: 1.结构是值类型,它在栈中分配空间:而类是引用类型,它在堆中 ...
- spring mvc支持跨域请求
@WebFilter(urlPatterns = "/*", filterName = "corsFilter") public class CorsFilte ...
- 模拟ssh的远程网络传输
粘包产生的原因分析: 第一点:客户端向服务端发起命令请求,服务端接受命令请求,并返回对应的信息,如果信息过大,客户端一次接受不了,那么下一次请求依然返回 上一个命令的内容,就出现了粘包的情况. 第二点 ...
- grep的几个参数
-a 在二进制问就爱你中,以文本方式进行搜索 -c 计算找到搜索字符串的次数 -i 忽略大小写 -n 输出行号 -v 反向选择,即没有显示搜索字符串内容的那一行 grep -n '\.$' file ...
- SQL Server中的事务日志管理的阶梯,级别1:事务日志概述
SQL Server中的事务日志管理的阶梯,级别1:事务日志概述 翻译:刘琼滨 谢雪妮 许雅莉 赖慧芳 级别1:事务日志概述 事务日志是一个文件,其中SQL服务器存储了所有与日志文件关联的数据库执行的 ...
- HashMap详解 基于jdk1.7
转载自:http://zhangshixi.iteye.com/blog/672697 1. HashMap概述: HashMap是基于哈希表的Map接口的非同步实现.此实现提供所有可选的映射操 ...
- oracle补丁类型
名称 说明 Release ¤ 标准产品发布.如Oracle Database 10g Release 2的第一个发行版本为10.2.0.1,可以在OTN.edelivery等站点上公开下载 Patc ...
- 在Vue中遇到的各种坑 及性能提升
Vue: (1) 没有再模板里引用data数据,会不会引起update.beforeUpdate生命周期函数的执行? 不会 (2)组件改成异步 (3)v-once (4)如果不用template ...
- Omnidirectional DSO: Direct Sparse Odometry with Fisheye Cameras 论文摘要
1. Abstract 通过一种Unified Omnidirectional Model作为投影方程. 这种方式可以使用图像的所有内容包括有强畸变的区域,而现存的视觉里程计方案只能修正或者切掉来使用 ...
- TWaver3D直线、曲线、曲面的绘制
插播一则广告(长期有效) TWaver需要在武汉招JavaScript工程师若干 要求:对前端技术(JavasScript.HTML.CSS),对可视化技术(Canvas.WebGL)有浓厚的兴趣 基 ...