平衡树
No__stop
这个作者很懒,什么都没留下…
展开
-
hdu 2871 Memory Control(伸展树splay tree)
题意:就是对一个区间的四种操作,NEW x,占据最左边的连续的x个单元,Free x 把x单元所占的连续区间清空 , Get x 把第x次占据的区间输出来, R 清空整个区间。解题思路:这个题就是一个区间合并,以前用线段树写的,拿来练练splay。要记录的是区间最大的连续空格,要维护这个最值,需要两个辅助的值,该区间左边连续的最值和右边连续的最值。更新的时候仔细就好了,其他就是splay的常规原创 2013-08-20 19:28:29 · 1302 阅读 · 0 评论 -
bzoj 1901: Zju2112 Dynamic Rankings(树套树)
1901: Zju2112 Dynamic Rankings经典的带修改求区间第k小值问题树套树模板,我是用的线段树套splay实现的,而且用的数组模拟的,所以可能空间略大,bzoj过了,zoj过不了。思路很简单,用线段树维护区间,用splay维护区间内的权值,然后询问的时候,二分答案key,然后在区间内找小于key的数有多少个。贴上模板:#include#include#原创 2014-09-28 19:39:18 · 1218 阅读 · 0 评论 -
hdu 1754 I Hate It (splay tree伸展树)
hdu 1754 I Hate It其实我只是来存一下我的splay模板的。。请大牛们多多指教#include#include#includeusing namespace std ;const int maxn = 222222 ;int son[2][maxn] , col[maxn] , fa[maxn] , size[maxn] , val[maxn] ;int t原创 2013-08-18 13:57:36 · 1600 阅读 · 0 评论 -
zoj3533 Gao the String I(splay)
题目链接:zoj3533 Gao the String I题意:其实就是维护一个数列。有四个操作,reverse和modify就是常见的splay操作,lcp(i,j)操作,表示求后缀i,j的最长公共前缀,palindrome是求整个串的最长回文串。解题思路:首先我们要搞清楚的是要维护什么,palindrome操作因为只有10个,所以这个是可以暴力做的。那么关键的是怎么求lcp了,没什么好原创 2014-04-09 11:46:22 · 1742 阅读 · 0 评论 -
[APIO2012]派遣 (平衡树启发式合并)
[APIO2012]派遣 (平衡树启发式合并)题目大意:大概是这样的,一棵树n个点,每个点有点权val[i]和cost[i],给定一个m,对于每颗子树,计算出一个w值,w的计算方法为(val[i]*k),其中k为i子树下,最多能取出的使得cost的和小于等于m点的个数。解题思路:假如,我们能将一颗子树的每个点,以cost为key,建成平衡树,那么计算答案想必还是比较简单的吧。但是我们不能给原创 2014-04-01 15:18:39 · 1506 阅读 · 0 评论 -
[NOI2005]维修数列
[NOI2005]维修数列中文题,题意不解释。。平衡树模板,做法不解释。。就看你模板是否够硬了。。先来发伸展树:#include#include#includeusing namespace std ; const int maxn = 1000502 ;const int INF = 1111111111 ; int size[maxn] , fa[maxn] ,原创 2014-03-08 10:43:20 · 1250 阅读 · 0 评论 -
hdu 1890 Robotic Sort(treap)
Robotic Sort题意:给一个数列,用某一特定的方法对其进行排序。其排序方法是,第i次排序时,找到第i小的元素的位置p,输出这个p,并将[i,p]这段区间翻转。进行n次这样的操作后,序列有序。解题思路:以前用splay写过,思路是抄的别人的。学习treap后,重新再想了一下这个题,想到了一种新的思路。大概是这样的:首先,离散化还是有必要的,因为它会根据原序列里的位置定下其元素的大小。原创 2014-03-11 21:01:29 · 1399 阅读 · 1 评论 -
浙大2014 3月月赛I题(伸展树)
模板:#include#include#include#define ll long longusing namespace std ;const int maxn = 500011 ;ll gcd ( ll a , ll b ) { return ( b == 0 ? a : gcd ( b , a % b ) ) ;}int num[maxn] , f[max原创 2014-03-02 18:12:18 · 1035 阅读 · 0 评论 -
hdu 4699 Editor(splay tree 伸展树)
hdu 4699 Editor题意:对一个数列进行操作,光标位置后面插入一个权值为x的数,删除光标前的那个数,光标左移一位,光标右移一位,求到k位置的最大的前缀和。。解题思路:标乘是用了栈进行维护。。我这智商比较捉急啊,用了splay。节点下要记录的是该几点所掌控的子树的前缀最大值是多少,那么要维护这个最大值,就需要一个辅助变量,sum[rt]表示rt节点所掌控的子树的所有数的和,怎么维原创 2013-08-22 18:30:57 · 1643 阅读 · 1 评论 -
hdu 4441 Queue Sequence (伸展树splay+树状数组)
hdu 4441 Queue Sequence (伸展树splay)题意:就是维护一个数列,总共三个操作。1 insert x操作,在x位置插入一个数列中没出现过的,最小的正整数k,然后再找出k前面有多少个正数(不包括k),假设为j,那么就找到第j+1个负数,再其前面插入-k(其实题意是说找到第j个负数,然后在距离j尽量远的地方插入-k,转换下就好了)。2 remove x ,把数列中的x原创 2013-10-14 18:29:12 · 1243 阅读 · 0 评论 -
hdu 4453 Looploop (伸展树)
hdu 4453 Looploop (伸展树)题意:给出一个数列,然后又五个操作,维护这个数列.。解题思路:splay tree 。其实这题就是考你伸展树的基本功了。唯一有点思维的地方,就是move的时候,对于两种move,第一种,把指针逆时针移一位,其实就是把最后一个元素插到最前面,在把最后那个删掉。。。第二种反之。#include#include#includeusing原创 2013-10-04 18:31:17 · 1388 阅读 · 0 评论 -
hdu 1890 Robotic Sort (splay tree伸展树)
hdu 1890 Robotic Sort 题意:给出一个n个数的数组,给他进行排序。排序的过程是这样的,对于第i次找到第i大的数在哪一个位置,输出这个位置,然后从第i个位置开始到找到的位置,将这个区间翻转一遍(此时第i大的数肯定在i位置了,显而易见),进行n-1次后这个数列就有序了。解题思路:splay tree 伸展树,要记录的延迟标记是一个翻转标记,col[i]表示翻转了几次(奇数次原创 2013-08-21 18:28:47 · 1585 阅读 · 0 评论 -
zoj 2112Dynamic Rankings(树状数组套splay)
zoj 2112Dynamic Rankings(树状数组套splay)原创 2014-09-30 16:57:36 · 952 阅读 · 0 评论