FZU_1608 Huge Mission 【线段树区间更新】
一、题目
二、分析
区间更新,用线段树的懒标记即可。需要注意的时,由于是在最后才查询的,没有必要每次更新都对$sum$进行求和。还有一点就是初始化的问题,一定记得线段树上每个点都需要初始化。
三、AC代码
1 #include <cstdio>
2 #include <cstring>
3 #include <iostream>
4 #include <algorithm>
5 #include <vector>
6 #include <cmath>
7
8 using namespace std;
9 #define ll long long
10 #define lson (rt<<1)
11 #define rson (rt<<1|1)
12 #define Min(a,b) ((a)>(b)?(b):(a))
13 #define Max(a,b) ((a)>(b)?(a):(b))
14 const int MAXN = 5e4;
15 struct Node
16 {
17 int lazy, sum;
18 }segTree[MAXN<<2];
19
20 void Push_down(int rt)
21 {
22 if(segTree[rt].lazy > 0) {
23 segTree[lson].lazy = Max(segTree[rt].lazy, segTree[lson].lazy);
24 segTree[rson].lazy = Max(segTree[rt].lazy, segTree[rson].lazy);
25 }
26 }
27
28 void Push_up(int rt)
29 {
30 segTree[rt].sum = segTree[lson].sum + segTree[rson].sum;
31 }
32
33 void Build(int rt, int l, int r)
34 {
35 segTree[rt].lazy = segTree[rt].sum = 0;
36 if(l == r) {
37 return;
38 }
39 int mid = (l + r) >> 1;
40 Build(lson, l, mid);
41 Build(rson, mid + 1, r);
42 Push_up(rt);
43 }
44
45 void Update(int rt, int l, int r, int L, int R, int p)
46 {
47 if(L <= l && r <= R) {
48 segTree[rt].lazy = Max(segTree[rt].lazy, p);
49 return;
50 }
51 int mid = (l + r) >> 1;
52 if(L <= mid)
53 Update(lson, l, mid, L, R, p);
54 if(R > mid)
55 Update(rson, mid + 1, r, L, R, p);
56 }
57
58 void Query(int rt, int l, int r)
59 {
60 if(l == r) {
61 segTree[rt].sum = Max(segTree[rt].sum, segTree[rt].lazy);
62 //cout << l << " : " << segTree[rt].sum << " lazy: " << segTree[rt].lazy << " / " << endl;
63 return;
64 }
65 Push_down(rt); //关键,不是叶子的时候,懒标记一定要下传
66 int mid = (l + r) >> 1;
67 Query(lson, l, mid);
68 Query(rson, mid + 1, r);
69 Push_up(rt); //总和
70 }
71
72 int main()
73 {
74 int N, M;
75 //freopen("input.txt", "r", stdin);
76 while(scanf("%d%d", &N, &M) != EOF) {
77 int S, T, P;
78 //memset(segTree, 0, sizeof(segTree));
79 Build(1, 1, N);
80 for(int i = 0; i < M; i++) {
81 scanf("%d%d%d", &S, &T, &P);
82 //++后相当于是以区间来当点用
83 S++;
84 Update(1, 1, N, S, T, P);
85 }
86 Query(1, 1, N);
87 printf("%d\n", segTree[1].sum);
88
89 }
90 return 0;
91 }
FZU_1608 Huge Mission 【线段树区间更新】的更多相关文章
- FZU-1608 Huge Mission 线段树(更新懒惰标记)
题目链接: https://cn.vjudge.net/problem/FZU-1608 题目大意: 长度n,m次操作:每次操作都有三个数:a,b,c:意味着(a,b]区间单位长度的价值为c,若某段长 ...
- HDU 1556 Color the ball(线段树区间更新)
Color the ball 我真的该认真的复习一下以前没懂的知识了,今天看了一下线段树,以前只会用模板,现在看懂了之后,发现还有这么多巧妙的地方,好厉害啊 所以就应该尽量搞懂 弄明白每个知识点 [题 ...
- hihoCoder 1080 : 更为复杂的买卖房屋姿势 线段树区间更新
#1080 : 更为复杂的买卖房屋姿势 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho都是游戏迷,“模拟都市”是他们非常喜欢的一个游戏,在这个游戏里面他们 ...
- HDU 5023 A Corrupt Mayor's Performance Art(线段树区间更新)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5023 解题报告:一面墙长度为n,有N个单元,每个单元编号从1到n,墙的初始的颜色是2,一共有30种颜色 ...
- HDU 4902 Nice boat 2014杭电多校训练赛第四场F题(线段树区间更新)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4902 解题报告:输入一个序列,然后有q次操作,操作有两种,第一种是把区间 (l,r) 变成x,第二种是 ...
- HDU 1698 线段树 区间更新求和
一开始这条链子全都是1 #include<stdio.h> #include<string.h> #include<algorithm> #include<m ...
- POJ-2528 Mayor's posters (线段树区间更新+离散化)
题目分析:线段树区间更新+离散化 代码如下: # include<iostream> # include<cstdio> # include<queue> # in ...
- ZOJ 1610 Count the Colors (线段树区间更新)
题目链接 题意 : 一根木棍,长8000,然后分别在不同的区间涂上不同的颜色,问你最后能够看到多少颜色,然后每个颜色有多少段,颜色大小从头到尾输出. 思路 :线段树区间更新一下,然后标记一下,最后从头 ...
- POJ 2528 Mayor's posters (线段树区间更新+离散化)
题目链接:http://poj.org/problem?id=2528 给你n块木板,每块木板有起始和终点,按顺序放置,问最终能看到几块木板. 很明显的线段树区间更新问题,每次放置木板就更新区间里的值 ...
- HDU5039--Hilarity DFS序+线段树区间更新 14年北京网络赛
题意:n个点的树,每个条边权值为0或者1, q次操作 Q 路径边权抑或和为1的点对数, (u, v)(v, u)算2个. M i修改第i条边的权值 如果是0则变成1, 否则变成0 作法: 我们可以求出 ...
随机推荐
- 实现基于股票收盘价的时间序列的统计(用Python实现)
时间序列是按时间顺序的一组真实的数字,比如股票的交易数据.通过分析时间序列,能挖掘出这组序列背后包含的规律,从而有效地预测未来的数据.在这部分里,将讲述基于时间序列的常用统计方法. 1 用rollin ...
- mybaits(十)mybatis常见面试
面试题总结 1.MyBatis 解决了什么问题? 或:为什么要用 MyBatis? 或:MyBatis 的核心特性? 1)资源管理(底层对象封装和支持数据源) 2)结果集自动映射 3)SQL 与代 ...
- BZOJ 3676 回文串(回文树)题解
题意: 一个回文的价值为长度 * 出现次数,问一个串中的子串的最大回文价值 思路: 回文树模板题,跑PAM,然后计算所有节点出现次数. 参考: 回文串问题的克星--Palindrome Tree(回文 ...
- tfrecords转np.array
import tensorflow as tf import numpy as np from keras.utils import to_categorical import sys def tfr ...
- Monorepo All In One
Monorepo All In One monorepos 只是一种思想,或设计模式,架构风格 https://trunkbaseddevelopment.com/monorepos/ Lerna h ...
- Node.js _dirname & path All In One
Node.js _dirname & path All In One file path 相对路径 绝对路径 _dirname https://nodejs.org/docs/latest/a ...
- Node.js & ES Modules & Jest
Node.js & ES Modules & Jest CJS & ESM CommonJS https://en.wikipedia.org/wiki/CommonJS ht ...
- Cookie 政策
Cookie 政策 合规/隐私协议 https://www.synology.cn/zh-cn/company/legal/cookie_policy Cookie Cookie 政策 生效日期:20 ...
- 什么是USDN稳定币?USDN的应用价值是什么?
9月22日,美国货币监理署(OCC)发布了一项稳定币指南,主要内容围绕的是稳定币的监管及相关规定.一时间,稳定币得到了市场上广泛的关注.那么,什么是稳定币呢?什么又是USDN稳定币呢? 1.什么是稳定 ...
- 源码分析:Exchanger之数据交换器
简介 Exchanger是Java5 开始引入的一个类,它允许两个线程之间交换持有的数据.当Exchanger在一个线程中调用exchange方法之后,会阻塞等待另一个线程调用同样的exchange方 ...