随笔分类 - 树论——SPLAY
摘要:【传送门:BZOJ1552&BZOJ3506】 简要题意: 给出一个长度为n的序列,现在要将它们进行排序,排序的操作为: 如果当前是第i次排序,则先找到当前序列中的最i小值所在位置x(如果有多个,则找到一开始给出序列顺序中排在最前面的数),然后将第i到第x的位置上的数都翻转 求出每次操作中x的值 题
阅读全文
摘要:【传送门:BZOJ2329】 简要题意: 给出一个长度为n的括号序列,有q个操作,4种操作: Query l r求出最少的步数,每步可以改变一个括号,将l到r的括号序列变为一一配对(也就是左括号在右边总有一个右括号与之对应) Invert l r将l到r中的左括号变成右括号,右括号变成左括号 Swa
阅读全文
摘要:【传送门:BZOJ2209】 简要题意: 给出一个长度为n的括号序列,有q个操作,3种操作: 0 l r求出最少的步数,每步可以改变一个括号,将l到r的括号序列变为一一配对(也就是左括号在右边总有一个右括号与之对应) 1 l r将l到r中的左括号变成右括号,右括号变成左括号 2 l r将l到r的序列
阅读全文
摘要:【传送门:BZOJ1251】 简要题意: 给出一个长度为n的序列,有m个操作,3种操作: 1 l r k将l到r的数增加k 2 l r将l到r的数列翻转 3 l r求出l到r的最大值 题解: 裸SPLAY,直接下放两种标记,一种翻转,另一种增加值 而且对于求l到r的区间,我们需要l-1和r+1的节点
阅读全文
摘要:【传送门:BZOJ3224】 简要题意: 有一个数列,有6种操作: 1. 插入x数 2. 删除x数(若有多个相同的数,因只删除一个) 3. 查询x数的排名(若有多个相同的数,因输出最小的排名) 4. 查询排名为x的数 5. 求x的前驱(前驱定义为小于x,且最大的数) 6. 求x的后继(后继定义为大于
阅读全文
摘要:【传送门:BZOJ3223】 简要题意: 给出一个长度为n的序列,第i个数为i 给出多个操作,给出l,r,代表将序列中l到r的数翻转 然后输出最后的序列 题解: SPLAY,注意在翻转一个区间后,要打个翻转标记,访问到儿子区间的时候要翻转一下 参考代码:
阅读全文
摘要:【传送门:BZOJ1588】 简要题意: 给出n个数,每个数只能前面的任意一个数相减,要求差的绝对值最小,求出所有数做的差的最小绝对值的和(第一个数做得差的最小绝对值就是它自己) 题解: 伸展树SPLAY,将n个数逐个放进伸展树中,在放一个数时,先求出这个数在树中的前驱和后继,然后比较哪个最接近这个
阅读全文