
splay
文章平均质量分 61
WerKeyTom_FTD
这个作者很懒,什么都没留下…
展开
-
用序列之王splay解决线段树经典问题
我们尝试用序列之王spaly来解决线段树经典两个问题: 最大值和最大值2。最大值 在N(1<=N<=100000)个数A1…An组成的序列上进行M(1<=M<=100000)次操作,操作有两种: 1 x y:表示修改A[x]为y; 2 x y:询问x到y之间的最大值。这是线段树很容易解决的问题。 我们现在考虑用splay解决。 我们设key[i]表示结点i的值。 那么初始情况下k原创 2015-09-03 15:41:16 · 2097 阅读 · 7 评论 -
[bzoj4864]神秘物质
题目描述裸题容易观察最小是在相邻差间取最小 最大直接就是最大减最小 那些加加删删的splay维护一下就好了#include<cstdio>#include<algorithm>#include<cmath>#define fo(i,a,b) for(i=a;i<=b;i++)#define fd(i,a,b) for(i=a;i>=b;i--)#define min(a,b) (a<b原创 2017-02-25 16:00:26 · 703 阅读 · 0 评论 -
[bzoj4573][UOJ#195][ZJOI2016]大森林
题目描述小Y家里有一个大森林,里面有n棵树,编号从1到n。一开始这些树都只是树苗,只有一个节点,标号为1。这些树 都有一个特殊的节点,我们称之为生长节点,这些节点有生长出子节点的能力。小Y掌握了一种魔法,能让第l棵树 到第r棵树的生长节点长出一个子节点。同时她还能修改第l棵树到第r棵树的生长节点。她告诉了你她使用魔法的 记录,你能不能管理她家的森林,并且回答她的询问呢? 第一行包含 2 个正原创 2017-02-23 14:32:44 · 2676 阅读 · 0 评论 -
[bzoj3188]Upit
题目大意你需要维护一个序列,支持以下4种操作。一,将区间(u,v)的数覆盖为C;二, 将区间(u,v)的数依次加上一个以C为首项、C为公差的等差数列;三,将数C插入 第i个位置;四,查询区间(u,v)的数的和。序列最初有n个数,一共会有Q次操 作。保证结果在longlong范围内。 数据结构两个标记均可合并 顺序是先执行赋值 splay维护#include<cstdio>#include原创 2017-02-16 15:48:10 · 649 阅读 · 0 评论 -
前鬼后鬼的守护
题目大意给定序列x。 将xi修改成x’要付出|x’-xi|的代价。 求最小代价使得xi<=xi+1维护函数设DP,Fi(x)表示把第i个修改成x使得前i个递增的最小代价。 Fi(x)=|x-xi|+min(Fi-1(1~x)) Fi就是函数嘛,容易观察出还是许多一次函数组成的单调函数。 每次就是加上两段一次函数,那个取min是把斜率大于0的直线改为平板。splay维护即可。#include原创 2017-01-14 22:37:40 · 714 阅读 · 0 评论 -
[bzoj3878]奇怪的计算器
题目大意一个计算器,数值范围在[l,r]。 有n条指令,每条指令: 1、把当前数x变成x+a 2、把当前数x变成x-a 3、把当前数x变成x*a 4、若一开始输入的数为t,把当前数x变成x+a*t 每次执行一条指令后,当前数需要对l取max,然后对r取min。 现在q次询问,问往计算器输入x得到什么?平衡树维护函数我们尝试建立一个自变量为输入的初始值因变量为执行完若干指令后的值得一个函原创 2016-12-06 16:42:56 · 1049 阅读 · 0 评论 -
[JSOI2016]轻重路径
题目大意给定一颗二叉树。 每次删除一个叶子节点,并要求输出所有重链指向结点编号之和。 初始也要输出一次。 初始时,如果一个结点的两个儿子大小相同,则选择左儿子为重儿子。 一次删除操作后,如果一个结点的两个儿子大小相同,则不改变原先的重儿子选择。发现如果删除一个叶子,重儿子指向可能会发生改变的一定是该结点到根节点的路径上的结点。 其中表现为——路径上的重边可能会变成轻边。 这个就不好处理…原创 2016-04-25 19:18:56 · 1785 阅读 · 0 评论 -
[bzoj3729]Gty的游戏
题目大意给定一颗树,初始n个结点,1为根节点。每个结点上有一定的石子数。 现在你需要在线兹瓷三种操作: 1、询问以x为根的子树中进行组合游戏,双方轮流操作,每次操作可以将一个结点(在子树内且不为x)的不超过p个至少1个石子移至其父亲结点。问这个游戏先手是否必胜? 2、修改一个结点的石子数。 3、新建一个结点石子数为x,其父亲设为y(保证y已经建立)一点姿势我们需要解决以下两个博弈论问题:原创 2016-03-16 14:37:39 · 1569 阅读 · 0 评论 -
[bzoj3223]文艺平衡树
题目大意维护序列。 需要兹瓷区间翻转。treap大法好嘿嘿嘿裸题。 注意遍历treap的时候也要down标记啊!#include<cstdio>#include<algorithm>#define fo(i,a,b) for(i=a;i<=b;i++)using namespace std;const int maxn=100000+10;int left[maxn],right[ma原创 2016-04-06 20:02:48 · 676 阅读 · 0 评论 -
[bzoj3545]Peaks
题目大意一个图,有边权和点权。若干个询问形如询问从点x出发只能走边权不超过y的边,走到所有点点权第k大是多少。离线大法好显然按照边权从小到大排序,用平衡树启发式合并做就好了。 TLE了,不开森。#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<cctype>#include<cti原创 2016-03-07 20:25:09 · 770 阅读 · 0 评论 -
魔道研究
题目大意有3*10^5个多重集合,许多次操作,每次操作往某个集合里插入一个数。对于所有i,把第i个集合里前i大的元素加入集合S中。每次操作后你需要输出集合S中前N大元素的和。模拟模拟题意,用数据结构维护即可。 这里使用spaly。#include<cstdio>#include<algorithm>#define fo(i,a,b) for(i=a;i<=b;i++)using namesp原创 2016-03-05 16:33:09 · 605 阅读 · 1 评论 -
平方和
题目大意给出一个N个整数构成的序列,有M次操作,每次操作有一下三种: ①Insert Y X,在序列的第Y个数之前插入一个数X; ②Add L R X,对序列中第L个数到第R个数,每个数都加上X; ③Query L R,询问序列中第L个数到第R个数的平方和。 30%的数据满足N≤1,000,M≤1,000。 另外20%的数据满足N≤100,000,M≤100原创 2015-09-16 20:16:25 · 814 阅读 · 0 评论 -
Fable
题目大意对一个序列做k轮冒泡排序,输出最终序列。做法尝试计算每一个数的位移。 计算一个数前进的位数t等于在它前面比它大的数个数与k取min。 同样前面最大的t个数都会后退一格。 于是splay模拟这个过程统计每个位置的位移即可。#include<cstdio>#include<algorithm>#define fo(i,a,b) for(i=a;i<=b;i++)#define fd(原创 2017-07-07 16:36:15 · 739 阅读 · 0 评论