splay
_zidaoziyan
这个作者很懒,什么都没留下…
展开
-
Bzoj 1588: [HNOI2002]营业额统计(Splay 单点更新)
传送门:Bzoj 1588: [HNOI2002]营业额统计 题意:求每个点之前离它差最小的数(两个相减的绝对值) 思路:Splay模板 如果父结点是根结点,那么只需要作一次左旋或者右旋即可。 如果父结点P,P的父结点G,如果二者转向相同,那么连续两次左旋或者右旋即可。 如果二者转向不同,那么向左旋后右旋或者先右旋后左旋。#include<bits/stdc++.h>usi原创 2016-08-21 22:03:10 · 325 阅读 · 0 评论 -
Hdu 1890 Robotic Sort(Spaly 区间翻转)
传送门:Hdu 1890 Robotic Sort 题意:给你一个序列,每次输出第i小的数所在的位置,并将i-这个位置之间的数翻转 思路:Splay的区间翻转,利用一个lazy标记,按下标的中序遍历建树,然后刚开始的每个a[i]都有一个对应的下标,把这个下标存下来, 然后对a[i]排序,第i大的数刚开始对应的下标就是a[i].id,只要找出现在这个a[i].id在Splay中对应的位置就好原创 2016-08-24 13:02:23 · 550 阅读 · 0 评论 -
Hdu 3726 Graph and Queries(删边,查询第k大,修改点值)
传送门:[http://acm.split.hdu.edu.cn/showproblem.php?pid=3726](Hdu 3726 Graph and Queries) 题意:给你n个点,m条边,有下面三种操作 1:D X :删掉第X条边。 2:Q X K :查询和X相连的点中第K大的点的值 3:C X V :将点X的权值修改为V 思路:逆向处理,利用并查集+Spla原创 2016-08-25 14:20:50 · 325 阅读 · 0 评论 -
Hdu 4441 Queue Sequence(给定一个数确定它在Splay中的下标)
传送门:Hdu 4441 Queue Sequence 题意:刚开始有一个空的序列,有三种操作 1.insert p 在p位置插入最小的未被使用的正整数,然后找到另外一个位置插入一个负数, 该负数左边负数的个数和该数的相反数的左边的正数的个数一样多且最为靠右 2.query x 查询-x所在位置到x所在位置之间的和 3.remove x 删除x和-x 思路:最小的正整数我原创 2016-08-25 18:41:20 · 590 阅读 · 0 评论 -
Splay操作总结
Splay中有一些常用的操作和一些很容易犯的bug先来记录一下容易写错的地方新建结点(或者连续一段)或者删除结点(或者连续一段)的时候需要pushup(ch[root][1]),pushup(root)申请一个新的结点的时候注意更新与这个点所有相关的变量,比如是维护最小值,不仅要更新val[now],还要更新minv[now]如果有区间加的时候,你需要查询Splay上某个点的值,你不能直接输出原创 2016-08-26 21:31:17 · 2317 阅读 · 0 评论 -
Hdu 4453 Looploop(环上的Splay操作)
传送门:Hdu 4453 Looploop 题意:给你序列(形成一个环),有六种操作 1.指定一个元素,这个元素之后的k2个元素加上x 2.指定一个元素,这个元素之后的k2个元素翻转 3.在指定元素的右端插入一个数 4.删除这个元素,然后把指针移到下一个 5.把指针往左或者往右移动(x=1移到左边,x=2移到右边) 6.输出现在指针所指的数原创 2016-08-25 18:59:52 · 368 阅读 · 0 评论 -
Hdu 3436 Queue-jumpers(把第x个人放到队伍的前面,查询第x个人的位置,查询第x个位置是哪个人)
传送门:Hdu 3436 Queue-jumpers 题意:有一个n的序列(n<=1e8),有三操作,操作Q次 1.把第x个人放到队伍的前面 2.查询第x个人的位置 3.查询第x个位置是哪个人 思路:因为n比较大,Q比较小,所以选择记录一次啊出现了哪些数,Splay中每个位置记录一下之前有多少个数是不会被用到的 对于操作1,我们标记一下x在Splay中的下标的位置,原创 2016-08-26 20:45:58 · 507 阅读 · 0 评论