
splay
Drin_E
中山纪念中学的蒟蒻,乐于交友
展开
-
排序机械臂
题目大意给出一个长度为n的序列a,有n次操作,第i次操作把数值a第i小的位置记作p[i],位置i到p[i]的数反转(如1,2,3,4反转后变成4,3,2,1)。求输出序列p。范围a[i]<=2*10^9,n<=10^5。先离散化裸splay用splay树维护size。答案p[i]=size[i的左儿子]+1。 对于反转操作,可以打个标记。代码#include<cstdio>#include<cs原创 2016-06-26 21:27:09 · 816 阅读 · 0 评论 -
树的统计
题目大意一棵树上有n个节点,编号分别为1到n,每个节点都有一个权值w。要求你对这棵树完成 一些操作: I. CHANGE u t : 把结点u的权值改为t II. QMAX u v: 询问从点u到点v的路径上的节点的最大权值 I II. QSUM u v: 询问从点u到点v的路径上的节点的权值和 注意:从点u到点v的路径上的节点包括u和v本身数据范围 1<=n<=30000,0<=q<=2000原创 2016-06-27 20:45:06 · 459 阅读 · 0 评论 -
SuperMemo
题目大意给出一个序列,要求你支持区间反转,交换相邻区间,添加一个元素和删除一个元素,以及查询区间最小值等操作。序列之王——splay对于区间反转,可以类似懒标记传递修改。 添加或删除一个元素都可以通过splay操作使要添加或删除的元素成为叶子节点,然后就很容易添加或修改了 交换相邻区间,相对比较麻烦。 有一个机智的做法,利用反转来实现, 假如我们要交换[a,b]和[b+1,c]两个区间,其实原创 2016-07-14 16:24:54 · 1042 阅读 · 0 评论 -
维护数列
题目大意维护一段数列,支持添加,删除,翻转,区间赋值,询问最大子段和以及区间和等操作。splay我的代码常数较大,被卡了。。。#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>#define fo(i,a,b) for(i=a;i<=b;i++)#define ll long longusing name原创 2017-02-28 17:30:00 · 464 阅读 · 0 评论 -
神秘物质
题目大意维护一个序列,支持单点删除和添加,以及查询区间内大于1的所有子区间的极差的最大值和最小值。splay裸题所有子区间极差的最大值=区间最大值-区间最小值 极差的最小值,容易发现一定是长度为2的区间 设新序列b[i]=abs(a[i]-a[i+1])维护b的区间最小值即可要注意添加和删除时,更新前一项的b值代码#include<cstdio>#include<cstring>#inclu原创 2017-02-25 20:54:59 · 759 阅读 · 0 评论