【原创】hdu1698 Just a Hook(线段树→区间更新,区间查询)
学习线段树第二天,这道题属于第二简单的线段树,第一简单是单点更新,这个属于区间更新。
区间更新就是lazy思想,我来按照自己浅薄的理解谈谈lazy思想:
就是在数据结构中,树形结构可以线性存储(线性表)也可以树状存储(链表)
树形
typedef struct node
{
int data;
struct node* Lchild;
struct node* Rchild;
}Btree,*BTree;
BTree = (BTree)malloc(Btree);
好像是这样吧...大半个暑假过去忘得一干二净...这个并不重要....
然后顺序就是存到顺序表了,第i个节点的左孩子节点就是i*2,右孩子节点就是i*2+1,这个是一个性质。
这个题就是用了树结构的顺序表。
好像也没啥说的,简单的模板题,看代码吧:
#include<cstdio>
#define N 100003
using namespace std;
struct nod
{
int data,l,r,lazy;
}tree[*N]; void push_up(int i)
{
tree[i].data = tree[i*].data+tree[i*+].data;
} void build_tree(int i,int l,int r)
{
tree[i].l = l;
tree[i].r = r;
tree[i].lazy = -;
if(l==r){
tree[i].data = ;
return;
}
int mid = (r + l)/;
build_tree(i*,l,mid);
build_tree(i*+,mid+,r);
push_up(i);
} void push_down(int i)
{
tree[i*].data = tree[i].lazy*(tree[i*].r-tree[i*].l+);
tree[i*+].lazy = tree[i*].lazy = tree[i].lazy;
tree[i*+].data = tree[i].lazy*(tree[i*+].r-tree[i*+].l+);
tree[i].lazy = -;
} void updata(int i,int v,int l,int r)
{
if(l<=tree[i].l&&tree[i].r<=r)
{
tree[i].data = (tree[i].r-tree[i].l+)*v;
tree[i].lazy = v;
return;
}
if(tree[i].lazy!=-) push_down(i);
int mid = (tree[i].l+tree[i].r)/;
if(l<=mid)
updata(i*,v,l,r);
if(r > mid)
updata(i*+,v,l,r);
push_up(i);
} int query(int i,int l,int r)
{
if(l<=tree[i].l&&tree[i].r<=r)
{
return tree[i].data;
}
if(tree[i].lazy!=-)
push_down(i);
int mid=(tree[i].l+tree[i].r)/;
if(r<=mid)
return query(i*,l,r);
if(l>=mid+)
return query(i*+,l,r);
return query(i*,l,r)+query(i*+,l,r);
} int main()
{
int noc,ug;
scanf("%d",&noc);
ug = noc;
while(noc--)
{
int n,q,x,y,z;
scanf("%d",&n);
build_tree(,,n);
scanf("%d",&q);
for(int i=;i<=q;i++)
{
scanf("%d%d%d",&x,&y,&z);
updata(,z,x,y);
}
printf("Case %d: The total value of the hook is %d.\n",ug-noc,tree[].data);
}
}
【原创】hdu1698 Just a Hook(线段树→区间更新,区间查询)的更多相关文章
- hdu1698 Just a hook 线段树区间更新
题解: 和hdu1166敌兵布阵不同的是 这道题需要区间更新(成段更新). 单点更新不用说了比较简单,区间更新的话,如果每次都更新到底的话,有点费时间. 这里就体现了线段树的另一个重要思想:延迟标记. ...
- hdu1698 Just a Hook (线段树区间更新 懒惰标记)
Just a Hook Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tota ...
- hdu-------(1698)Just a Hook(线段树区间更新)
Just a Hook Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- POJ.2528 Mayor's posters (线段树 区间更新 区间查询 离散化)
POJ.2528 Mayor's posters (线段树 区间更新 区间查询 离散化) 题意分析 贴海报,新的海报能覆盖在旧的海报上面,最后贴完了,求问能看见几张海报. 最多有10000张海报,海报 ...
- POJ.3468 A Simple Problem with Integers(线段树 区间更新 区间查询)
POJ.3468 A Simple Problem with Integers(线段树 区间更新 区间查询) 题意分析 注意一下懒惰标记,数据部分和更新时的数字都要是long long ,别的没什么大 ...
- codevs 1690 开关灯 线段树区间更新 区间查询Lazy
题目描述 Description YYX家门前的街上有N(2<=N<=100000)盏路灯,在晚上六点之前,这些路灯全是关着的,六点之后,会有M(2<=m<=100000)个人 ...
- A Simple Problem with Integers 线段树 区间更新 区间查询
Time Limit: 5000MS Memory Limit: 131072K Total Submissions: 115624 Accepted: 35897 Case Time Lim ...
- (简单) HDU 1698 Just a Hook , 线段树+区间更新。
Description: In the game of DotA, Pudge’s meat hook is actually the most horrible thing for most of ...
- HDU 1698 Just a Hook(线段树区间更新查询)
描述 In the game of DotA, Pudge’s meat hook is actually the most horrible thing for most of the heroes ...
随机推荐
- PHP 高并发秒杀解决方案
本文提供 PHP 高并发秒杀解决方案(附加三个案例说明(普通流程,使用文件锁,使用redis消息队列)) 1:(正常流程,不做任何高并发处理),代码如下: <?php $_mysqli = ne ...
- PHP常见错误汇总
日常开发和调试的时候,经常会遇到一些错误,光怪陆离的不知所以,所以,特此将错误汇总一下,借鉴!!! 1. 原因分析: 一般可能是该文件出现了问题,检查一下代码和格式,是否出现开始的地方出现了空格,或 ...
- 关于百度地图API和jqGrid踩到的坑
1.百度地图重新标记问题 var map = new BMap.Map("map"); ...... var marker = new BMap.Marker(point); // ...
- @Param注解
关于mybatis的@Param注解和参数 引用 https://www.cnblogs.com/whisper527/p/6568028.html 薇飘意 1,使用@Param注解 当以下面的方式进 ...
- 建议3---理解Python与C语言的不同之处
我们都知道,Python的底层是用C语言实现的,但切忌用C语言的思维和风格来编写Python代码.Python与其他语言有很多不同,以下来进行简单的分析: (1)"缩进"与“{}” ...
- RocketMQ消息队列安装
一.官方安装文档 http://rocketmq.apache.org/docs/quick-start/ 下载地址 https://github.com/apache/rocketmq/releas ...
- Vue入门基础
前面的话 Vue中文文档写得很好,界面清爽,内容翔实.但文档毕竟不是教程,文档一上来出现了大量的新概念,对于新手而言,并不友好.个人还是比较喜欢类似于<JS高级程序设计>的风格,从浅入深, ...
- Draw your Next App Idea with Ink to Code
Imagine that you’ve just been struck by inspiration for your next great app. You might start by jott ...
- Java 学习(1) ---JDK安装和配置环境变量
一,Java 开发的第一步,就是安装JDK(Java Development ToolKit Java开发工具包) JDK 是Java开发的核心,因为它包括Java 运行环境,工具包和命令.当我们安 ...
- mac上录制无声mp3
想要录制音频很多方法,要无声音频 你可以使用调试软件 那么mac的录制音频,可以用这个软件 将耳机插头插在话筒插孔内,录制出来了m4a文件, 进入转换网站 开始转换下载