传送门

对于这个题,显然要打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(主席树)的更多相关文章

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

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

  2. hdu4348 To the moon (主席树 || 离线线段树)

    Problem Description Background To The Moon is a independent game released in November 2011, it is a ...

  3. hdu 4348 To the moon (主席树区间更新)

    传送门 题意: 一个长度为n的数组,4种操作 : (1)C l r d:区间[l,r]中的数都加1,同时当前的时间戳加1 . (2)Q l r:查询当前时间戳区间[l,r]中所有数的和 . (3)H ...

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

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

  5. HDU 4348 To the moon 主席树 在线更新

    http://acm.hdu.edu.cn/showproblem.php?pid=4348 以前做的主席树没有做过在线修改的题做一下(主席树这种东西正经用法难道不是在线修改吗),标记永久化比较方便. ...

  6. HDU 4348 To the moon 主席树

    题意: 给出一个长度为\(n(n \leq 10^5)\)的序列,最开始时间\(t=0\),支持下面几个操作: \(C \, l \, r \, d\):将区间\([l,r]\)每个数都加上\(d\) ...

  7. hdu 4348 To the moon 主席树区间更新

    To the moon Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Prob ...

  8. SP11470 TTM - To the moon[主席树标记永久化]

    SP11470 TTM - To the moon C l r d:区间 \([L,R]\) 中的数都加 d ,同时当前的时间戳加 1. Q l r:查询当前时间戳区间 \([L,R]\) 中所有数的 ...

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

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

  10. HDU4348To the moon主席树,区间修改

    题意: 一个长度为n的数组,4种操作 : (1)C l r d:区间[l,r]中的数都加1,同时当前的时间戳加1 . (2)Q l r:查询当前时间戳区间[l,r]中所有数的和 . (3)H l r ...

随机推荐

  1. ES相关概念理解

    Elasticsearch特点:分布式,高性能,高可用,高伸缩的搜索和分析: 1)可作为一个大型分布式集群,处理PB级别的数据,服务大型公司,亦可运行在少数或单台设备上服务小型公司 分布式的特性: E ...

  2. Spark MLlib编程API入门系列之特征选择之向量选择(VectorSlicer)

    不多说,直接上干货! 特征选择里,常见的有:VectorSlicer(向量选择) RFormula(R模型公式) ChiSqSelector(卡方特征选择). VectorSlicer用于从原来的特征 ...

  3. Docker DOC

    Docker DOC docker是提供给开发或管理人员的容器化部署项目工具 在linux上运行docker 常用命令 docker 安装 #先更新yum yum update; #设置docker仓 ...

  4. PHP Deprecated: Function split() is deprecated in /var/www/html/cacti/cmd.php on line 61

    [root@localhost cacti]# php cmd.php PHP Deprecated: Function split() is deprecated in /var/www/html/ ...

  5. 《深入理解Java虚拟机》读书笔记

    堆分配参数: -XX:+PrintGC 使用该参数,虚拟机启动后,只要遇到GC就会打印日志: -XX:+UseSerialGC 配置串行回收器: -XX:+PrintGCDeltails 可以查看详细 ...

  6. 用Python爬取智联招聘信息做职业规划

    上学期在实验室发表时写了一个爬取智联招牌信息的爬虫. 操作流程大致分为:信息爬取——数据结构化——存入数据库——所需技能等分词统计——数据可视化 1.数据爬取 job = "通信工程师&qu ...

  7. 富通天下(W 笔试)

    纸质算法题目 1.给你一个字符串,找出其中第一个只出现过一次的字符及其位置 正解:一层for循环,循环按序取出字符串中的单个字符,循环体内部使用String类的indexOf(),从当前字符下标往后搜 ...

  8. uva1380 A Scheduling Problem

    按紫书来注意这道题的题目给了很大的方便,就相当于验证k是不是答案,不是的话就是k+1 #include<iostream> #include<string> #include& ...

  9. react 的CDN 连接

    以下内容均摘抄自react官网 React 和 ReactDOM 都可以在 CDN 上获得. <script crossorigin src="https://unpkg.com/re ...

  10. 指针-动态开点&合并线段树

    一个知识点不在一道题里说是没有灵魂的 线段树是用来处理区间信息的咯 但是往往因为需要4倍空间让许多人退却,而动态开点的线段树就非常棒 仿佛只用2倍就可以咯 指针保存位置,即节点信息,是很舒适的,所以用 ...