
数据结构---伸展树
Soar-
这个作者很懒,什么都没留下…
展开
-
POJ 3468 A Simple Problemwith Integers(SplayTree入门题)
题意:给你一个数列,要求你完成区间更新,区间求和的操作.也是线段树的模板题,但是这里作为伸展树的练习题:SplayTree学习参照资料:1.Crash《运用伸展树解决数列维护问题》2. http://www.cnblogs.com/kuangbin/archive/2013/04/21/3034081.html/**Splay树入门成段更新+区间更新**/#include<cst...原创 2018-05-22 17:34:09 · 178 阅读 · 0 评论 -
营业额统计 HYSBZ - 1588 (伸展树简单应用)
题意:给你n个数,要你求出每个数的最小波动值之和.第一个数的波动值就是自己,之后第i个数的最小波动值=|val[i]-x|.其中x是与val[i]之差绝对值最小的之前出现过的数.分析:构建一个SplayTree,支持插入节点,找前驱和后继的值.当然还要支持单点插入操作,不过这颗SplayTree是一个排序二叉树,即关键字从小到大排序,这样才能找到前驱和后继.#include<bits/std...原创 2018-05-22 17:52:51 · 369 阅读 · 0 评论 -
HDU 1890 Robotic Sort(伸展树---反转应用)
题意: 给一系列数,执行一系列的反转操作,要求最后稳定排序这些数,并且输出每次反转的右边界。 题解: 怎么运用伸展树去解决呢?(反转操作。伸展树的基本操作) 对原始数据记录值和下标,然后按照值优先排序。伸展树存放下标。然后扫描一遍所有的数:第一个数在x位置,把伸展树值为x的节点伸展到根,所以把x左边的节点反转,删除根(x节点)。#include<bits/stdc++.h&g...原创 2018-05-23 16:16:42 · 160 阅读 · 0 评论 -
POJ 3580 SuperMemo(伸展树的几个基本操作)
题意:给定一个数组,对数组进行6种操作。区间加,区间翻转,插入一个值,删除一个值,区间求最小值。区间循环移位。题解:前5种属于伸展树的基本操作,区间循环移位需要转化成基本操作:区间[l,r]循环右移T位(T=T%(r-l+1) )。相当于区间[l,r-T]和区间[r-T+1,r] 调换了位置。通过区间删除和插入可以完成。 注意:删除操作需要有内存回收。 #include<cstdio&g...原创 2018-05-23 16:46:56 · 333 阅读 · 0 评论 -
HDU 3487 Play with Chain(伸展树基本操作)
题意:给定一数组,完成两种操作:CUT a b c 将区间[a,b]的数删除,并接到新数列的第c个数后面FLIP a b 将区间[a,b]的数翻转顺序输出最终的序列 题解: 伸展树的基本操作。#include<bits/stdc++.h>using namespace std;#define keyv ch[ch[root][1]][0]#define ddd put...原创 2018-05-23 16:53:42 · 224 阅读 · 0 评论 -
HDU 4453 Looploop(伸展树应用,数列环)
题意: 给定一个环,和一个原点,对这个环有以下操作:add x 操作:从队首开始的的连续k2个数都加上x值.reverse 操作: 从队首开始的连续k1个数都翻转insert x 操作:在第一个元素与第二个元素之间插入一个x值delete 操作: 删除原点,新原点顺时针移动一下move 1操作:原点逆时针移动一个move 2操作: 原点顺时针移动一个query 操作: 返回原...原创 2018-05-23 20:59:10 · 310 阅读 · 0 评论 -
HDU 3436 Queue-jumpers(伸展树,元素移至首部+离散化)
题意: Ponyo and Garfield are waiting outside the box-office for theirfavorite movie. Because queuing is so boring, that they want to play a game tokill the time. The game is called “Queue-jum...原创 2018-05-23 22:34:44 · 194 阅读 · 0 评论 -
维修数列 HYSBZ - 1500 (伸展树基本操作+区间求和最大子序列)
题意:题解: 伸展树的应用:操作6 线段树也可以完成,但是有区间插入,删除,翻转的时候,伸展树甚是强大(基本操作!#include<bits/stdc++.h>using namespace std;const int maxn = 5e5+99;const int INF = 0x3f3f3f3f;#define ddd cout<<111<...原创 2018-05-23 22:45:26 · 232 阅读 · 0 评论