
【数据结构】平衡树
文章平均质量分 76
cz_xuyixuan
这个作者很懒,什么都没留下…
展开
-
【BZOJ3224】【TYVJ1728】普通平衡树
【题目链接】点击打开链接【思路要点】本题包含了平衡树最基本的操作。是任何学习平衡树都应当先做一遍的题。笔者实现了四种平衡树,Splay、Treap、替罪羊树和非旋转式Treap(以及其可持久化)。【代码】Splay/*Splay Tree Version*/#includeusing namespace std;原创 2018-01-14 19:53:39 · 691 阅读 · 0 评论 -
【校内训练2019-03-26】动态半平面交
【思路要点】考虑将 pkp^kpk 的贡献拆分为 p,p2,p3,...,pkp,p^2,p^3,...,p^kp,p2,p3,...,pk 分别的贡献,每一个数若在范围内出现,对答案产生 ×p\times p×p 的贡献,重复出现统计一次。考虑询问 x,yx,yx,y ,它实际上考虑了 xxx 子树内所有深度不超过 depthx+ydepth_x+ydepthx+y 的点,因此,若将询...原创 2019-03-27 14:42:45 · 728 阅读 · 0 评论 -
【CodeForces】CodeForces Round #511 (Div. 1) 题解
【比赛链接】点击打开连接【题解链接】点击打开链接**【A】**Enlarge GCD【思路要点】令所有数的 gcdgcdgcd 为 ggg ,将所有数除去 ggg ,问题变为了所有数的 gcdgcdgcd 为 111 的情况。我们要选出一个最大的数集,使得这个数集中的数存在不为 111 的公因数。显然我们只需要考虑所有质数即可,线性筛求出每个数的最小质因子,质因...原创 2018-09-25 11:22:38 · 402 阅读 · 0 评论 -
【BZOJ3946】无聊的游戏
【题目链接】 点击打开链接 【思路要点】 记 aiaia_i 表示 sisis_i 和 si−1si−1s_{i-1} 的 lcplcplcp 的长度,对一段区间 [l,r][l,r][l,r] 增加一个前缀,那么 al+1,al+2,...,aral+1,al+2,...,ara_{l+1},a_{l+2},...,a_r 都会对应增加这个前缀的长度, al...原创 2018-09-06 12:52:12 · 1051 阅读 · 3 评论 -
【BZOJ3682】Phorni
【题目链接】 点击打开链接 【思路要点】 利用 TreapTreapTreap 对新产生的后缀动态标号,维护一棵后缀平衡树,再用线段树支持修改即可。 时间复杂度 O(MLogN+MLogM+N)O(MLogN+MLogM+N) O(MLogN+MLogM+N) 。 【代码】 #include<bits/stdc++.h>...原创 2018-09-05 19:29:07 · 264 阅读 · 0 评论 -
【BZOJ3600】没有人的算术
【题目链接】 点击打开链接 【思路要点】 利用 TreapTreapTreap 对产生的新数动态标号,再用线段树维护区间最值即可。 时间复杂度 O(MLogN+MLogM+N)O(MLogN+MLogM+N) O(MLogN+MLogM+N) 。 【代码】 #include&lt;bits/stdc++.h&gt;using na...原创 2018-09-05 16:21:40 · 441 阅读 · 0 评论 -
【CodeForces】CodeForces Round #504 (Div. 1 + Div. 2) 题解
【比赛链接】 点击打开连接 【题解链接】 点击打开链接 **【A】**Single Wildcard Pattern Matching 【思路要点】 判断 SSS 的星号前后是否为 TTT 中不相交的前缀和后缀。 时间复杂度 O(N+M)O(N+M) O(N+M) 。 【代码】 #include&amp;amp;lt;bi...原创 2018-09-07 21:34:59 · 344 阅读 · 0 评论 -
【BZOJ1552】【Cerc2007】robotic sort
【题目链接】 点击打开链接 【双倍经验链接】 【BZOJ3506】【CQOI2014】排序机械臂 【思路要点】 将权值当做下标,我们需要实现的是查询一个节点在数组中的排名,以及翻转数组的一个区间。 用Splay维护即可,时间复杂度O(NLogN)O(NLogN)O(NLogN)。 【代码】 #include&lt...原创 2018-07-03 11:11:53 · 238 阅读 · 0 评论 -
【BZOJ3506】【CQOI2014】排序机械臂
【题目链接】 点击打开链接 【双倍经验链接】 【BZOJ1552】【Cerc2007】robotic sort 【思路要点】 将权值当做下标,我们需要实现的是查询一个节点在数组中的排名,以及翻转数组的一个区间。 用Splay维护即可,时间复杂度O(NLogN)O(NLogN)O(NLogN)。 【代码】 #inc...原创 2018-07-03 11:13:44 · 217 阅读 · 0 评论 -
【BZOJ1208】【HNOI2004】宠物收养所
【题目链接】 点击打开链接 【思路要点】 平衡树/std::set/multisetstd::set/multisetstd::set/multiset模板题。 时间复杂度O(NLogN)O(NLogN)O(NLogN)。 【代码】 #include<bits/stdc++.h>using namespace std;...原创 2018-06-29 20:56:18 · 475 阅读 · 0 评论 -
【AtCoder】AtCoder Regular Contest 098 题解
【比赛链接】点击打开链接【题解链接】点击打开链接【C】Attention【思路要点】用前/后缀和分别统计头领在每个位置时前后需要转向的人数。时间复杂度\(O(N)\)。【代码】#include<bits/stdc++.h>using namespace std;const int MAXN = 300005;template <typename T> void chk...原创 2018-06-08 13:44:31 · 532 阅读 · 0 评论 -
【LOJ2585】「APIO2018」新家
【题目链接】点击打开链接【思路要点】对时间轴进行扫描线,在时间轴上的一段区间可以表示为一次插入操作和一次删除操作。问题被转化为:维护一个序列,支持在某处插入/删除一个数,以及询问以某个位置为中心,包含所有种类的数的区间的最小长度。对于询问,不难想到二分答案,二分答案后我们需要支持的是询问区间内是否出现了所有种类的数。对于每一种数,我们维护一个支持查询前驱后继的平衡树(std::set)。在序列上维...原创 2018-05-23 11:01:27 · 788 阅读 · 0 评论 -
【BZOJ2658】【ZJOI2012】小蓝的好友(mrx)
【题目链接】点击打开链接【思路要点】求解不含资源点的矩形个数,用总共的矩形个数减之,得到答案。考虑扫描线,从上至下枚举矩形的下边界,记每一个横坐标\(x\)的资源点最近一次出现在\((x,Depth_x)\)处。维护一棵笛卡尔树(Treap),使得父节点的\(Depth\)始终大于子节点的\(Depth\),记每个点的子树大小为\(Size_x\)。此时,有\(Ans=\sum_{i=1}^{C}...原创 2018-02-25 14:12:23 · 362 阅读 · 0 评论 -
【BZOJ1503】【NOI2004】郁闷的出纳员
【题目链接】点击打开链接【思路要点】随便用个平衡树、线段树、块状链表、std::vector之类的数据结构维护一下就行了。时间复杂度\(O(NLogN)\)或\(O(N\sqrt{N})\)。【代码】#include<stdio.h>#define MAXN 200000struct data { int left, right, father, size, v, num; }...原创 2018-02-24 11:13:37 · 276 阅读 · 0 评论 -
【CodeForces】CodeForces Round #463 (Div. 1 + Div. 2) 题解
【比赛链接】点击打开链接【题解链接】点击打开链接【A】Palindromic Supersequence【思路要点】将字符串正反各打印一遍。时间复杂度\(O(|A|)\)。【代码】#include<bits/stdc++.h>using namespace std;const int MAXN = 5005;template <typename T> void rea...原创 2018-02-22 10:46:55 · 617 阅读 · 0 评论 -
【BZOJ3435】【UOJ55】【WC2014】紫荆花之恋
【题目链接】BZOJUOJ【思路要点】考虑点\(i\)和点\(j\)路径上任意一点\(k\),那么$$R_{i}+R_{j}≥Dist(i,j) \Leftrightarrow R_{i}-Dist(i,k)≥Dist(j,k)-R_{j}$$令\(F_{i,k}=R_{i}-Dist(i,k)\),即\(F_{i,k}≥-F_{j,原创 2018-01-13 13:18:33 · 1333 阅读 · 0 评论 -
【BZOJ1500】【NOI2005】维修数列
【题目链接】点击打开链接【思路要点】使用Splay维护多个标记进行各种区间操作,代码实现较为困难。内存限制64MB,注意内存回收,避免空间超限。【代码】#includeusing namespace std;#define MAXN 500005#define MAXIN 4500005struct Node { i原创 2018-01-15 09:24:18 · 342 阅读 · 0 评论 -
【BZOJ3223】【TYVJ1729】文艺平衡树
【题目链接】点击打开链接【思路要点】使用可以打标记的Splay来实现区间翻转,时间复杂度\(O(MLogN)\)。代码过于陈旧,风格较丑。【代码】#includeusing namespace std;#define MAXN 100005struct Node { int father, child[2], size,原创 2018-01-14 20:09:05 · 367 阅读 · 0 评论 -
【CodeForces704E】Iron Man
【题目链接】点击打开链接【思路要点】考虑链上做法,每个人的坐标是一个关于时间的一次函数。注意到当且仅当两人相碰,两人位置的相对顺序会发生改变,换言之,在两人相碰之前,所有人位置的相对顺序不变。排序所有人出现,消失的事件,用平衡树维护所有人的相对位置即可。回到原题,对原树进行树链剖分,对每条重链和轻边都运行链上做法即可。时间复杂度 O(N+MLog2N)O(N+MLog^2...原创 2019-04-12 15:33:11 · 514 阅读 · 0 评论