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 作法: 我们可以求出 ...
随机推荐
- spring再学习之注解
1.使用注解配置spring <?xml version="1.0" encoding="UTF-8"?> <beans xmlns:xsi= ...
- Linux 驱动框架---设备文件devfs
设备文件系统 Linux引入了虚拟文件系统,从而使设备的访问可以像访问普通文件系统一样.因此在内核中描述打开文件的数据inode中的rdev成员用来记录设备文件对应到的设备号.设备文件也由一个对应的f ...
- Linux 驱动框架---驱动中的异步
异步IO是对阻塞和轮询IO的机制补充,所谓异步IO就是在设备数据就绪时主动通知所属进程进行处理的机制.之所以说是异步是相对与被通知进程的,因为进程不知道也无法知道什么时候会被通知:这一机制非常类似于硬 ...
- VSCode 开放式架构的产品实现思路
VSCode 开放式架构的产品实现思路 https://code.visualstudio.com/ 源码 https://github.com/microsoft/vscode https://gi ...
- React.createClass vs. ES6 Class Components
1 1 1 https://www.fullstackreact.com/articles/react-create-class-vs-es6-class-components/ React.crea ...
- Array.fill & array padding
Array.fill & array padding arr.fill(value[, start[, end]]) https://developer.mozilla.org/en-US/d ...
- ts 函数重载
class User { constructor(public readonly name: string, public readonly value: Function) {} } class D ...
- c++ 遍历当前程序的线程
#include <iostream> #include <Windows.h> #include <Psapi.h> #include <TlHelp32. ...
- 呼叫河马——搭建在NGK公链上的去中心化智能合约DAPP
基于区块链技术发展的DAPP是一种分布式应用生态系统.目前最受DAPP欢迎的区块链有以太坊.EOS.波场等公链. 但由于当前 EOS资源模型的局限性,使得其使用成本较高.尽管 EOS的DPOS共识机制 ...
- JUC并发编程学习笔记
JUC并发编程学习笔记 狂神JUC并发编程 总的来说还可以,学到一些新知识,但很多是学过的了,深入的部分不多. 线程与进程 进程:一个程序,程序的集合,比如一个音乐播发器,QQ程序等.一个进程往往包含 ...