hdoj 1698 Just a Hook 【线段树 区间更新】
题目大意:有一段链子。初始的时候是铜的(价值为1),n代表有n段(1~n),输入a, b, c三个数分别表示将从a到b的链子的价值改为c, 最后问你经过多次改变之后的总价值。
策略:这道题是简单的线段树的区间更新。
代码:
#include<stdio.h>
#include<string.h>
#define MAXN 100005
#define LC l, m, rt<<1
#define RC m+1, r, rt<<1|1
int sum[MAXN<<2], laz[MAXN<<2];
void PushUp(int rt)
{
sum[rt] = sum[rt<<1]+sum[rt<<1|1];
}
void PushDown(int rt, int m)
{
if(laz[rt]){
laz[rt<<1] = laz[rt];
laz[rt<<1|1] = laz[rt];
sum[rt<<1] = laz[rt]*(m-(m>>1));
sum[rt<<1|1] = laz[rt]*(m>>1);
laz[rt] = 0;
}
}
void creat(int l, int r, int rt)
{
if(l == r){
sum[rt] = 1;
return;
}
int m = (l+r)>>1;
creat(LC);
creat(RC);
PushUp(rt);
}
void update(int le, int ri, int num, int l, int r, int rt)
{
if(le <= l&&r <= ri){
laz[rt] = num;
sum[rt] = num*(r-l+1);
return;
}
PushDown(rt, r-l+1);
int m = (l+r)>>1;
if(le <= m) update(le, ri, num, LC);
if(ri > m) update(le, ri, num, RC);
PushUp(rt);
}
int main()
{
int t, n, m, v = 1;
scanf("%d", &t);
while(t --){
memset(sum, 0, sizeof(sum));
memset(laz, 0, sizeof(laz));
scanf("%d", &n);
creat(1, n, 1);
scanf("%d", &m);
int a, b, c;
while(m --){
scanf("%d%d%d", &a, &b, &c);
update(a, b, c, 1, n, 1);
}
printf("Case %d: The total value of the hook is %d.\n", v++, sum[1]);//由于是直接求总价值,直接输出sum[1]就能够了
}
return 0;
}
题目链接:http://acm.hdu.edu.cn/showproblem.php?
pid=1698
AC by SWS
hdoj 1698 Just a Hook 【线段树 区间更新】的更多相关文章
- (简单) 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标记,那么你对于一个区间更新的话是要对其所有的子区间都更新一次,但如果用 ...
- 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 ...
- HDU 1698 Just a Hook(线段树 区间替换)
Just a Hook [题目链接]Just a Hook [题目类型]线段树 区间替换 &题解: 线段树 区间替换 和区间求和 模板题 只不过不需要查询 题里只问了全部区间的和,所以seg[ ...
- [HDU] 1698 Just a Hook [线段树区间替换]
Just a Hook Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- hdu - 1689 Just a Hook (线段树区间更新)
http://acm.hdu.edu.cn/showproblem.php?pid=1698 n个数初始每个数的价值为1,接下来有m个更新,每次x,y,z 把x,y区间的数的价值更新为z(1<= ...
- 【原创】hdu1698 Just a Hook(线段树→区间更新,区间查询)
学习线段树第二天,这道题属于第二简单的线段树,第一简单是单点更新,这个属于区间更新. 区间更新就是lazy思想,我来按照自己浅薄的理解谈谈lazy思想: 就是在数据结构中,树形结构可以线性存储(线性表 ...
- hdu1698 Just a hook 线段树区间更新
题解: 和hdu1166敌兵布阵不同的是 这道题需要区间更新(成段更新). 单点更新不用说了比较简单,区间更新的话,如果每次都更新到底的话,有点费时间. 这里就体现了线段树的另一个重要思想:延迟标记. ...
- HDU1698:Just a Hook(线段树区间更新)
Problem Description In the game of DotA, Pudge’s meat hook is actually the most horrible thing for m ...
随机推荐
- iOS 设置UILabel 的内边距
iOS 设置UILabel 的内边距 - (void)drawTextInRect:(CGRect)rect { UIEdgeInsets insets = {, , , }; [super draw ...
- JSP实现数据传递(web基础学习笔记三)
get和post的区别: JSP内置对象: 1)out内置对象:out内置对象是在JSP开发过程中使用得最为频繁的对象,然而其使用起来也是最简单的.out对象用于向客户端浏览器输出数 ...
- __inline定义的内联函数和宏的区别
转自:http://blog.csdn.net/lw370481/article/details/7311668 函数与宏 #define TABLE_COMP(x) ((x)>0?(x):0) ...
- java 设计模式大全
在线学习网址: http://www.runoob.com/design-pattern/
- SSO是什么?
SSO英文全称Single Sign On,单点登录.SSO是在多个应用系统中,用户只需要登录一次就可以访问所有相互信仸的应用系统.它包括可以将这次主要的登录映射到其他应用中用亍同一个用户的登录的机制 ...
- 通过Js对电话和姓名身份证等进行部分隐藏处理
在进行web前端页面开发中,有时需要从后台获取用户数据来显示在前台页面,但是考虑到用户信息安全的问题,就需要对这些信息进行处理,使其不完全显示出来,例如姓名,两个字的显示姓,名字用*代替,电话前三位和 ...
- ecipse theme
市场里搜“jeeeyul's Eclipse Themes”
- bzr登陆加密
bzr提示:You have not informed bzr of your Launchpad ID, and you must do this towrite to Launchpad or a ...
- VB.NET服务器端令客户端下载PDF文件
后台JS调用另一个控件,通过SESSION传递sDocumentPath 控件后台代码如下 Response.Clear() '如果不清,则有可能将页面源码作为文件内容的一部分传递给用户 ...
- 500 OOPS: chroot
FTP登录时报错: 1.500 OOPS: chroot 解决方法:关闭SElinux 2.500 OOPS: vsftpd: refusing to run with writable root i ...