HDU1698 just a Hook - 带有lazy标记的线段树
2017-08-30 16:44:33
writer:pprp
上午刚刚复习了一下不带有lazy标记的线段树,
下午开始学带有lazy标记的线段树
这个是我看大佬代码敲的,但是出了很多问题,
这提醒我:
1、要注意边界条件,一个边界条件的取等或者不取等,小于或者大于出错的话就直接运行不了了
2、注意输入输出,经过多次测试,果然还是用scanf比较保险,试了试用fast_io的cin结果还是TLE
所以以后不要用cin了,cin害人啊,两个混用就更加麻烦了
这个题就是区间修改,区间查询的一道题,但是大佬没有用指针构造一个结构体
仅仅抽象了一个sum和一个add(lazy标记)
感觉简单了不少
代码如下:
/*
@theme:segmentation/interval tree
@writer:pprp
@begin:15:26
@end:16:13
@declare: 使用lazy标记的线段树,HDU 1698
@date:2017/8/30
*/ #include <iostream>
#include <cstdio>
#define Mid ((l+r)>>1)
#define lson rt<<1,l,Mid
#define rson rt<<1|1,Mid+1,r
const int maxn = ;
int sum[maxn<<],add[maxn<<]; using namespace std; void build(int rt,int l, int r)
{
add[rt] = ;
//这里是每个节点都是1的情况
if(l == r)
sum[rt] = ;
else
{
build(rson);
build(lson);
sum[rt] = sum[rt<<]+sum[rt<<|];
}
} void pushDown(int rt, int len)
{
//将父节点的add值传递下来
add[rt<<] = add[rt<<|] = add[rt];
//将左右的值进行区间更新
sum[rt<<] = (len - (len>>))*add[rt];
sum[rt<<|] = (len>>)*add[rt];
//将父节点的add值清空
add[rt] =;
} //L,R代表的要更新区间的左右端点,z是区间增加的值
void update(int rt, int l,int r, int L, int R, int z)
{
//如果在L,R的内部
if(L <= l && r <= R) //error before
{
add[rt] = z;
sum[rt] = (r - l + ) * z;
}
else //没有找到该节点
{
if(add[rt])//当前节点不为空,要传下去
pushDown(rt,r-l+);
if(L <= Mid)
update(lson,L,R,z);
if(R > Mid) //error before
update(rson,L,R,z);
sum[rt] = sum[rt<<]+sum[rt<<|];
}
} int main()
{
// RE;
int t,n,q,x,y,z;
int cnt=;
scanf("%d",&t);
while(t--){
scanf("%d%d",&n,&q);
build(,,n);
while(q--){
scanf("%d%d%d",&x,&y,&z);
update(,,n,x,y,z);
}
printf("Case %d: The total value of the hook is %d.\n", cnt++,sum[]);
}
return ;
}
HDU1698 just a Hook - 带有lazy标记的线段树的更多相关文章
- HDU 1698 just a hook - 带有lazy标记的线段树(用结构体实现)
2017-08-30 18:54:40 writer:pprp 可以跟上一篇博客做个对比, 这种实现不是很好理解,上一篇比较好理解,但是感觉有的地方不够严密 代码如下: /* @theme:segme ...
- 带有lazy标记的线段树
#include<bits/stdc++.h> using namespace std; ]; struct st{ int l,r,val,add; }tr[]; void build( ...
- kuangbin专题七 HDU1698 Just a Hook (区间设值 线段树)
In the game of DotA, Pudge’s meat hook is actually the most horrible thing for most of the heroes. T ...
- [HDU5306]Gorgeous Sequence(标记回收线段树)
题意:维护一个序列,支持区间与一个数取min,询问区间最大,询问区间和(序列长度<=1e6) 分析: http://www.shuizilong.com/house/archives/hdu-5 ...
- [hdoj4578][多延迟标记的线段树]
Transformation Time Limit: 15000/8000 MS (Java/Others) Memory Limit: 65535/65536 K (Java/Others)T ...
- 洛谷 1083 (NOIp2012) 借教室——标记永久化线段树 / 差分+二分
题目:https://www.luogu.org/problemnew/show/P1083 听说线段树不标记永久化会T一个点. 注意mn记录的是本层以下.带上标记的min! #include< ...
- HDU 1698 Just a Hook(线段树 区间替换)
Just a Hook [题目链接]Just a Hook [题目类型]线段树 区间替换 &题解: 线段树 区间替换 和区间求和 模板题 只不过不需要查询 题里只问了全部区间的和,所以seg[ ...
- poj 3468 A Simple Problem with Integers (线段树区间更新求和lazy思想)
A Simple Problem with Integers Time Limit: 5000MS Memory Limit: 131072K Total Submissions: 75541 ...
- Codeforces 444C 线段树 懒惰标记
前天晚上的CF比赛div2的E题,很明显一个线段树,当时还在犹豫复杂度的问题,因为他是区间修改和区间查询,肯定是要用到懒惰标记. 然后昨天真的是给这道题跪了,写了好久好久,...我本来是写了个add标 ...
随机推荐
- pandas_datareader.data 和 fix_yahoo_finance 获取金融数据
参考:https://zhuanlan.zhihu.com/p/35360694 1.获取数据 #定义所需要的数据 gafataDict={"谷歌":"GOOG" ...
- virtIO前后端notify机制详解
2016-11-15 本来这是在前端驱动后期分析的,但是这部分内容比较多,且分析了后端notify前端的机制,所以还是单独拿出一节分析比较好! 还是拿网络驱动部分做案例,网络驱动部分有两个队列,(忽略 ...
- 创建JOB定时执行存储过程
创建JOB定时执行存储过程有两种方式 方式1:通过plsql手动配置job,如下图: 方式2:通过sql语句,如下sql declare job_OpAutoDta pls_integer;--声明一 ...
- 使用python下载一些链接的软件包
import reimport requestsimport osimport wget get = raw_input("please input your link::")pa ...
- 史上最有魄力公司!20亿主要用于团队建设,要在上海做出一家BAT之外的互联网公司
在去年的创业大军里,有一家公司显得很特别——微鲸科技,背靠华人文化,联合阿里巴巴.腾讯和央广,天使轮就高达20亿,是被誉为互联网电视领域的豪华创业团队. 在上市不到半年的时间里,旗下发布的55吋和43 ...
- mysql数据库从删库到跑路之mysql多表查询
一 介绍 本节主题 多表连接查询 复合条件连接查询 子查询 准备表 company.employeecompany.department #建表 create table department( id ...
- The 15th UESTC Programming Contest Preliminary C - C0ins cdoj1554
地址:http://acm.uestc.edu.cn/#/problem/show/1554 题目: C0ins Time Limit: 3000/1000MS (Java/Others) M ...
- 解决Ubuntu sudo apt-get install遇到的E: Sub-process /usr/bin/dpkg returned an error code (1)问题
如题,本人在安装samba等软件的时候,在命令行敲入: sudo apt-get install samba4命令的时候,系统在下载之后报错,大致内容如下: ~$ sudo apt-get insta ...
- BitmapFactory.decodeStream(inputStream)返回null的解决方法
场景:Android,通过inputStream从网络上获取图片 随后两次使用BitmapFactory对InputStream进行操作,一次获取宽高,另一次缩放 但是在缩放时,发现inputStre ...
- RabbitMQ 如何实现对同一个应用的多个节点进行广播
1.背景 了解过RabbitMQ的Fanout模式,应该知道它原本的Fanout模式就是用来做广播的.但是它的广播有一点区别,来回顾下它的含义:Fanout类型没有路由键的概念,只要队列绑定到了改ex ...