线段树
guapi2333
这个作者很懒,什么都没留下…
展开
-
P1083 借教室(线段树)
其实我第一次做借教室是用线段树做的2333。显然(额),如果你在分配第个订单时就gg了,那么往后的订单就都没法分配了。那么gg的条件是什么?设数组表示分配完第个订单后第天还有多少个教室供后来的第个后的订单分配,那么,当数组中出现的情况时,表示第天的教室已经被多个订单分配且无法满足所有的前个订单。这时就gg了。所以,我们开一棵线段树维护数组的最小值,将订单看作为第个修改操作,将的所有...原创 2018-11-01 11:38:45 · 349 阅读 · 0 评论 -
树链剖分(2)树剖的较高级应用(P3384 【模板】树链剖分)
参照洛谷模板 P3384 【模板】树链剖分 题意:给你一棵包含n个结点的树,现要求你支持以下操作:1.x到y结点最短路径上所有节点的值都加上z;2.求树从x到y结点最短路径上所有节点的值之和;3.将以x为根节点的子树内所有节点值都加上z;4.求以x为根节点的子树内所有节点值之和。正确的思路是树链剖分套线段树。我们可以求一个dfs序(dfn[]),这个dfs序与之前求to...原创 2018-10-22 21:40:39 · 231 阅读 · 0 评论 -
P2146 [NOI2015]软件包管理器
很好的树剖板子题:操作一:求点x到0的最短路径 经过的结点个数-路径上已安装的软件包的总个数,同时将经过的路径上的所有点标记为已安装。操作二:将子树代表的那段存安装包个数的区间清空(或者是说将其sum值赋值为0)。此处为了实现标记已安装和清空,我们用了一个标记add:add[i]=1:线段树上的点i及其子区间全被赋值为len[];add[i]=2:线段树上的点i及其子区间全被赋...原创 2018-10-23 20:49:23 · 146 阅读 · 0 评论 -
P2590 [ZJOI2008]树的统计
操作:I. CHANGE u t : 把结点u的权值改为tII. QMAX u v: 询问从点u到点v的路径上的节点的最大权值III. QSUM u v: 询问从点u到点v的路径上的节点的权值和标签:树剖+线段树 模板题。转化一下题意:操作1:单点修改。操作2:利用树剖求LCA的过程求经过的点的权值的最大值。操作3:利用树剖求LCA的过程累加经过的点的权值之和。...原创 2018-10-26 13:23:09 · 107 阅读 · 0 评论 -
P3870 [TJOI2009]开关
码力不大,但需要注意标记下方的问题。题解传送门:Code:#include<cstdio>#include<iostream>#define ri register intusing namespace std;const int MAXN=100020;int n,q,k,zuo,you;int l[MAXN<<2],r[MAXN&...原创 2018-10-26 13:37:36 · 126 阅读 · 0 评论 -
P1637 三元上升子序列
标签+线段树+离散化好题。题意:给定一个长度为的序列,问满足的三元组的个数。数据范围:首先,我们知道求满足且的二元组的个数的线段树做法是什么。类比 P1198 [JSOI2008]最大数 ,假设现在有一个数组。我们扫一遍整个序列,扫到时。此时数组存的是在数列中位置下标中大小为的数字的个数。那么此时便可以得到:对于,在中比小的数字的个数。那么对于原问题,。这个过程利用线段树即可完...原创 2018-12-08 18:05:54 · 175 阅读 · 0 评论