数据结构
文章平均质量分 70
PhilipsWeng
这个作者很懒,什么都没留下…
展开
-
Pairing_heap(配对堆)
这个东西在pb_ds中用过。但不知道是什么。然后刚好这几天有空就看了一下。发现其实 很简单。他事实上就只是维护了一颗树而已。我们假设现在有NN个节点,每个节点都带有权值。我们要维护这些节点的一个堆。假设我们要维护一个小根堆。对于每个节点ii,我们都有一个表SonSon维护他所有的儿子,并且还有一个值FaiFa_{i}表示他的父亲。对于这颗树而言,我们保证每个节点的儿子的权值都要大于等于这个节点的权原创 2015-08-29 15:38:45 · 6980 阅读 · 2 评论 -
Improved RMQ
因为有点无聊,所以打了一下这个算法,发现还可以。卡常必备。原问题给定NN个数AiA_i.有QQ个询问,每个询问询问一段区间的最小(大)值。经典做法RMQ问题的经典做法是ST表。即先预处理出Fi,jF_{i,j},表示以ii为起点,长度为2j2^j的一段的最小值是多少。然后在询问的时候直接把区间拆成两段可能重复的区间来取个min。这样预处理的时间复杂度就是O(NlogN).单个询问O(1)。改进方法我原创 2015-10-01 18:03:57 · 1011 阅读 · 0 评论 -
LCT细节注意
LCT的题目中经常会遇到旋根操作,那么就要打一个翻转标记,这样就会引起很多问题。Splay的双旋Splay必须要处理好标记下传的问题,不然由于双旋的特殊性很容易造成问题。一种比较方便的操作方式是在Splay(u)之前先把u的所有父亲的标记都下传。void Splay(int u) { int top = 0; for(int i = u;i;i = T[i].原创 2015-11-15 10:32:27 · 825 阅读 · 0 评论 -
PQ Tree
PQ Tree philipswengPQ树是用来解决将序列全排列,使得某些关键点排列在一起的问题的数据结构。具体操作。 我们将PQ树上的点分为P,Q两种类型,P类型表示其儿子可以任意顺序排列,Q类型表示其儿子可以以从左到右排列或者从右到左排列。 并且PQ树上的一个叶子表示的就是全排列中的一个元素。原创 2015-04-16 10:06:12 · 4065 阅读 · 0 评论 -
WC2016 expr
题目大意要求操作是在线且完全可持久化的。N≤20000,M≤20000,K≤100N \leq 20000,M \leq 20000,K \leq 100题解先考虑一个简单的问题,K=1K = 1。那么很显然,由于运算满足结合律,那么我们可以直接用一颗简单的可持久化Treap就可以完成所有的操作。接下来考虑k>1k > 1。首先很显然的,假设当前要求出F(S)F(S),其中SS为一个表达式,我们可以原创 2016-02-02 19:41:51 · 893 阅读 · 2 评论 -
spoj COT4
有空再写代码吧。不太好写。题目大意一开始有两个字符串集合S,TS,T,里面都只有一个空串。 有55种操作 1. 在SS中选一个字符串SiS_{i},新建一个字符串Snew=Si+cS_{new} = S_i + c,cc是一个小写字母,然后把SnewS_{new}塞进SS中。 2. 在TT中选一个字符串TiT_{i},新建一个字符串Tnew=Ti+cT_{new} = T_i + c,cc是一原创 2015-09-19 21:49:03 · 2199 阅读 · 2 评论 -
HNOI2016模拟 disk
题目大意现在有A,BA,B两个工厂,你有nn天的时间去生产KK张光盘。一开始每张光盘都没有被加工,对于一张光盘,你需要先把他送到AA工厂加工,然后将加工后的光盘送到BB工厂再加工,最终生产出来,注意对于一个工厂每天最多加工一张光盘,但是一天内你可以将一张光盘从AA加工再送到BB处加工。对于AA工厂,其第ii天加工一张光盘的代价为AiA_i,BB工厂为BiB_i。给定N,K,Ai,BiN,K,A_i,原创 2016-03-28 22:03:05 · 1201 阅读 · 1 评论