博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU1698 just a Hook - 带有lazy标记的线段树
阅读量:5340 次
发布时间:2019-06-15

本文共 1910 字,大约阅读时间需要 6 分钟。

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 
#include
#define Mid ((l+r)>>1)#define lson rt<<1,l,Mid#define rson rt<<1|1,Mid+1,rconst int maxn = 100010;int sum[maxn<<2],add[maxn<<2];using namespace std;void build(int rt,int l, int r){ add[rt] = 0; //这里是每个节点都是1的情况 if(l == r) sum[rt] = 1; else { build(rson); build(lson); sum[rt] = sum[rt<<1]+sum[rt<<1|1]; }}void pushDown(int rt, int len){ //将父节点的add值传递下来 add[rt<<1] = add[rt<<1|1] = add[rt]; //将左右的值进行区间更新 sum[rt<<1] = (len - (len>>1))*add[rt]; sum[rt<<1|1] = (len>>1)*add[rt]; //将父节点的add值清空 add[rt] =0;}//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 + 1) * z; } else //没有找到该节点 { if(add[rt])//当前节点不为空,要传下去 pushDown(rt,r-l+1); if(L <= Mid) update(lson,L,R,z); if(R > Mid) //error before update(rson,L,R,z); sum[rt] = sum[rt<<1]+sum[rt<<1|1]; }}int main() { // RE; int t,n,q,x,y,z; int cnt=1; scanf("%d",&t); while(t--){ scanf("%d%d",&n,&q); build(1,1,n); while(q--){ scanf("%d%d%d",&x,&y,&z); update(1,1,n,x,y,z); } printf("Case %d: The total value of the hook is %d.\n", cnt++,sum[1]); } return 0; }

 

转载于:https://www.cnblogs.com/pprp/p/7453945.html

你可能感兴趣的文章
[工具] Sublime Text 使用指南
查看>>
Hangfire在ASP.NET CORE中的简单实现方法
查看>>
Algorithm——何为算法?
查看>>
Web服务器的原理
查看>>
小强升职计读书笔记
查看>>
常用的107条Javascript
查看>>
#10015 灯泡(无向图连通性+二分)
查看>>
忘记root密码,怎么办
查看>>
linux设备驱动归纳总结(三):1.字符型设备之设备申请【转】
查看>>
《黑客与画家》 读书笔记
查看>>
bzoj4407: 于神之怒加强版
查看>>
mysql统计一张表中条目个数的方法
查看>>
ArcGIS多面体(multipatch)解析——引
查看>>
css3渐变画斜线 demo
查看>>
JS性能DOM优化
查看>>
设计模式 单例模式 使用模板及智能指针
查看>>
c#的const可以用于引用类型吗
查看>>
手动实现二值化
查看>>
What Linux bind mounts are really doing
查看>>
linux top命令详解
查看>>