线段树分裂 以某个键值为中点将线段树分裂成左右两部分,应该类似Treap的分裂吧(我菜不会Treap)。一般应用于区间排序。 方法很简单,就是把分裂之后的两棵树的重复的\(\log\)个节点新建出来,单次时间复杂度严格\(O(\log n)\)。 至于又有合并又有分裂的复杂度,蒟蒻一直不会比 ...
线段树维护栈 单调栈 学习笔记 前言 俗话说的好: 线段树玩得好,暴踩某人陀螺Treap 线段树玩得六,暴碾聋跌随机数 用途 经常用于处理序列问题,这个序列经常会带一些性质,如: 前面的会对后面的造成影响 序列必须满足一些性质 递增 递减等等 拥有线段树的优良性质:可支持单点 区间修改 单点 区间查询。 至于它怎么和栈扯上关系的, emmmm ,大概暴力可以用栈做。 特点 最为突出的特点是与平常 ...
2020-10-22 18:39 4 277 推荐指数:
线段树分裂 以某个键值为中点将线段树分裂成左右两部分,应该类似Treap的分裂吧(我菜不会Treap)。一般应用于区间排序。 方法很简单,就是把分裂之后的两棵树的重复的\(\log\)个节点新建出来,单次时间复杂度严格\(O(\log n)\)。 至于又有合并又有分裂的复杂度,蒟蒻一直不会比 ...
单调栈 单调栈简介 单调栈本质就是栈,其元素保持单调。单调栈实际上就是栈,只是利用了一些巧妙的逻辑,使得每次新元素入栈后,栈内的元素都保持有序(单调递增或单调递减) 从栈底到栈顶,依次递减的是单调递减栈。 从栈底到栈顶,依次递增的是单调递增栈。 构造单调栈,可以用于解决数组 ...
单调栈,顾名思义,就是一个元素递增(或递减)的栈。 一个单调递增的单调栈可以在$O(n)$的复杂度内求得序列内一个元素向左或向右第一个小于等于该元素的元素位置。 比如该序列为$1,5,2,6,4,3$ $1$进栈,栈内无元素,\(L_1=0\) \((1)\) $5$进栈,无出栈 ...
1.单调栈简介 单调栈是一种数据结构,它里边存放的数据具有单调性,每个元素都只进栈一次,进栈时会把破坏栈的单调性的元素弹出。用代码表示就是: 弹出的元素不会再进栈,所以单调栈的复杂度为O(n)。 2.单调栈的功能 单调栈可以寻找每个元素前第一个比它大(小)的数,举个例子,30 ...
前言 写得确实挺烂的,当时码风也不怎么样,不喜勿喷. 线段树 线段树的作用&原理 线段树是一种二叉搜索树,与区间树相似,它将一个区间划分成一些单元区间,每个单元区间对应线段树中的一个叶结点。 使用线段树可以快速的查找某一个节点在若干条线段中出现的次数,时间复杂度为O(logn ...
笛卡尔树 何为笛卡尔树? 对于一组关系\(fa, ls, rs\) 满足\(pri[fa] \geqslant max(pri[ls], pri[rs])\) 以及\(val[rs] \geqslant val[fa] \geqslant val[ls]\) 如何构建笛卡尔树 ...
初谈这个话题,相信许多人会有一种似有所悟,但又不敢确定的感觉。没错,这正是因为其中“单调”一词的存在,所谓单调是什么,学过函数的people都知道单调函数或者函数的单调性,直白一点说单调就是一直增或一直减。例如:1,3,5,9就是一个单调增数列,数列中不存在后一个数比前一个数小的现象 ...
http://www.cnblogs.com/tham/p/8038828.html 首先看一个问题。 给定一个数列,从左至右输出每个长度为\(k\)的数列段内的最小数和最大数(第一行输出每个区间 ...