
-------data structures--------
文章平均质量分 84
Iking123
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
左偏树&二项堆&斐波那契堆
左偏树定义左偏树(leftist tree 或 leftist heap),又被成为左倾堆、左偏堆,最左堆等。左倾树是一棵二叉树,它的节点除了和二叉树的节点一样具有左右子树指针外,还有两个属性:键值和零距离。(01) 键值的作用是来比较节点的大小,从而对节点进行排序。(02) 零距离(英文名NPL,即Null Path Length)则是从一个节点到一个"最近的不满节点"的路径长度。不满节点...原创 2019-04-05 16:06:50 · 1112 阅读 · 1 评论 -
圆方树/广义圆方树学习小记(gradually update...)
前言 日前,B组混进了几道仙人掌/无向图上乱搞的问题。正解就是这种我之前听都没听说过的数据结构——圆方树。定义仙人掌 先允许我介绍一下仙人掌。 一般而言,仙人掌的定义是:1)无向图;2)每条边最多在一个简单环中。这样就很毒瘤。 但有一些题不大一样,它的定义是这样的(据说国外的定义都是这样):1)无向图;2)每个点最多在一个简单环中。 不过,你不必太担心...原创 2018-07-14 21:44:10 · 2110 阅读 · 0 评论 -
【JZOJ3463】【NOIP2013模拟联考5】军训(training)(单调栈+二分+DP+线段树优化)
ProblemHYSBZ 开学了!今年HYSBZ 有n 个男生来上学,学号为1…n,每个学生都必须参加军训。在这种比较堕落的学校里,每个男生都会有Gi 个女朋友,而且每个人都会有一个欠扁值Hi。学校为了保证军训时教官不会因为学生们都是人生赢家或者是太欠扁而发生打架事故,所以要把学生们分班,并做出了如下要求:1.分班必须按照学号顺序来,即不能在一个班上出现学号不连续的情况。2.每个学生必...原创 2018-07-19 21:52:58 · 579 阅读 · 0 评论 -
【JZOJ4372】【GDOI2016模拟】识别子串(SAM+线段树)
Problem 给定一个长为L(≤100000)的字符串S,对于S中的每一个位置k,求包含它且在S中仅出现一次的子串的最短长度。(即i≤k≤j,且S(i..j)在S中仅出现一次)Solution这道题的AC经历让我懂得了一个道理——做字符串的题,只要不是哈希,就往SAM的方面想。。。预备知识:后缀自动机(SAM)。 首先,我们知道,SAM中的每一个状态表示一坨长度...原创 2018-07-13 21:22:38 · 394 阅读 · 0 评论 -
【JZOJ4645】【NOI2016模拟7.16】基因改造计划(Manacher+主席树)
Problem 给定一个长度为n的字符串S和m个询问,每次询问给出区间[l,r],求区间S[l..r]内回文子串的个数。HintSolution20points:Manacher or 回文自动机 第0~3个点的n*m较小,我们可以直接把询问区间提取出来,O(n)O(n)O(n)做一遍Manacher或者回文自动机。 时间复杂度:O(nm)O(nm)O...原创 2018-07-03 19:17:48 · 304 阅读 · 0 评论 -
【JZOJ3325】【BJOI2013 load】压力(广义圆方树+LCA+树上差分)
Problem 给定一个N(≤100000)个点、M(≤200000)条边的连通图,以及Q(≤200000)个点对(u,v)。求删除每个点后分别会有多少个点对不连通。Solution考虑求出每个点对(u,v)的(搜索树)路径中,会造成影响的点。这看似就是u到v路径上的割点,实则不是。例如下图: 个中4到2有一条返祖边。设有个点对为(2,5),该路径上的点3为割点。因为删除点...原创 2018-07-10 08:03:15 · 670 阅读 · 0 评论 -
【JZOJ5710】【北大夏令营2018模拟5.13】Mex(主席树)
Problem 给定长度为 n 的序列 a。现有 m 次询问,每次给定 l 和 r,询问区间 [l,r] 的数构成的集合的 mex 值。给定数据类型t,当t=1时强制在线。HintSolution算法Ⅰ:线段树 70points的数据允许离线,所以我们故意想一想离线。 我们可以将询问按左端点排序,然后依次枚举每个位置作为左端点,预处理出每个位置作为右端点的me...原创 2018-06-01 12:24:26 · 434 阅读 · 0 评论 -
【JZOJ3599】【CQOI2014】排序机械臂(splay or 非旋treap区间翻转)
ProblemHint对于30%的数据 1<=n<1000对于100%的数据 1<=n<=100000 ,1<=ai<=2,000,000,000Solutionsplay 先讲一讲splay吧。 考虑以物品的序号为下标建一棵splay,维护物品的中序遍历。 首先排个序,确定每次找到的是哪个数。 设这次找到...原创 2018-06-20 20:37:09 · 229 阅读 · 0 评论 -
【JZOJ4090】树上三角形(triangle)(LCT or splay)
Problem给定一个n个点的以1为根的树,每个点有一个正整数点权。 有q个操作,每个操作为以下类型之一: 1. 1 u v 询问树上所有在u到v的简单路径的节点(含u,v)中,是否存在三个不同的节点,使得以这三个节点的点权为边长的三条边能够构成一个三角形。 2. 2 u v 将节点u的权值改成v。 3. 3 u v 若节点v不在以节点u为根的子树里,那么令u的父节点为v,否则令v的父...原创 2018-05-14 20:47:35 · 375 阅读 · 0 评论 -
【JZOJ3336】【NOI2013模拟】坑带的树(圆方树+计数问题+hashing)
Problem 定义仙人掌树为:1)无向图;2)每个点最多在一个简单环中。给定一棵N(≤1000)个点、M条边的仙人掌树(保证没有重边),求这棵仙人掌树的同构数量。Solution首先,将原仙人掌转化成一棵圆方树。因为对于每个仙人掌,都有且仅有一棵对应的圆方树,故原题可转化为这棵圆方树的同构数量。不能使用普通的树的同构的计数方法。因为对于普通的树,其形态相同的子树均可随意换位...原创 2018-07-15 07:42:58 · 562 阅读 · 0 评论 -
【NOI2018day1】归程(最短路+kruskal重构树+并查集+倍增)
Problem 给定一个n(≤2∗105)n(≤2∗105)n(≤2*10^5)个节点、m(≤4∗105)m(≤4∗105)m(≤4*10^5)条边的无向连通图,用l(≤104)l(≤104)l(≤10^4),a(≤109)a(≤109)a(≤10^9)描述一条边的长度、海拔。 给定Q(≤4∗105)Q(≤4∗105)Q(≤4*10^5)天,每天给出出发节点v和水位线p。所有海拔**不...原创 2018-08-05 21:07:45 · 616 阅读 · 0 评论 -
【JZOJ5947】【NOIP2018模拟11.02】初音未来(miku)(逆序对排序+线段树)
DescriptionHercier作为一位喜爱Hatsune Miku的OIer,痛下决心,将Vocaloid买回了家。打开之后,你发现界面是一个长为n的序列,代表音调,并形成了全排列。你看不懂日语,经过多次尝试,你只会用一个按钮:将一段区间按升序排序。不理解音乐的Hercier决定写一个脚本,进行m次操作,每次对一段区间进行操作。可惜Hercier不会写脚本,他找到了在机房里的你,请你模拟...原创 2018-11-02 16:25:27 · 433 阅读 · 0 评论 -
【JZOJ5871】【NOIP2018模拟9.15】挑战(线段树+线段树二分)
ProblemHintSolution首先,我们先求出未操作时的ans。对于一个令Px=yPx=yP_x=y的操作,显然,若ans<x,则ans不变;否则,ans应为区间[x,n]中某一点。设ans当前在位置t,观察一下它会如何变化。记pre=∑ti=1Pipre=∑i=1tPipre=\sum_{i=1}^t P_i,若pre=2Pipre=2Pip...原创 2018-09-15 17:04:37 · 328 阅读 · 0 评论 -
【JZOJ4419】【GDOI2016模拟4.2】hole(四~三维偏序问题)
Problem给出n次事件,每次事件给出三个非负整数x,y,d。d=0表示在点(x,y)打了一个洞;否则表示询问由(x,y),(x+d,y),(x,y+d)三点围成的三角形中洞的个数。Hint30%的数据n<=3333 。 另30% 的数据 GFS只会在DSJ打完洞后才开始询问,xi,yi<=333333 。 100%的数据 1<=n<=88888,...原创 2018-08-20 21:50:22 · 460 阅读 · 0 评论 -
【JZOJ5821】【NOIP提高A组模拟2018.8.16】 手机信号(set/权值线段树)
ProblemHintSolution这道题就是一道考验你细节处理的题。我们用形如(l,r,v)的三元组表示一个区间的信号站,意为从l到r每隔v有一个信号站。考虑用set/权值线段树维护这些三元组。我们插入一个三元组的时候,若其与其他三元组的区间互不相交,那自然是最好滴,我们直接丢进set/权值线段树即可。不然的话,囿于他保证当前区间[l,r]中不存在信...原创 2018-08-16 22:47:48 · 313 阅读 · 0 评论 -
【JZOJ5807】【NOIP提高A组模拟2018.8.13】简单的区间(分治+RMQ+二维偏序问题)
ProblemHint对于 30% 的数据,n ≤ 3000; 对于另外 20% 的数据,数列 a 为随机生成; 对于 100% 的数据,1 ≤ n ≤ 3 × 10^5 , 1 ≤ k ≤ 10^6 , 1 ≤ ai ≤ 10^9。Solution考虑分治。对于区间[l,r],我们找出其中最大值的位置m,则可以计算出左端点在[l,m],右端点在[m,r]的合法区间数...原创 2018-08-13 19:36:26 · 482 阅读 · 0 评论 -
【JZOJ5800】【洛谷P4416】 [COCI2017-2018#1] 被单(set启发式合并/线段树合并)
Problem原创 2018-08-15 22:19:35 · 573 阅读 · 0 评论 -
启发式合并(堆、set、splay、treap)/线段树合并学习小记
启发式合并刚听到这个东西的时候,我是相当蒙圈的。特别是“启发式”这三个字莫名的装逼,因此之前一直没有学。实际上,这个东西就是一个SB贪心。以堆为例,若我们要合并两个堆a、b,我们有一种极其简单的做法:那就是比较一下它们的大小,将小的堆的每个元素依次插入到大的堆中。不妨设|a|≤|b||a|≤|b||a|≤|b|,则时间复杂度即为:O(|a|∗log2(|a|+|b|))O(|a|∗log...原创 2018-08-15 21:56:42 · 2258 阅读 · 1 评论 -
【JZOJ5798】【2018提高组】模拟A组 树 (并查集+LCA)
Problem我们有一颗从1到n编号的n(<=300000)个结点的树,此外,您将从树中获得M(<=300000)个节点对,形式为(a1,b1),(a2,b2),…(am,bm). 我们需要给每一条边定向,使得每一对节点对存在一条从ai到bi或从bi到ai的路径。 现在要求方案数,对10^9+7取mod即可。Solution刚看这道题,感觉很神仙。仔细分析,对于...原创 2018-08-12 20:16:02 · 792 阅读 · 0 评论 -
【JZOJ5699】【GDOI2018 day1】涛涛接苹果(appletree)(三维偏序问题(CDQ分治+树状数组 or 带修主席树))
Problem 给定一颗n个节点的树,初始时第i个节点的苹果重量为ai。涛涛每天早上会摘掉根上的苹果;下午,所有苹果下降一层(即从子节点掉到父亲节点)。魔法师洋洋会进行m次单点修改。父亲图图提出了q个问题,每个问题是:求在第t天早上(涛涛采摘前),以x为根的子树的重量和。HintSolution10~40points:模拟+线段树/树状数组+分层求前缀和 这...原创 2018-05-06 15:33:00 · 1329 阅读 · 0 评论 -
【JZOJ5705】【GDSOI2018 day3】谁是冠军(champion)(主席树+tarjan)
ProblemInputOutputHintSolution60points:暴力 or tarjan 首先,考虑转换模型。对于两个人x,y,如果x能胜y,则从x向y连一条边;反之则反。那么原题就转化为了给出一个竞赛图,求能够遍历到所有点的点。 可以枚举每个点x,从x开始遍历,判断能否可以遍历到所有点。这样暴力的复杂度为O(n2)O(n2...原创 2018-05-18 19:08:58 · 550 阅读 · 4 评论 -
【JZOJ5678】【GDOI2018Day2模拟4.21】果树(矩阵覆盖问题)
Problem NiroBC 姐姐是个活泼的少女,她十分喜欢爬树,而她家门口正好有一棵果树,正好满足了她爬树的需求。 这颗果树有N个节点,节点标号 1…N。每个节点长着一个果子,第i个节点上的果子颜色为 Ci 。 NiroBC姐姐每天都要爬树,每天都要选择一条有趣的路径 (u,v) 来爬。 一条路径被称作有趣的,当且仅当这条路径上的果子的颜色互不相同。 (u,v) 和...原创 2018-04-23 21:15:53 · 400 阅读 · 0 评论 -
【JZOJ3663】【SHTSC2014】神奇化合物(compound) (最小生成树+并查集)
ProblemInputOutput 对于每个Q操作,输出一行个整数为相应时刻的分子。HintSolution 一眼看过去,不就是弦图吗没思路。再看一下数据范围,顿时感觉有点希望。 由于我不会弦图,所以我在这里提供一种题目不需保证给出的图是弦图也能过的方法。 首先,考虑对于联通块a和b来说,若有x,y两边将它们连接,且x比y早报销...原创 2018-02-01 18:37:34 · 298 阅读 · 0 评论 -
【JZOJ3834】【NOI2015模拟9.14】【CF461D】Complicated Task(异或方程组+并查集)
ProblemInputOutputHint对于30%的数据,N<=15 对于100%的数据,N,K<=10^5Solution 若设点(i,j)的颜色为c[i][j](’x’为0,’o’为1),对于棋盘中的每个点(i,j),都有异或方程c[i-1][j]^c[i][j-1]^c[i][j+1]^c[i+1][j]=0。 那...原创 2018-02-05 22:03:28 · 323 阅读 · 0 评论 -
【JZOJ3943】【GDOI2015模拟11.29】【HNOI2014 Day4】环游世界(树+并查集)
Problem ZTY有s(≤100)架飞机,第i架飞机一次能飞di,要飞过n(≤1000000)个点构成的环,两点间均有距离,求不定起点时,至少要飞多少次才能从起点飞回起点。Solution 这题我刚看完后觉得就是道纯模拟水题,结果被别人提醒不定起点,于是感觉这种题看上去及其简单,用各种数据结构都能维护比这麻烦很多的东西,但却不能维护这个纯模拟。于是我就打了暴力。 那么...原创 2018-02-07 20:55:21 · 261 阅读 · 0 评论 -
【JZOJ3591】【NOI2014模拟】数据(CDQ分治+线段树)
Problem 现在,二维平面上有N个点。实现以下三种操作: 1. 在点集里添加一个点; 2. 给出一个点,查询它到点集里所有点的曼哈顿距离的最小值; 3. 给出一个点,查询它到点集里所有点的曼哈顿距离的最大值。 Hint 1 ≤ N, Q ≤ 100,000,点的坐标是不超过10^8的非负整数。Solution 首先考虑如何破掉曼哈顿距离。设当...原创 2018-01-23 20:24:18 · 460 阅读 · 0 评论 -
【JZOJ3620】【BOI2011】trapezoid(线段树)
Problem 考虑任意两条选中的横线。一个介于两线之间的梯形Ti 有两个顶点位于上面的直线,另外两个顶点位于下面的直线。我们用ai, bi, ci 及di 分别代表梯形左上、右上、左下及右下的顶点。没有两个梯形的顶点(角)重合。所有梯形的集合的一个子集S 被成为独立的,仅当任意两个S 中的梯形不相交。 确定最大的梯形独立子集的基数(最大集合意味着拥有最多元素的集合)。并且找到不同的最...原创 2018-01-29 16:45:36 · 226 阅读 · 0 评论 -
【JZOJ3633】【汕头市选2014】数数(count) (栈)
Problem N行M列的矩形上有K个宝藏。统计包含至少1个宝藏的子矩形数量。Hint对于20% 的数据,N,M <= 50;对于50% 的数据,N,M <= 1000;对于80% 的数据,N <=1000;M <= 10^9;对于100% 的数据,1 <= N,M <= 10^9; 1 <= K <= 1000; 1 &l...原创 2018-02-01 08:00:53 · 304 阅读 · 0 评论 -
【JZOJ3664】【SHTSC2014】三叉神经树(neuron) (树链剖分 or LCT)
ProblemInputOutput 输出q行每一个整数,对应第i次外界输入变化后的根细胞的输出。HintSolution 终于改出来了,真是不容易啊。 刚做这道题时,一看是一棵树,又要维护某些信息,马上想到树链剖分。 然后我分析了一下题目。我发现对于每次将0取反为1,若设val[x]表示节点x的儿子中为1的个数,它都会把一段连续...原创 2018-02-03 21:40:51 · 528 阅读 · 0 评论 -
平衡树中的神兵利器——非旋Treap(树堆)学习小记
前言 之前A组有一道题目,要你维护一个字符串的插一个字符、删一段字符、复制并粘贴一段字符、翻转一段字符、查询一个字符。我当然想到了splay。但是看了眼数据范围:字符串的总长度不超过231−1231−12^{31}-1,我就知道splay没戏,同时也很惊异这题连splay都切不了,那还能做吗? 于是我就打了暴力。 于是那题我至今未切。 大佬们估计都一眼看出是可持久化Trea...原创 2018-02-04 22:32:17 · 470 阅读 · 0 评论 -
【JZOJ2748】【2012中山市选】最大立方体空间(二分+扫描线+二维线段树)
Problem 给出一个长方体的箱子,还有在箱子里面的N个长方体的盒子,箱子和盒子的各个边都是平行于某个三维坐标轴。现在要求你找出其中最大的立方体空间,输出它的长度。 首先这个空间必须位于箱子里面,而且不能与其它的盒子占的空间冲突。这个空间也必须是各边平行于某个坐标轴。如下图所示。 Input 测试文件含有多组数据。测试文件的第一行是数据个数T。接下来是T组数据。 ...原创 2018-02-08 08:13:31 · 395 阅读 · 0 评论 -
【JZOJ5662】【GDOI2018Day1模拟4.17】尺树寸泓(splay+线段树)
ProblemInputOutputHintSolution 这道题刚看我以为打棵只会旋转、不会进行splay操作的splay,按它说的模拟就行了。 但是切了T1,滚来思考这道题时,我发现它每次旋转操作都会修改到点x和点y的力量值。设力量值为p,答案为t,则pxpxp_x和pypyp_y旋转后(设y变成x的父亲),不仅仅是txtxt_x和...原创 2018-04-19 12:23:08 · 290 阅读 · 0 评论 -
【JZOJ1917】【2011集训队出题】跳跳棋(树+二分)
Problem 跳跳棋是在一条数轴上进行的。棋子只能摆在整点上。每个点不能摆超过一个棋子。 我们用跳跳棋来做一个简单的游戏:棋盘上有3颗棋子,分别在a,b,c这三个位置。我们要通过最少的跳动把他们的位置移动成x,y,z。(棋子是没有区别的) 跳动的规则很简单,任意选一颗棋子,对一颗中轴棋子跳动。跳动后两颗棋子距离不变。一次只允许跳过1颗棋子。 写一个程序,首先判断是...原创 2017-12-28 21:35:20 · 419 阅读 · 0 评论 -
【JZOJ3626】【POI2012】polarization (贪心+树+背包+二进制优化)
Problem 给出一棵n(≤250000)个节点的树,要求将上面的所有边变为单向边,方向自定,求最小的和最大的其中一个点可以到达另一个点的点对。Solution 对于最小值,奇数层的边向上,偶数层的边向下,不就可以了吗?对啊!!!我刚做时竟然没想到!!!!!证明的话,感性理解一下。 对于最大值,就麻烦了。 首先,我们必须承认一个可能被我们贴上“错误”标签的结论:答...原创 2018-01-31 12:26:51 · 254 阅读 · 0 评论 -
【JZOJ3840】【NOI2015模拟9.20】【SRM624】colortree(树+点分治)
Problem 给定一棵N(≤100000)个结点的树,每个点一开始都是白色,进行Q(≤100000)次操作,操作有以下两种: 1、给定一个节点x,把x染成蓝色 2、给定一个节点x,询问x到其他所有蓝色点的距离和 输出所有操作2答案的异或值。Solution 乍一看,看到是棵树,还会修改点,还要询问,感觉是什么树链剖分或者LCT之类的东西。但是我没有想到怎么用...原创 2018-02-06 20:23:29 · 435 阅读 · 0 评论 -
【JZOJ4008】【GDKOI2015】V(倍增+树上RMQ)
Problem 给定一颗N个点的树,有Q次询问,每次询问u到v的最短路径编号序列中,最长的先增后减或先减后增的连续子序列长度为多少。询问在线。Hint 对于 20%数据, N,Q≤100 对于 40%数据, N,Q≤20000 对于 70%数据, N,Q≤50000 对于 100%数据, N,Q≤100000Solution 这道题我刚看感觉极其...原创 2018-03-21 18:47:27 · 306 阅读 · 0 评论 -
【JZOJ4005】【GDKOI2015】树(树链剖分)
ProblemInputHintSolution (首先义正辞严地指摘一下出数据的人,竟然出这么水的数据)这道题一眼链剖,对吧。但是反转操作不太好搞。于是我就打了个暴力,(本来也可以满分)但是打错了,样例都过不去,就没交。 正解也即链剖。但是由于要维护子树信息的反转操作,我们必须以一种比较奇特的方式建树。 首先我们发现数据很小,所以递归dfs也...原创 2018-03-23 21:25:58 · 245 阅读 · 0 评论 -
【JZOJ3973】【NOI2015模拟1.10】【NOI2013湖南省队集训】黑白树(wbtree)(并查集)
Problem 给定一棵树,边的颜色为黑或白,初始时全部为白色。维护两个操作: 1. 查询u到根路径上的第一条黑色边的标号。 2. 将u到v路径上的所有边的颜色设为黑色。Hint 对于30%的数据:n,m≤103n,m≤103n,m≤10^3 对于100%的数据:n,m≤106n,m≤106n,m≤10^6Solution 这种题让人一看就想到链剖,但是...原创 2018-03-12 21:03:09 · 381 阅读 · 0 评论 -
【JZOJ3965】【Usaco2014 March Gold】The Lazy Cow(扫描线+线段树)
Problem 田里有N(1<= N <=100,000)片青草。第i 片有gi 单位的青草(1<=gi<=10,000),并且它唯一地位于田里坐标为(xi,yi)(0<= xi, yi<=1,000,000)的点。须定一个点(可不为整点)为起点,使得从起点出发走K(1<= K<= 2,000,000)步(只能向东南西北走,且可不走整数步,但合...原创 2018-03-14 21:27:31 · 378 阅读 · 0 评论 -
NOI级别的超强数据结构——Link-cut-tree(动态树)学习小记
前言 其实LCT这种东西,我去年就接触过并且打过,只不过一直没调出来。最近优化了我那又丑又长的splay打法,并且用LCT切了道题。在此做一个小结。简介 如果有一道题,让我们维护一棵树,支持以下操作: 1.链上求和; 2.链上求最值; 3.链上修改; 4.子树修改; 5.子树求和; 6.换根。 这道题用树链剖分就可以切掉了。 但如...原创 2018-01-24 16:38:15 · 12810 阅读 · 7 评论