一、题目

  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 【线段树区间更新】的更多相关文章

  1. FZU-1608 Huge Mission 线段树(更新懒惰标记)

    题目链接: https://cn.vjudge.net/problem/FZU-1608 题目大意: 长度n,m次操作:每次操作都有三个数:a,b,c:意味着(a,b]区间单位长度的价值为c,若某段长 ...

  2. HDU 1556 Color the ball(线段树区间更新)

    Color the ball 我真的该认真的复习一下以前没懂的知识了,今天看了一下线段树,以前只会用模板,现在看懂了之后,发现还有这么多巧妙的地方,好厉害啊 所以就应该尽量搞懂 弄明白每个知识点 [题 ...

  3. hihoCoder 1080 : 更为复杂的买卖房屋姿势 线段树区间更新

    #1080 : 更为复杂的买卖房屋姿势 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho都是游戏迷,“模拟都市”是他们非常喜欢的一个游戏,在这个游戏里面他们 ...

  4. HDU 5023 A Corrupt Mayor's Performance Art(线段树区间更新)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5023 解题报告:一面墙长度为n,有N个单元,每个单元编号从1到n,墙的初始的颜色是2,一共有30种颜色 ...

  5. HDU 4902 Nice boat 2014杭电多校训练赛第四场F题(线段树区间更新)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4902 解题报告:输入一个序列,然后有q次操作,操作有两种,第一种是把区间 (l,r) 变成x,第二种是 ...

  6. HDU 1698 线段树 区间更新求和

    一开始这条链子全都是1 #include<stdio.h> #include<string.h> #include<algorithm> #include<m ...

  7. POJ-2528 Mayor's posters (线段树区间更新+离散化)

    题目分析:线段树区间更新+离散化 代码如下: # include<iostream> # include<cstdio> # include<queue> # in ...

  8. ZOJ 1610 Count the Colors (线段树区间更新)

    题目链接 题意 : 一根木棍,长8000,然后分别在不同的区间涂上不同的颜色,问你最后能够看到多少颜色,然后每个颜色有多少段,颜色大小从头到尾输出. 思路 :线段树区间更新一下,然后标记一下,最后从头 ...

  9. POJ 2528 Mayor's posters (线段树区间更新+离散化)

    题目链接:http://poj.org/problem?id=2528 给你n块木板,每块木板有起始和终点,按顺序放置,问最终能看到几块木板. 很明显的线段树区间更新问题,每次放置木板就更新区间里的值 ...

  10. HDU5039--Hilarity DFS序+线段树区间更新 14年北京网络赛

    题意:n个点的树,每个条边权值为0或者1, q次操作 Q 路径边权抑或和为1的点对数, (u, v)(v, u)算2个. M i修改第i条边的权值 如果是0则变成1, 否则变成0 作法: 我们可以求出 ...

随机推荐

  1. 使用SignTool对软件安装包进行数字签名(一)--制作证书

    一.制作根证书 1.开始菜单-运行-输入cmd,弹出命令行窗体. 2.输入命令:cd /d F:\SignTool,将当前工作目录修改到SignTool路径下. 3.使用makecert命令制作证书, ...

  2. 微服务架构Day03-SpringBoot之web开发配置

    概述 SpringBoot开发: 1.创建SpringBoot应用,选中需要的场景模块. 2.SpringBoot已经默认将场景模块配置好,只需要在配置文件中指定少量的配置(数据库地址,用户名,密码) ...

  3. Leetcode(13)-罗马数字转整数

    罗马数字包含以下七种字符:I, V, X, L,C,D 和 M. 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如, 罗马数字 2 写做 II ,即为两个并列 ...

  4. ORM框架对分表分库之分库和分表指定不同的字段

    ORM框架分库分表已实现了 只分表(根据指定字段) 点我查看demo 只分库(根据指定字段) 点我查看demo 既分库又分表(根据相同的字段) 点我查看demo 上面几点之前我在博客中已经写了使用介绍 ...

  5. 如何在手机上实现 H5 页面全屏显示

    如何在手机上实现 H5 页面全屏显示 fullscreen 隐藏头部地址栏 隐藏底部导航栏 refs xgqfrms 2012-2020 www.cnblogs.com 发布文章使用:只允许注册用户才 ...

  6. 从长度为 M 的无序数组中,找出N个最小的数

    从长度为 M 的无序数组中,找出 N个最小的数 在一组长度为 n 的无序的数组中,取最小的 m个数(m < n), 要求时间复杂度 O(m * n) 网易有道面试题 const minTopK ...

  7. WebAssembly in Action

    WebAssembly in Action 数据加密,反爬虫,防盗链,版权保护,数据追踪,埋点 blogs 加密,js 禁用检测,权限控制 WebAssembly 防盗链 wasm online id ...

  8. full page screen capture in js

    full page screen capture in js html2canvas https://html2canvas.hertzen.com/ https://github.com/nikla ...

  9. taro 进阶指南

    taro 进阶指南 配置 https://nervjs.github.io/taro/docs/config.html https://nervjs.github.io/taro/docs/confi ...

  10. 什么是NGK节点?NGK的节点有什么作用?

    从2018年EOS竞选超级节点火爆整个区块链圈,节点和超级节点就成为了热议的话题,时至今日,热度依然不减.节点是项目生态发展的重要组成部分,超级节点对项目的运行.安全更是起着至关重要的作用.   什么 ...