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标记的线段树的更多相关文章

  1. HDU 1698 just a hook - 带有lazy标记的线段树(用结构体实现)

    2017-08-30 18:54:40 writer:pprp 可以跟上一篇博客做个对比, 这种实现不是很好理解,上一篇比较好理解,但是感觉有的地方不够严密 代码如下: /* @theme:segme ...

  2. 带有lazy标记的线段树

    #include<bits/stdc++.h> using namespace std; ]; struct st{ int l,r,val,add; }tr[]; void build( ...

  3. 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 ...

  4. [HDU5306]Gorgeous Sequence(标记回收线段树)

    题意:维护一个序列,支持区间与一个数取min,询问区间最大,询问区间和(序列长度<=1e6) 分析: http://www.shuizilong.com/house/archives/hdu-5 ...

  5. [hdoj4578][多延迟标记的线段树]

    Transformation Time Limit: 15000/8000 MS (Java/Others)    Memory Limit: 65535/65536 K (Java/Others)T ...

  6. 洛谷 1083 (NOIp2012) 借教室——标记永久化线段树 / 差分+二分

    题目:https://www.luogu.org/problemnew/show/P1083 听说线段树不标记永久化会T一个点. 注意mn记录的是本层以下.带上标记的min! #include< ...

  7. HDU 1698 Just a Hook(线段树 区间替换)

    Just a Hook [题目链接]Just a Hook [题目类型]线段树 区间替换 &题解: 线段树 区间替换 和区间求和 模板题 只不过不需要查询 题里只问了全部区间的和,所以seg[ ...

  8. poj 3468 A Simple Problem with Integers (线段树区间更新求和lazy思想)

    A Simple Problem with Integers Time Limit: 5000MS   Memory Limit: 131072K Total Submissions: 75541   ...

  9. Codeforces 444C 线段树 懒惰标记

    前天晚上的CF比赛div2的E题,很明显一个线段树,当时还在犹豫复杂度的问题,因为他是区间修改和区间查询,肯定是要用到懒惰标记. 然后昨天真的是给这道题跪了,写了好久好久,...我本来是写了个add标 ...

随机推荐

  1. jquery.easing的使用

    下载地址:http://www.jb51.net/jiaoben/32922.html 基本语法:easing:格式为json,{duration:持续时间,easing:过渡效果,complete: ...

  2. Storm-源码分析- Messaging (backtype.storm.messaging)

    先定义两个接口和一个类 TaskMessage类本身比较好理解, 抽象storm的message格式 对于IContext, 注释也说了, 定义messaging plugin, 通过什么渠道去发送m ...

  3. linux系统分析命令总结

    一张图片

  4. vue状态管理器(用户登录简单应用)

    技术点:通过vue状态管理器,对已经登录的用户显示不同的页面: 一  vue之状态管理器应用 主要用来存储cookie信息 与vue-cookies一起使用 安装:npm install vue-co ...

  5. Jacl 是 TCL 的一个备用实现

    Jacl 是 TCL 的一个备用实现,它是完全使用 Java 代码编写的. wsadmin 工具使用 Jacl V1.3.2. 建议不要在 wsadmin 工具中使用 Jacl 语法 建议不要使用一个 ...

  6. MBR和GPT(分区)

    MBR:Master Boot Record GPT:Guid Partition Table (全局唯一标识符分区表) GPT is the new standard and is graduall ...

  7. 转Hibernate Annotation mappedBy注解理解

    在Annotation 中有这么一个@mappedBy 属性注解,相信有些同学还是对这个属性有些迷惑,上网找了些理解@mappedBy比较深刻的资料,下面贴出来供大家参考. http://xiaoru ...

  8. sublime2常用设置

    设置文本字体格式 • Preferences -> Setting-User • 加入设置:"font_face" : "courier new", &q ...

  9. php微信支付接口开发程序(流程已通)

    php微信支付接口开发程序(流程已通) 来源:未知    时间:2014-12-11 17:11   阅读数:11843   作者:xxadmin [导读] 微信支付接口现在也慢慢的像支付宝一个可以利 ...

  10. 接管radiobutton onclick 事件

    You can nil the OnClick event handler while changing a radiobutton state programmatically: procedure ...