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. OSGI框架—HelloWorld小实例

    OSGi(Open Service Gateway Initiative)技术是Java动态化模块化系统的一系列规范.OSGi一方面指维护OSGi规范的OSGI官方联盟,另一方面指的是该组织维护的基于 ...

  2. [译]关于JavaScript 作用域你想知道的一切

    原文连接 在学习js的过程对闭包什么的,理解不好,偶然搜到这篇文章.豁然开朗,随翻译. Javacript 中有一系列作用域的概念.对于新的JS的开发人员无法理解这些概念,甚至一些经验丰富的开发者也未 ...

  3. vue系列

    1.vue基础 2.vue请求和跨域 3.自定义全局组件 4.vue-router 5.Vuex

  4. LRU算法的Python实现

    http://flychao88.iteye.com/blog/1977653文章中介绍了常见的几种缓存淘汰策略 LRU:least recently used,最近最少使用算法.其实就是按使用时间倒 ...

  5. virtIO前后端notify机制详解

    2016-11-15 本来这是在前端驱动后期分析的,但是这部分内容比较多,且分析了后端notify前端的机制,所以还是单独拿出一节分析比较好! 还是拿网络驱动部分做案例,网络驱动部分有两个队列,(忽略 ...

  6. PCI 设备详解三

    上篇文章已经分析了探测PCI总线的部分代码,碍于篇幅,这里另启一篇.重点分析下pci_scan_root_bus函数 2016-10-24 pci_scan_root_bus函数 struct pci ...

  7. Python 装饰器的诞生过程

    ​ Python中的装饰器是通过利用了函数特性的闭包实现的,所以在讲装饰器之前,我们需要先了解函数特性,以及闭包是怎么利用了函数特性的 ① 函数特性 Python中的函数特性总的来说有以下四点: 1. ...

  8. Oracle trigger 触发器

    触发器使用教程和命名规范 目  录触发器使用教程和命名规范 11,触发器简介 12,触发器示例 23,触发器语法和功能 34,例一:行级触发器之一 45,例二:行级触发器之二 46,例三:INSTEA ...

  9. 史上最有魄力公司!20亿主要用于团队建设,要在上海做出一家BAT之外的互联网公司

    在去年的创业大军里,有一家公司显得很特别——微鲸科技,背靠华人文化,联合阿里巴巴.腾讯和央广,天使轮就高达20亿,是被誉为互联网电视领域的豪华创业团队. 在上市不到半年的时间里,旗下发布的55吋和43 ...

  10. DataGird 相关

    DataGird控件          DataGirdView 控件    DataGird类  他们之间是什么关系??????? DataGridView 控件是替换 DataGrid 控件的新控 ...