Splay
ModestCoder_
一个modest的coder
展开
-
[题解]LuoGu1486:[NOI2004]郁闷的出纳员
原题传送门四个操作I k:插入值为k的节点A k:所有节点+kS k:所有节点-kF k:所有节点kth同时任何时刻,节点值<min时,删除节点第一眼简直线段树,标记没问题,但是本题需要动态删点,线段树无法完成需要平衡树依然标记 思想,全局开一个delta变量加减直接统计到delta里四个操作可以这样完成:I k:insert(k−delta)insert(k-...原创 2019-05-20 20:10:01 · 306 阅读 · 0 评论 -
[题解]LuoGu4146:序列终结者
原题传送门序列终结者,用它来终结我这一阶段SplaySplaySplay的练习再好不过了。。三个操作,区间加,区间翻转,区间最值最近以Splay为核心,看到翻转就想到用Splay,加和翻转用懒标记可以解决,同时可以维护一个最值,由pushup来更新size和mx(区间最值数组)Code:#include <iostream> #include <cstdio>...原创 2019-06-02 13:01:50 · 358 阅读 · 0 评论 -
[题解]LuoGu2596:[ZJOI2006]书架
原题传送门按顺序排列的数,每个数有权值先确定好:权值只在输出用,在Splay中没用,按顺序建立Splay分别确定每个操作的做法:TopTopTop SSS:将自己旋到根,把左儿子并成后继的左儿子,这样自己就成了top了,注意没有儿子的情况BottomBottomBottom SSS:将自己旋到根,把右儿子并成前驱的右儿子,这样自己就成了Bottom了,注意没有儿子的情况InsertI...原创 2019-05-23 18:14:24 · 305 阅读 · 0 评论 -
【题解】LuoGu3165: [CQOI2014]排序机械臂
原题传送门翻转就意味着Splay然后肯定是先按顺序加入splay首先找一找这道题有没有什么特点发现每一个pipipi,在它前面的,两种情况:权值比自己小,说明肯定在自己之前翻转到自己前面权值比自己大,但位置在自己前面,这一点用splay维护翻转没毛病总的来说,求pi很简单,其实只要把pi在二叉树中对应的点找到,旋到根,左儿子的size+1就是答案,其他的就是模板了细节还是要注意...原创 2019-05-18 20:24:10 · 367 阅读 · 1 评论 -
[题解]LuoGu3224:[HNOI2012]永无乡
原题传送门这个貌似叫SplaySplaySplay dsudsudsu首先,这是个跟联通块有关的问题,所以需要用上并查集然后,联通块的第k大当然是用SplaySplaySplay维护了可以对于每个点,都建一棵SplaySplaySplay,对(1~n)点用并查集维护联通点内用Splay维护kthkthkth值得一提的是本题需要用到SplaySplaySplay的合并,做法是将size小...原创 2019-05-27 20:04:33 · 280 阅读 · 0 评论 -
[题解]LuoGu2286:[HNOI2004]宠物收养场
原题传送门splaysplaysplay很显然按照特点值建一棵Splay然后需要在宠物与人之间切换维护typetypetype表示当前splay类型做法:当前Splay为空,直接insertinsertinsert,并将type赋为当前类型(宠物/人)类型与当前splay相同,直接插入类型不同,讨论splay中元素个数只剩1个:统计ans,删除元素,type变为2还剩多个:先...原创 2019-05-22 21:31:26 · 287 阅读 · 0 评论 -
【题解】LuoGu4008:[NOI2003]文本编辑器
原题传送门SplaySplaySplay练手好题光标的位置可以用一个变量pospospos表示,另,本题还需插入两个哨兵(想一想为什么)具体做法如下MOVE(k)MOVE(k)MOVE(k):直接pos=k+1pos=k+1pos=k+1,至于为什么+1是因为最前面有一个哨兵INSERT(n,s)INSERT(n,s)INSERT(n,s):首先得解决读入问题,之后,将光标(kth(p...原创 2019-05-26 08:55:39 · 327 阅读 · 0 评论 -
【学习笔记】Splay
模板题链接1、引入一种二叉树,这棵树满足任意一个节点,它的左儿子的权值<自己的权值<右儿子的权值这种树叫做二叉查找树,这个概念应该在初赛中见过了吧Splay就是利用这个结构来实现的2、变量模板题的7大变量sz:表示当前节点个数rt:表示当前根节点的编号f[x]:表示编号x节点的父亲的编号key[x]:表示编号为...原创 2019-05-12 20:22:42 · 8236 阅读 · 2 评论 -
[题解]LuoGu2343:宝石管理系统
原题传送门一眼树状数组水过,然后发现可以用splaysplaysplay就来练手啦十分基本的insert与kth操作然后因为查询的是第k大,所以我改了一下kth本来是先跟左儿子的size比较,现在我先跟右儿子的size比较因为“左中右”的遍历出来结果是从小到大的那么我“右中左”出来就是从大到小的Code:#include <bits/stdc++.h>#defin...原创 2019-05-21 18:59:49 · 266 阅读 · 0 评论 -
[题解]LuoGu2073:送花
原题传送门可以用来练手splay需要以下:insert(x)insert(x)insert(x):往下跑,若跑到空点,新开一个;若有重复,returnMin()Min()Min():找到树中最便宜的点的编号,只要一直往左儿子跑就行了Max()Max()Max():找到树中最昂贵的点的编号,只要一直往右儿子跑就行了pre()pre()pre():找前驱del(x)del(x)del(...原创 2019-05-20 21:23:13 · 322 阅读 · 0 评论 -
[题解]LuoGu2234:[HNOI2002]营业额统计
原题传送门法1 Splay每次insert之后,当前点已经旋到根,找到前驱后继,减一减计较,较小的那个统计到ans里码量太长弱点~~Code:#include <bits/stdc++.h>#define maxn 100010#define LL long longusing namespace std;int rt, sz, f[maxn], val[maxn],...原创 2019-06-04 18:57:10 · 321 阅读 · 0 评论