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. 全球数字货币交易所TOP20安全性评级报告

      链塔智库2018-05-03 10:28 分析师:常昊.王婧雯    来源: 链塔智库 全球加密数字货币市值超2.5万亿元,单日交易额超2000亿元,全球超过3000万人已投入加密数字货币领域. ...

  2. c++拷贝构造函数,深拷贝,浅拷贝,对象内存

    https://blog.csdn.net/lwbeyond/article/details/6202256 防止默认拷贝发生 通过对对象复制的分析,我们发现对象的复制大多在进行“值传递”时发生,这里 ...

  3. AndroidStudio修改常用快捷键

    近期公司开发工具要从eclipse转向Androidstudio,安装好as后当然迫不及待地要将快捷键修改为eclipse中的快捷键啦,下面是个人的一些小的总结. 1.首先当然要打开快捷键的设置界面啦 ...

  4. git学习------>git-rev-parse命令初识

    一.准备工作 第一步:在d盘git test目录下,新建工作区根目录demo,进入该目录后,执行git init创建版本库. DH207891+OuyangPeng@DH207891 MINGW32 ...

  5. maven之jre默认配置

    需要在用户或者全局settings.xml中做如下配置 例:用户配置: 添加代码: <profile> <id>jdk-1.8</id> <activatio ...

  6. python学习笔记(九)函数返回多个值,列表生成式,循环多个变量,入参格式声明

    一.函数返回多个值 1.函数如果返回多个值的话,它会把这几个值放到一个元组里面2.函数如果返回多个值的话,也可以用多个变量来接收 def say(): num1 = num2 = num3 = ret ...

  7. PHP 基础篇 - PHP 错误级别详解

    一.前言 最近经常看到工作 2 年左右的童鞋写的代码也会出现以静态方法的形式调用非静态方法,这是个 Deprecated 级别的语法错误,代码里不应该出现的.对方很郁闷,说:为什么我的环境可以正常运行 ...

  8. su 与 su - 区别

    su与su -都是用来切换用户的命令,简单说它们之间的区别就是:su -切换的干净彻底,而su 切换用户却拖泥带水. su su username,切换到指定用户,但是当前目录不会变化,环境变量还是上 ...

  9. 如何将python3.6软件的py文件打包成exe程序

    在我们完成一个Python项目或一个程序时,希望将Python的py文件打包成在Windows系统下直接可以运行的exe程序.在浏览网上的资料来看,有利用pyinstaller和cx_Freeze进行 ...

  10. Spark --【宽依赖和窄依赖】

    前言 Spark中RDD的高效与DAG图有着莫大的关系,在DAG调度中需要对计算过程划分stage,暴力的理解就是stage的划分是按照有没有涉及到shuffle来划分的,没涉及的shuffle的都划 ...