poj2828 伸展树模拟】的更多相关文章

用伸展树模拟插队比线段树快乐3倍.. 但是pojT了.别的oj可以过,直接贴代码. 每次更新时,找到第pos个人,splay到根,然后作为新root的左子树即可 #include<iostream> #include<cstring> #include<cstdio> #include<algorithm> #define maxn 200005 using namespace std; ],num[maxn],key[maxn],size[maxn],to…
数据较大,需要先把每个top不会操作到的段缩成一个点,记录其开始和结束的位置,和top能操作到的点一起建立一颗伸展树模拟 然后就是普通的队列模拟操作 /* 不会被top操作到的区间就缩点 通过splay tree模拟出序列,初始序列的第i个缩点对应的树结点也是i 操作top a:找到结点a,将其移到最左边 query a:结点a的左边有多少人 rank a:第a个结点是第几个结点 */ #include<iostream> #include<cstring> #include<…
Problem Description YaoYao is fond of playing his chains. He has a chain containing n diamonds on it. Diamonds are numbered from 1 to n. At first, the diamonds on the chain is a sequence: 1, 2, 3, …, n. He will perform two types of operations: CUT a…
Description You have N integers, A1, A2, ... , AN. You need to deal with two kinds of operations. One type of operation is to add some given number to each number in a given interval. The other is to ask for the sum of numbers in a given interval. In…
题目有很多图,不好粘贴..... 题意:给出N个数和K1,K2的值,最开始指针指向第一个数,有6种操作 add x : 给前K2个数都增加x reverse : 翻转前K1个数 insert x : 在所指的数右边(顺时针)插入一个数 delete x : 删除指针所指的这个数,并且指针向右移(顺时针) move x : x=1则指向向左移(逆时针),为2向右移(顺时针) query : 输出指针所指的数 解析:这题涉及到插入删除,和给一段区间加值,线段树不能增加删除,链表的话又不能快速的给一段…
最近“hiho一下”出了平衡树专题,这周的Splay一直出现RE,应该删除操作指针没处理好,还没找出原因. 不过其他操作运行正常,尝试用它写了一道之前用set做的平衡树的题http://codeforces.com/problemset/problem/675/D,运行效果居然还挺好的,时间快了大概10%,内存少了大概30%. #include <cstdio> #include <cstring> #include <string> #include <cstd…
题意 https://www.lydsy.com/JudgeOnline/problem.php?id=1269 思路 伸展树(\(\text{splay}\))功能比较齐全的模板,能较好的体现 \(\text{splay}\) 的功能,简单介绍一下 \(\text{splay}\). 基本的概念和函数 \(\text{splay}\) 是平衡树的一种,能在均摊 \(\log n\) 的时间复杂度内完成很多序列操作(序列就是树的中序遍历),核心是以下两个函数. rotate 首先是旋转函数,\(…
前两天老师讲了伸展树……虽然一个月以前自己就一直在看平衡树这一部分的书籍,也仔细地研读过伸展树地操作代码,但是就是没写过程序……(大概也是在平衡树的复杂操作和长代码面前望而生畏了)但是今天借着老师布置作业这个机会,加上hockey之前不厌其烦地手把手带着我写过四五遍Splay的神代码,是时候把它用程序实现出来了. 第一部分 伸展树基本概念和操作 伸展树是一种平衡二叉查找树,但是和其它平衡树(比如红黑树.AVL树)不同,它的节点上没有记录任何用于保持平衡的其他信息(AVL树上记录了节点的高度,而红…
题意: 题解:典型伸展树的题,比较全面. 我理解的伸展树: 1 伸展操作:就是旋转,因为我们只需保证二叉树中序遍历的结果不变,所以我们可以旋转来保持树的平衡,且旋转有左旋与右旋.通过这种方式保证不会让树一直退化从而超时.虽然一次旋转的代价比较高,但是可以证明:每次操作都旋转(关键),则时间复杂度为O(n*log2 n) 2 更新:每个节点都可以存一些信息,并模拟线段树进行区间操作.父节点的信息是两个孩子节点加当前父节点的信息的总和.因为是可旋转的搜索二叉树,所以每次处理都需要注意上更新或下更新…
[bzoj1251]序列终结者(伸展树) Description 网上有许多题,就是给定一个序列,要你支持几种操作:A.B.C.D.一看另一道题,又是一个序列 要支持几种操作:D.C.B.A.尤其是我们这里的某人,出模拟试题,居然还出了一道这样的,真是没技术含量……这样 我也出一道题,我出这一道的目的是为了让大家以后做这种题目有一个“库”可以依靠,没有什么其他的意思.这道题目 就叫序列终结者吧. [问题描述] 给定一个长度为N的序列,每个序列的元素是一个整数(废话).要支持以下三种操作: 1.…