HDU 1698 Just a Hook(线段树 区间替换)
Just a Hook
【题目链接】Just a Hook
【题目类型】线段树 区间替换
&题解:
线段树 区间替换 和区间求和 模板题 只不过不需要查询 题里只问了全部区间的和,所以seg[1] 就是answer
【时间复杂度】\(O(nlogn)\)
&代码:
#include <bits/stdc++.h>
using namespace std;
const int maxn = 100000 + 9 ;
int n,q,x,y,z;
int seg[maxn<<2];
int sign[maxn<<2];
void PushUp(int rt)
{
seg[rt]=seg[rt<<1]+seg[rt<<1|1];
}
void PushDown(int len,int rt)
{
if (sign[rt]){
sign[rt<<1]=sign[rt];
sign[rt<<1|1]=sign[rt];
//左儿子元素多 右儿子元素少 因为与m的求法有关
//我的求法是 b+e>>1 左是[b,m] 右是[m+1,e] 所以奇数的时候是左儿子多
seg[rt<<1]=sign[rt]*(len-len/2);
seg[rt<<1|1]=sign[rt]*(len/2);
sign[rt]=0;
}
}
void Build(int b,int e,int rt)
{
if (b==e){
seg[rt]=1;
return ;
}
int m=b+e>>1;
Build(b,m,rt<<1);
Build(m+1,e,rt<<1|1);
PushUp(rt);
}
void Update(int l,int r,int xx,int b,int e,int rt)
{
if (l<=b&&e<=r){
sign[rt]=xx;
seg[rt]=xx*(e-b+1);
return;
}
PushDown(e-b+1,rt);
int m=b+e>>1;
if (l<=m)
Update(l,r,xx,b,m,rt<<1);
if (m<r)
Update(l,r,xx,m+1,e,rt<<1|1);
PushUp(rt);
}
int K;
void Solve()
{
scanf("%d%d",&n,&q);
memset(sign,0,sizeof(sign));
Build(1,n,1);
for(int i=0;i<q;i++){
scanf("%d%d%d",&x,&y,&z);
Update(x,y,z,1,n,1);
}
printf("Case %d: The total value of the hook is %d.\n",++K,seg[1]);
}
int main()
{
int T;cin>>T;while(T--)
Solve();
return 0;
}
HDU 1698 Just a Hook(线段树 区间替换)的更多相关文章
- [HDU] 1698 Just a Hook [线段树区间替换]
Just a Hook Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- HDU 1698 Just a Hook(线段树区间替换)
题目地址:pid=1698">HDU 1698 区间替换裸题.相同利用lazy延迟标记数组,这里仅仅是当lazy下放的时候把以下的lazy也所有改成lazy就好了. 代码例如以下: # ...
- HDU.1689 Just a Hook (线段树 区间替换 区间总和)
HDU.1689 Just a Hook (线段树 区间替换 区间总和) 题意分析 一开始叶子节点均为1,操作为将[L,R]区间全部替换成C,求总区间[1,N]和 线段树维护区间和 . 建树的时候初始 ...
- (简单) 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 ...
- HDU 1698 Just a Hook 线段树区间更新、
来谈谈自己对延迟标记(lazy标记)的理解吧. lazy标记的主要作用是尽可能的降低时间复杂度. 这样说吧. 如果你不用lazy标记,那么你对于一个区间更新的话是要对其所有的子区间都更新一次,但如果用 ...
- HDU 1698 just a hook 线段树,区间定值,求和
Just a Hook Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=1 ...
- HDU 1698 Just a Hook 线段树+lazy-target 区间刷新
Just a Hook Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tota ...
- hdu - 1689 Just a Hook (线段树区间更新)
http://acm.hdu.edu.cn/showproblem.php?pid=1698 n个数初始每个数的价值为1,接下来有m个更新,每次x,y,z 把x,y区间的数的价值更新为z(1<= ...
随机推荐
- Linux下memcache的安装
memcache是高性能,分布式的内存对象缓存系统,用于在动态应用中减少数据库负载,提升访问速度.目前用memcache解决互联网上的大用户读取是非常流行的一种用法,在互联网企业中有着广泛的应用.关 ...
- mysql用户名密码忘记了解决方法
今天想用一下实验室服务器的mysql,发现不记得用户名密码了. 解决方法如下: 1. 保证服务器处于安全的状态,如果可以请拔掉网线...(不过我跳过了这一步,额) 2. 修改/etc/my.cnf文件 ...
- 必须掌握的八个cmd 命令
一,ping 它是用来检查网络是否通畅或者网络连接速度的命令.作为一个生活在网络上的管理员或者黑客来说,ping命令是第一个必须掌握的DOS命令,它 所利用的原理是这样的:网络上的机器都有唯一确定的I ...
- css性能优化
1.前端 1.1.减少http请求次数: 1.1.1先了解下HTTP对性能的影响,HTTP是浏览器和服务器通过Interet进行相互通信的协议.HTTP是一种客服端/服务器协议,有请求和响应构成. 浏 ...
- Swift中文教程 第2章 基本运算符 (20140604更新)
今天我在下午又进行了新的翻译,之前我翻译的大家有没有看啊,感觉如何,我昨天下午不小心点了什么原先的文章都没了,大家的评论也没了,现在我也找不回来了,希望大家能继续给我新的评论和支持点个推荐,毕竟现在学 ...
- XmlSerializer(Type type, Type[] extraTypes) 内存泄漏
在使用XmlSerializer进行序列化或者反序列的时候,对于下面的两个构造方法 XmlSerializer(Type)XmlSerializer.XmlSerializer(Type, Strin ...
- 特殊字符转义&时间格式化&获取URL参数
/*特殊字符转义*/ function htmlspecialchars (str) { var str = str.toString().replace(/&/g, "&& ...
- LintCode Anagrams
(记得import java.util.HashMap及Arrays, 首先字符串若为空或者数量为零, 则返回一个空的LinkedList) 1. 把string变为char数组, 再进行排序, 之后 ...
- Java实验四
20145113 Java实验四 快捷键 之前没怎么记ISDEA的快捷键,但是熟练使用快捷键可以带来很多的便利,于是先开始学习一些常用的快捷键,就采用它默认的快捷键,这样后期就不会出现冲突,一些and ...
- 设置jdk的编码
在环境变量中: AVA_TOOL_OPTIONS-Dfile.encoding=utf-8 -Duser.language=en -Duser.country=US