![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
线段树(segment_tree)
Forward in time
永不停止前进
展开
-
A - 敌兵布阵 HDU - 1166(segment_tree的单点修改+区间求和,基础!!)
这道题题意很简单就是如果字符为Q那么就询问[i,j]区间的和,如果为U,那么就更新i点值为j; 线段树基础题目; 那什么是线段树? 我自己是这样理解的: 线段是本质上就是一个区间的映射为一个节点+二叉树的后序遍历;著名的RMQ问题就是很基础的线段树操作; 几何理解: 可以发现线段树就是把区间分块,然后存下对应区间的问题规模(比如这个区间Max或者Min或者Sum或者平均值。。等等); 可以很...原创 2019-08-22 20:02:12 · 125 阅读 · 0 评论 -
B - I Hate It HDU - 1754(线段树单点更新+区间求和)
题意:如果为Q就求[A,B]的最大值,如果是U就更新单点A的值为B; 线段树基础题目: 主要考察二叉树遍历逻辑+线段树基本操作(关于RMQ问题); AC代码: #include<bits/stdc++.h> using namespace std; const int maxn=200000+10; int Tree[maxn<<2],n,m; void Build(i...原创 2019-08-22 20:06:49 · 112 阅读 · 0 评论 -
C - Just a Hook HDU - 1698(线段树+lazy标记+区间更新)
题意:给你n初始化数组全为1,然后给你m个询问,每个询问就是改区间[X,Y]所对应的值为Z; 这道题的主要难点在与push_down和lazy标记;其实我在学习线段树的时候也没太清楚这个lazy有什么用;但是现在明白了; 它是为了减少时间复杂度的;其实线段树的基本操就有: 1.建树; 2.单点更新; 3.区间的RMQ问题; 4.区间更新; 其实这些问题都是基于二叉树的后续遍历而引出来的; 懒惰...原创 2019-08-22 20:25:14 · 110 阅读 · 0 评论 -
线段树基础操作(自己总结的)
#include<bits/stdc++.h> using namespace std; typedef long long ll; const int maxn=1e5+10; int Tree[maxn<<2],lazy[maxn<<2]; int ans=0; void push_up(int root){ Tree[root]=Tree[root<...原创 2019-08-22 21:06:37 · 92 阅读 · 0 评论