http://acm.hdu.edu.cn/showproblem.php?pid=1698

题意:
给出1~n的数,每个数初始为1,每次改变[a,b]的值,最后求1~n的值之和。

思路:

区间更新题目,关于懒惰标记什么的参考这个吧http://blog.sina.com.cn/s/blog_a2dce6b30101l8bi.html,讲得不错的。

 #include<iostream>
#include<cstring>
#include<algorithm>
using namespace std; const int maxn = + ; int n, m; int col[maxn << ]; struct node
{
int l, r;
int n;
}t[maxn << ]; //如果该区间被标记了,说明该区间值改变,需要向下传递
void PushDown(int o, int m)
{
if (col[o])
{
col[o << ] = col[o << | ] = col[o];
t[o << ].n = (m - (m >> ))*col[o];
t[o << | ].n = (m >> )*col[o];
col[o] = ;
}
} void PushUp(int o)
{
t[o].n = t[o << ].n + t[o << | ].n;
} void build(int l, int r, int o)
{
col[o] = ;
t[o].l = l;
t[o].r = r;
t[o].n = ;
if (l == r) return;
int mid = (l + r) / ;
build(l, mid, * o);
build(mid + , r, * o + );
} void update(int l, int r, int x, int o)
{
if (l <= t[o].l && r >= t[o].r)
{
t[o].n = x*(t[o].r - t[o].l + );
col[o] = x;
return;
}
PushDown(o, t[o].r - t[o].l +);
int mid = (t[o].l + t[o].r) / ;
if (l > mid) update(l, r, x, * o + );
else if (r <= mid) update(l, r,x, * o);
else
{
update(l, mid, x, * o);
update(mid + , r, x, * o + );
}
//向上传递
PushUp(o);
} int main()
{
//freopen("D:\\txt.txt", "r", stdin);
int T;
int x, y, k;
int kase = ;
scanf("%d", &T);
while (T--)
{
scanf("%d", &n);
scanf("%d", &m);
build(, n, );
for (int i = ; i <= m; i++)
{
scanf("%d%d%d", &x, &y, &k);
update(x, y, k, );
}
printf("Case %d: The total value of the hook is %d.\n", kase++, t[].n);
}
}

HDU 1698 Just a Hook(线段树:区间更新)的更多相关文章

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

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

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

  3. HDU 1698 Just a Hook 线段树区间更新、

    来谈谈自己对延迟标记(lazy标记)的理解吧. lazy标记的主要作用是尽可能的降低时间复杂度. 这样说吧. 如果你不用lazy标记,那么你对于一个区间更新的话是要对其所有的子区间都更新一次,但如果用 ...

  4. HDU 1698 Just a Hook(线段树 区间替换)

    Just a Hook [题目链接]Just a Hook [题目类型]线段树 区间替换 &题解: 线段树 区间替换 和区间求和 模板题 只不过不需要查询 题里只问了全部区间的和,所以seg[ ...

  5. [HDU] 1698 Just a Hook [线段树区间替换]

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

  6. HDU 1698 Just a Hook(线段树区间替换)

    题目地址:pid=1698">HDU 1698 区间替换裸题.相同利用lazy延迟标记数组,这里仅仅是当lazy下放的时候把以下的lazy也所有改成lazy就好了. 代码例如以下: # ...

  7. hdu - 1689 Just a Hook (线段树区间更新)

    http://acm.hdu.edu.cn/showproblem.php?pid=1698 n个数初始每个数的价值为1,接下来有m个更新,每次x,y,z 把x,y区间的数的价值更新为z(1<= ...

  8. HDU.1689 Just a Hook (线段树 区间替换 区间总和)

    HDU.1689 Just a Hook (线段树 区间替换 区间总和) 题意分析 一开始叶子节点均为1,操作为将[L,R]区间全部替换成C,求总区间[1,N]和 线段树维护区间和 . 建树的时候初始 ...

  9. HDU.1556 Color the ball (线段树 区间更新 单点查询)

    HDU.1556 Color the ball (线段树 区间更新 单点查询) 题意分析 注意一下pushdown 和 pushup 模板类的题还真不能自己套啊,手写一遍才行 代码总览 #includ ...

  10. Just a Hook 线段树 区间更新

    Just a Hook In the game of DotA, Pudge’s meat hook is actually the most horrible thing for most of t ...

随机推荐

  1. PostgreSQL远程代码执行漏洞(CVE-2018-1058)学习笔记

    零.参考文献和绪论: 1.先知社区chybeta大神的--PostgreSQL 远程代码执行漏洞分析及利用—[CVE-2018-1058]--一文 2.博客园hunchill的--Mac 下 Post ...

  2. Hadoop命令别名

    [hadoop@master ~]$ alias hdfs='hadoop dfs' [hadoop@master ~]$ hdfs -ls / drwxrwxr-x   - hadoop super ...

  3. 从零打造在线网盘系统之Struts2框架配置全解析

    欢迎浏览Java工程师SSH教程从零打造在线网盘系统系列教程,本系列教程将会使用SSH(Struts2+Spring+Hibernate)打造一个在线网盘系统,本系列教程是从零开始,所以会详细以及着重 ...

  4. C#操作word之插入图片

    假如我们导出一份简历到word文档,那势必可能要同时导出我们包含的简历,下面就来试一下如何和通过C#代码,将图片插入到word文档中. 为了简便起见,就简单一点.类似下面这样的 姓名 张三 照片   ...

  5. Java学习记录-Lambda表达式示例

    List<Integer> userIds=userInfoList.stream().map(m->m.getUserId()).collect(Collectors.toList ...

  6. Redis的一些结构

  7. public boolean onKeyDown(int keyCode, KeyEvent event)

    @Override 2 public boolean onKeyDown(int keyCode, KeyEvent event) { 3 // TODO Auto-generated method ...

  8. jQuery Form

    https://github.com/jquery-form/form#type 概念 jQuery表单插件允许您轻松,无差错地升级HTML表单以使用AJAX. 主要方法ajaxForm和ajaxSu ...

  9. cocos代码研究(18)Widget子类Slider学习笔记

    理论基础 滑动条控件. 代码实践 实例: // Create the slider Slider* slider = Slider::create(); slider->loadBarTextu ...

  10. Ubuntu16.04 下创建新用户并赋予sudo权限

    https://blog.csdn.net/wales_2015/article/details/79643336