学习线段树第二天,这道题属于第二简单的线段树,第一简单是单点更新,这个属于区间更新。

区间更新就是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(线段树→区间更新,区间查询)的更多相关文章

  1. hdu1698 Just a hook 线段树区间更新

    题解: 和hdu1166敌兵布阵不同的是 这道题需要区间更新(成段更新). 单点更新不用说了比较简单,区间更新的话,如果每次都更新到底的话,有点费时间. 这里就体现了线段树的另一个重要思想:延迟标记. ...

  2. hdu1698 Just a Hook (线段树区间更新 懒惰标记)

    Just a Hook Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Tota ...

  3. hdu-------(1698)Just a Hook(线段树区间更新)

    Just a Hook Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  4. POJ.2528 Mayor's posters (线段树 区间更新 区间查询 离散化)

    POJ.2528 Mayor's posters (线段树 区间更新 区间查询 离散化) 题意分析 贴海报,新的海报能覆盖在旧的海报上面,最后贴完了,求问能看见几张海报. 最多有10000张海报,海报 ...

  5. POJ.3468 A Simple Problem with Integers(线段树 区间更新 区间查询)

    POJ.3468 A Simple Problem with Integers(线段树 区间更新 区间查询) 题意分析 注意一下懒惰标记,数据部分和更新时的数字都要是long long ,别的没什么大 ...

  6. codevs 1690 开关灯 线段树区间更新 区间查询Lazy

    题目描述 Description YYX家门前的街上有N(2<=N<=100000)盏路灯,在晚上六点之前,这些路灯全是关着的,六点之后,会有M(2<=m<=100000)个人 ...

  7. A Simple Problem with Integers 线段树 区间更新 区间查询

    Time Limit: 5000MS   Memory Limit: 131072K Total Submissions: 115624   Accepted: 35897 Case Time Lim ...

  8. (简单) HDU 1698 Just a Hook , 线段树+区间更新。

    Description: In the game of DotA, Pudge’s meat hook is actually the most horrible thing for most of ...

  9. 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 ...

随机推荐

  1. mongoDB 安装和配置环境变量,超详细版本

    下载mongoDB进行安装:https://www.mongodb.com/                                                 到Community Se ...

  2. C#复习笔记(4)--C#3:革新写代码的方式(用智能的编译器来防错)

    用智能的编译器来防错 本章的主要内容: 自动实现的属性:编写由字段直接支持的简单属性, 不再显得臃肿不堪: 隐式类型的局部变量:根据初始值推断类型,简化局部变量的声明: 对象和集合初始化程序:用一个表 ...

  3. 解读event.returnValue和return false

    前言 首先我们要清楚returnValue是IE的一个属性,如果设置了该属性,它的值比事件句柄的返回值优先级要高,把它的值设置为false,可以取消发生事件源元素的默认动作:return false就 ...

  4. [转帖]Kerberos和NTLM - SQL Server

    Kerberos和NTLM - SQL Server https://www.cnblogs.com/dreamer-fish/p/3458425.html 当我们使用Windows Authenti ...

  5. Ajax发送请求等待时弹出模态框等待提示

    主要的代码分为两块,一个是CSS定义模态框,另一个是在Ajax中弹出模态框. 查看菜鸟教程中的模态框教程demo,http://www.runoob.com/try/try.php?filename= ...

  6. Programming好文解读系列(—)——代码整洁之道

    注:初入职场,作为一个程序员,要融入项目组的编程风格,渐渐地觉得系统地研究下如何写出整洁而高效的代码还是很有必要的.与在学校时写代码的情况不同,实现某个功能是不难的,需要下功夫的地方在于如何做一些防御 ...

  7. PhpStorm 配置链接远程虚拟机

    安装好了 PhpStorm 之后,打开项目文件夹,接着点击工具栏 Tools: 2.接着点击 tools>Deployment: 3.点击Configuration 开始配置    4.填好箭头 ...

  8. 如何使用apache自带的ab压力测试工具

    ab是apache自带的一个很好用的压力测试工具,当安装完apache的时候,就可以在bin下面找到ab 1 我们可以模拟100个并发用户,对一个页面发送1000个请求 ./ab -n1000 -c1 ...

  9. Django--权限信息操作

    一 . 权限控制 表结构的设计 rbca(Role Based Access Control)  基于角色的权限控制 3个model  5张表 class User(models.Model): # ...

  10. Mybatis之执行insert、update和delete操作时自动提交

    单独使用Mybaits,而没有集成Spring的话,执行insert.update和delete操作是不会自动提交的,即执行语句后不会在数据库有对应的数据变化. 解决这样的方法就是打开自动提交开关,在 ...