
数据结构-splay
Endless_Way
这个作者很懒,什么都没留下…
展开
-
BZOJ 1588 [HNOI2002]营业额统计
splay。模仿别人的代码打的,加了一些注释我很好奇排名第一的0s用了什么神奇的数结- -#include<cstdio>#include<cmath>#include<algorithm>#define N 200005using namespace std;const int INF = 1<<29;struct SplayTree{ int son[N][2], fa[N原创 2016-08-20 15:52:30 · 341 阅读 · 0 评论 -
SPOJ GSS 1~8
GSS是一系列查询区间最大子段和及其变种的题目。GSS 1 ~ 8 的题号分别是:1043 & 1557 & 1716 & 2713 & 2916 & 4487 & 6779 & 19543 目前完成进度:1 (好惨啊,慢慢做吧……)SPOJ 1043 GSS 1应该是不难的。我们假设一个区间的最大子段已经找到,往区间里随便放一条分界线。有两种情况:一是最大子段在分界线的某一边,二是最大子段经过分界原创 2016-10-22 00:01:04 · 1372 阅读 · 1 评论 -
BZOJ 3729 Gty的游戏
博弈论 + 平衡树这题的模型就是NIM游戏+阶梯博弈点这里查看阶梯博弈的解说 顺便附一点个人的记录与想法。设地板层数为0,则解体博弈等价于奇数层的NIM游戏取石子。证明:若奇数层异或值>0,显然可以构造出必胜策略,如果=0,显然对手就可以构造出必胜策略。推广到这题的树上也是一样。偶数层的石子都没啥用,对奇数层的石子做NIM游戏求所有奇数层节点值的异或和即可。同理于阶梯博弈,从奇挪到偶等价于取掉石子原创 2017-01-22 23:07:19 · 392 阅读 · 0 评论 -
BZOJ 4825 [Hnoi2017]单旋
splay 或 线段树观察这种spaly的性质。插入一个点,这个点的深度就是它的前驱后继中深度较大的那个+1。单旋最小值,则最小值的右子树里的点深度不变,自己深度变为1,其他点深度+1,单旋最大值同理。删除则在这个基础上让全部深度-1。这个是在平衡树上的子树维护,也就是一个区间维护,离线上线段树即可。然而我还是带着敬意地写了一个splay……#include<set>#include<cstdio原创 2017-05-01 13:43:29 · 444 阅读 · 0 评论 -
BZOJ 3786 星系探索
DFS序+平衡树刚开始在想平衡树维护树剖,发现这样并不能资瓷删点。而且好像复杂度还很劣。然后LCT目测搞不了子树修改。仔细观察, 一个点的答案只能贡献给所有子树里的询问,无视子树外的询问。也就是子树内和子树外是两回事,那就对一个点维护进入它的DFS序位置和从它子树出去的DFS序位置,一正一负,子树内的询问贡献一个正的,子树外的询问上负的直接抵消,这样就可以直接询问前缀和了。#include<cstd原创 2017-04-15 23:57:20 · 386 阅读 · 0 评论 -
BZOJ 3682 Phorni
后缀平衡树考虑如果可以离线,只需构出后缀数组套上线段树。在线的话我们需要一个在线的后缀数组,结合题意中后缀的含义,用后缀平衡树即可。#include<set>#include<cstdio>#include<algorithm>#define N 800005using namespace std;namespace runzhe2000{ typedef double db;原创 2017-04-27 23:34:32 · 535 阅读 · 0 评论