【原创】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 ...
随机推荐
- JMeter中返回Json数据的处理方法(转)
Json 作为一种数据交换格式在网络开发,特别是 Ajax 与 Restful 架构中应用的越来越广泛.而 Apache 的 JMeter 也是较受欢迎的压力测试工具之一,但是它本身没有提供对于 Js ...
- Mysql占用CPU过高如何优化?(转)
原文:http://bbs.landingbj.com/t-0-241441-1.html MySQL处在高负载环境下,磁盘IO读写过多,肯定会占用很多资源,必然CP会U占用过高. 占用CPU过高,可 ...
- java中的定时任务小示例
package package_1; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Timer; ...
- [转帖]tar高级教程:增量备份、定时备份、网络备份
tar高级教程:增量备份.定时备份.网络备份 作者: lesca 分类: Tutorials, Ubuntu 发布时间: 2012-03-01 11:42 ė浏览 27,065 次 61条评论 一.概 ...
- CodeForces 113B Petr#
题目链接:http://codeforces.com/problemset/problem/113/B 题目大意: 多组数据每组给定3个字符串T,Sbeg,Sed,求字符串T中有多少子串是以Sbeg开 ...
- git ignore 忽略 idea文件
下载了项目组的代码之后发现,一个问题,一编译就生成了很多的 .idea文件夹 还有 target文件夹,这些是不需要提交到git上的, 需要提交的时候屏蔽一下,所以需要建立一个ignore文件列表把他 ...
- 使用IWMS的网站打开显示“未能加载文件或程序集”,解决方案
首先,会出现这样的问题原因是: 1.应用程序集里面有些事互相引用的,所以 问题有多种情况,第一.这个应用程序集出问题了: 2.它所依赖的那个程序集出问题了: 3.在项目生成的时候,代码里面有逻辑错误: ...
- PHP的爬虫框架
Beanbun PHPSpider PHPQuery QueryList PHPCrawer Snoopy
- SSM+shiro,所有配置文件,详细注释版,自用
spring配置文件applicationContext.xml,放在resources下 <?xml version="1.0" encoding="UTF-8& ...
- python安装与配置
首先下载python地址: https://www.python.org/downloads/release/python-361/ 下载页面中有多个版本: web-based installer 是 ...