随笔分类 -  数据结构之splay

摘要:题意:有n个数排成环,m个操作1.当前位置后k2个加一个数,2当前位置后k1个翻转,3当前位置后面插入一个数,4删除当前位置的数,5将当前位置前移或后移6查询当前位置的权值 题解:splay裸题,唯一麻烦的是翻转操作,因为可能不连续,单独考虑即可 阅读全文
posted @ 2018-10-16 19:02 walfy 阅读(272) 评论(0) 推荐(0)
摘要:``` /************************************************************** Problem: 1500 User: walfy Language: C++ Result: Accepted Time:9792 ms Memory:26516 kb **********************... 阅读全文
posted @ 2018-06-21 20:50 walfy 阅读(199) 评论(0) 推荐(0)
摘要:splay区间翻转即可 /************************************************************** Problem: 3223 User: walfy Language: C++ Result: Accepted Time:2304 ms Memo 阅读全文
posted @ 2018-05-21 20:35 walfy 阅读(156) 评论(0) 推荐(0)
摘要:Description 火星人最近研究了一种操作:求一个字串两个后缀的公共前缀。比方说,有这样一个字符串:madamimadam,我们将这个字符串的各个字符予以标号:序号: 1 2 3 4 5 6 7 8 9 10 11 字符 m a d a m i m a d a m 现在,火星人定义了一个函数L 阅读全文
posted @ 2018-05-06 20:08 walfy 阅读(152) 评论(0) 推荐(0)
摘要:题意:一个数组,两种操作,1把1到r变成递增,2把1到r变成递减 解法:首先可以明确的是有效操作r肯定是递减的(因为不递减后面的操作会覆盖前面的操作),1,2然后肯定是交替的,因为如果不是交替的,那么结果不会变,所以是无效操作, 然后我们想办法解决这个有效操作,可以用splay打翻转标记 //#pr 阅读全文
posted @ 2018-04-26 19:28 walfy 阅读(161) 评论(0) 推荐(0)
摘要:线段树/树状数组裸题,用splay写 splay也是基本操作pushup pushdown 话说我就是找不到全一点的模板,我自己写又全是bug,导致代码风格一直变来变去= = 关键是建树和区间操作(区间和,区间翻转,区间合并这几个写法都很难统一) #include<map> #include<set 阅读全文
posted @ 2017-10-31 10:46 walfy 阅读(232) 评论(0) 推荐(0)
摘要:题意:有1到n的数组,每次删除第k小的值,并求和 题解:splay基本操作,删除+合并 坑点:由于不会c++指针操作,sb的只删除了头指针导致一直mle #include<bits/stdc++.h> #include<ext/rope> #define fi first #define se se 阅读全文
posted @ 2017-10-29 13:45 walfy 阅读(228) 评论(0) 推荐(0)
摘要:题意:一个值1到n的数组,一种(多次)操作把l到r的区间反转,然后放到数组尾部 题解:裸的splay,用区间合并和区间分割,反转用lazy标记+pushdown就好了 #include<bits/stdc++.h> #include<ext/rope> #define fi first #defin 阅读全文
posted @ 2017-10-28 22:59 walfy 阅读(194) 评论(0) 推荐(0)
摘要:题意:每天给你一个数,要求统计最小波动值,强制在线的就是每次从已经出现过的数值中找与当前值间隔最小的加起来 题解:splay维护,同时求解当前值的前驱和后继,找距离小的那个就好了 splay是一种二叉搜索树,可以在log(n)的时间内维护,而且通过左旋和右旋避免二叉搜索树退化成一条链,而且可以利用二 阅读全文
posted @ 2017-10-18 23:37 walfy 阅读(142) 评论(0) 推荐(0)