线段树
文章平均质量分 54
ZigZagK
一个蒟蒻。
展开
-
线段树Lazy-tag
由来线段树求区间极值的时候,每次都需要修改包含在插入区间的所有节点,这样是不可能承受的!于是lazy思想也就是Lazy-tag是一个非常不错的优化。实现lazy思想的含义就是“要做的时候再做,不然不做”。这听起来不太可能,但实际上根据树的性质,这是可以实现的,只需要使用Lazy-tag: 对于一个节点,我们记录一个tag表示还没有传递下去的值(也就是操作时到这个节点停止了,后面没有遍历过),然后原创 2017-03-17 18:53:52 · 1276 阅读 · 0 评论 -
【线段树】BZOJ2957[楼房重建]题解
题目概述ZigZagK在 (0,0)(0,0) ,有 nn 座建筑(刚开始高度为 00 )和 mm 次改造:把第 ii 个建筑高度改为 yy ,求每次改造后ZigZagK能看见的建筑数量。解题报告吃我分块。这好像是套路题?显然就是要求斜率变大的次数。用线段树维护建筑高度,然后定义一个函数 Find(p,k)Find(p,k) 表示在 pp 节点前放一个斜率 kk 得到的斜率变大原创 2018-01-12 10:34:46 · 313 阅读 · 0 评论 -
【替罪羊树-动态标号+线段树】BZOJ3600[没有人的算术]题解
题目概述定义一种数,这种数只有 00 和 (a,b)(a,b) ,其中 a,ba,b 是这种数。定义 << :1. 00 最小。2. (a,b)<(c,d),c>a(a,b)<(c,d),c>a 。3. (a,b)<(a,c),c>b(a,b)<(a,c),c>b 。现在有 nn 个这种数,刚开始都是 00 。给出 mm 个操作:1.将 a[k]a[k] 赋值为 (a[l],a[r])(a[l],a原创 2017-12-31 00:08:09 · 515 阅读 · 0 评论 -
【树链剖分+李超线段树】BZOJ4515(Sdoi2016)[游戏]题解
题目概述给出 nn 个点的树, mm 个操作,操作有两种:s t a bs\ t\ a\ b :在 s→ts\to t 上的每个点 ii 都插入一个数 a×dis(s,i)+ba\times dis(s,i)+b 。s ts\ t :询问 s→ts\to t 中最小的数。解题报告显然用李超线段树(查了四天了QAQ),由于在树上,所以先树剖。对于 s→ts\to t ,我们的想法肯定是拆成两半:原创 2017-12-17 13:39:40 · 483 阅读 · 0 评论 -
【二分+线段树】BZOJ4552(Tjoi2016&Heoi2016)[排序]题解
题目概述给出一个 nn 的排列,对其进行 mm 次局部排序:将 [L,R][L,R] 升序或降序排序。问最后 pospos 上的数。解题报告又是二分神题Orz,先二分答案 midmid ,就可以把序列按照是否大于 midmid 变为 0101 序列,这样局部排序就变成了 0101 个数查询和区间覆盖。如果最后 pospos 上是 11 ,说明答案不小于 midmid 。示例程序#include<cs原创 2017-12-19 21:17:27 · 434 阅读 · 0 评论 -
【李超线段树】BZOJ3165(Heoi2013)[Segment]题解
题目概述有 nn 个操作,操作有两种:1.插入一条端点为 (a,b),(c,d)(a,b),(c,d) 的线段。2.询问与 x=kx=k 相交的最高线段的标号。解题报告这道题是李超线段树裸题QAQ。说到底,李超线段树就是线段树+标记永久化,所以我们先来说说标记永久化。我们写线段树区间修改一般都用标记下传的形式。实际上,我们也可以不下传,而是在询问的时候把路径上的标记作用叠加起来(比如区间加,标记不下原创 2017-12-10 21:14:23 · 412 阅读 · 0 评论 -
【线段树+Hash】Codeforces452F[Permutation]题解
题目概述一个序列 {an}\{a_n\} 是反等差数列当且仅当:是 nn 的排列。不存在一个长度 >2>2 的子序列使得该子序列是等差数列。给出一个序列,判断该序列是不是反等差数列。解题报告记录 pos(a)pos(a) 表示 aa 在序列中的位置,对于任意 ii ,只要存在任意 kk 使得 pos(ai−k)<i<pos(ai+k)pos(a_i-k)<i<pos(a_i+k) ,就说明该序原创 2017-10-05 17:01:43 · 786 阅读 · 0 评论 -
【平衡树->线段树】HDU4942[Game on S♂play]题解
题目概述给出一棵 nn 个节点的splay和 mm 个操作,操作有:1.左旋 xx 。2.右旋 xx 。3.询问 xx 子树中所有节点的愉快值的乘积,愉快值定义为子树所有节点的总和。解题报告一道假装是平衡树的线段树题……我们知道splay怎么旋转中序遍历不会发生改变,所以可以维护 Lt[i]Lt[i] 表示 ii 控制的区域的左端点, Rt[i]Rt[i] 表示 ii 控制的区域的右端点(yy一下就原创 2017-09-26 21:51:20 · 339 阅读 · 1 评论 -
【线段树】COCI2010-2011(CONTEST#6)[STEP]题解
COCI2010-2011(CONTEST#6)[STEP]题解。原创 2017-06-30 16:02:47 · 861 阅读 · 4 评论 -
线段树
功能线段树是线段组成的(二叉)树,可以解决许多区间问题。因为他的灵活性和较高的效率(二叉树,效率为log2级别的),甚至常常可以取代树状数组和RMQ等区间算法(树状数组只能向上修改,向下取值,RMQ无法即时修正,而线段树这两个问题都可以解决)。需要注意的是线段分两种:不重叠和重叠(点和真正的线段)。下面以不重叠为例。1.建树首先tr[1].L肯定就是左端点,tr[1].R是右端点,然后就需要推左子树原创 2017-03-17 18:43:08 · 514 阅读 · 0 评论 -
【LCT+线段树】BZOJ4817(Sdoi2017)[树点涂色]题解
题目概述有一棵 nn 个点的有根树,其中 11 号点是根节点。每个点有颜色且刚开始颜色不同。定义一条路径的权值是:这条路径上的点(包括起点和终点)共有多少种不同的颜色。可能会进行 mm 次这几种操作:1 x:把点x到根节点的路径上所有的点染上一种没有用过的新颜色。2 x y:求x到y的路径的权值。3 x y:在以x为根的子树中选择一个点,使得这个点到根节点的路径权值最大,求最大权值原创 2018-01-05 13:04:34 · 373 阅读 · 0 评论