hdu 1698 Just a Hook(线段树基础)
成段更新的线段树,加入了延时标记............
线段树这种东西细节上的理解因人而异,还是要自己深入理解......慢慢来
#include <iostream>
#include <algorithm>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <string>
#include <vector>
#include <set>
#include <queue>
#include <stack>
#include <climits>//形如INT_MAX一类的
#define MAX 100005
#define INF 0x7FFFFFFF
#define REP(i,s,t) for(int i=(s);i<=(t);++i)
#define ll long long
#define mem(a,b) memset(a,b,sizeof(a))
#define mp(a,b) make_pair(a,b)
#define L(x) x<<1
#define R(x) x<<1|1
# define eps 1e-5
//#pragma comment(linker, "/STACK:36777216") ///传说中的外挂
using namespace std;
struct node {
int left,right,mid,value,add;
} edge[4*MAX]; void push_up(int x) {
edge[x].value = edge[x << 1].value + edge[x << 1 | 1].value ;
} void build(int l,int r,int num) {
//l,r为当前节点的左右端点,num为当前节点在数组中的下标
edge[num].left = l;
edge[num].right = r;
edge[num].mid = (l+r) >> 1;
edge[num].add = 0;
if(l == r) {
edge[num].value = 1;
return ;
}
if(l != r) { // 如果不是叶子节点
build(l,edge[num].mid,num * 2); //左子树
build(edge[num].mid + 1,r,num*2+1); //右子树
}
push_up(num); } void push_down(int x) {
if(edge[x].add) {
edge[x << 1].value = (edge[x << 1].right - edge[x << 1].left + 1 ) * edge[x].add ;
edge[x << 1 | 1].value = (edge[x << 1 | 1].right - edge[x << 1 | 1].left + 1) * edge[x].add ;
edge[x << 1].add = edge[x].add ;
edge[x << 1 | 1].add = edge[x].add ;
edge[x].add = 0 ;
}
}
void update(int l, int r, int k, int num) {
if(edge[num].left >= l && edge[num].right <= r) {
//当前区间包含于更新区间
edge[num].add = k;
edge[num].value = (edge[num].right - edge[num].left + 1) * k;
return;
}
push_down(num);
if(edge[num].mid < l) update(l, r, k, num*2+1);
else if(edge[num].mid >= r) update(l, r, k, num*2);
else {
update(l, edge[num].mid, k, num*2);
update(edge[num].mid + 1, r, k, num*2+1);
}
push_up(num); } int query(int l,int r,int num) {
if(l <= edge[num].left && r >= edge[num].right) {
return edge[num].value;
}
//push_down(num);
if(r <= edge[num].mid)
return query(l,r,num*2);
else if(l >= edge[num].mid + 1)
return query(l,r,num *2+1);
else {
return query(l,edge[num].mid,num*2) + query(edge[num].mid+1,r,num*2+1);
}
} int main() {
int t,n,i;
cin >> t;
int casee = 1;
while(t--) { scanf("%d",&n);
build(1,n,1);
int m,a,b,c;
scanf("%d",&m);
while(m --) {
scanf("%d%d%d",&a,&b,&c);
update(a,b,c,1);
}
printf("Case %d: ",casee++);
printf("The total value of the hook is %d.\n",query(1,n,1));
}
return 0;
}
hdu 1698 Just a Hook(线段树基础)的更多相关文章
- 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(线段树 区间替换)
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) Tota ...
- HDU 1698 Just a Hook (线段树 成段更新 lazy-tag思想)
题目链接 题意: n个挂钩,q次询问,每个挂钩可能的值为1 2 3, 初始值为1,每次询问 把从x到Y区间内的值改变为z.求最后的总的值. 分析:用val记录这一个区间的值,val == -1表示这 ...
- [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 , 线段树+区间更新。
Description: In the game of DotA, Pudge’s meat hook is actually the most horrible thing for most of ...
- 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 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(线段树区间替换)
题目地址:pid=1698">HDU 1698 区间替换裸题.相同利用lazy延迟标记数组,这里仅仅是当lazy下放的时候把以下的lazy也所有改成lazy就好了. 代码例如以下: # ...
- HDU 1698 Just a Hook 线段树区间更新、
来谈谈自己对延迟标记(lazy标记)的理解吧. lazy标记的主要作用是尽可能的降低时间复杂度. 这样说吧. 如果你不用lazy标记,那么你对于一个区间更新的话是要对其所有的子区间都更新一次,但如果用 ...
随机推荐
- CKPlayer从Cookie里读取上次播放记录的一个demo
<!DOCTYPE html><html><head> <meta http-equiv="Content-Type" content=& ...
- MVC扩展ModelBinder使类型为DateTime的Action参数可以接收日期格式的字符串
原文:MVC扩展ModelBinder使类型为DateTime的Action参数可以接收日期格式的字符串 如何让视图通过某种途径,把符合日期格式的字符串放到路由中,再传递给类型为DateTime的控制 ...
- HDU 3094 A tree game 树删边游戏
叶节点SG值至0 非叶节点SG值至于它的所有子节点SG值添加1 XOR和后 #include <cstdio> #include <cstring> #include < ...
- 关于phpcms中模块_tag.class.php中的pc_tag()方法的含义
关于phpcms中模块_tag.class.php中的pc_tag()方法的含义: 在phpcms系统中自己写后台模块,要在前台模板中显示出来须要在\phpcms\modules\自定义 ...
- intellij idea 13&14 插件推荐及快速上手建议 (已更新!)
原文:intellij idea 13&14 插件推荐及快速上手建议 (已更新!) 早些年 在外企的时候,公司用的是intellij idea ,当时也是从eclipse.MyEclipse转 ...
- 基于4.5Framework web程序、SQLSERVER数据库打包
原文:基于4.5Framework web程序.SQLSERVER数据库打包 估计很多朋友和我一样,对于C/S程序打包很熟悉,但对于B/S程序打包一头雾水... 最近公司要求我们把项目和数据库(SQL ...
- Elegant Box主题wpdb::prepare() 报错[已解决]
整理书签,发现个网页,是解决Elegant Box主题与新版Wordpress3.5主题不兼容的(3.5改了一个函数的参数个数所致).记得当时使用NeoEase出的主题的时候两次遇到这个问题,费了点功 ...
- C#的StringBuilder 以及string字符串拼接的效率对照
今天公司一个做Unity3d的人在说字符串拼接的一个效率问题,他觉得string拼接会产生新的一个内存空间,假设不及时回收会产生大量的碎片,特别是在Unity3d这样一个Updata环境下,由于每一帧 ...
- 使用JSmooth制造java jar文件可以运行exe文件教程图像
这是我之前在个人博客3yj上面写的一篇文章,如今转载过来,原文地址 (这不是广告哦) 几年前,刚接触java的是.就想用一些方法把自己的劳动果实保护起来,曾经也用过非常多这种工具.有一个特别好用,今天 ...
- 高效DevOps的10项实践
高效DevOps的10项实践 原文链接: http://www.drdobbs.com/architecture-and-design/top-10-practices-for-effective-d ...