首先,显然每个区间的最长连续子区间要么在左孩子里,要么在右孩子里,要么跨越两个孩子。于是我们可以对每个区间维护如下信息ll(leftlong),rl(rigthlong),ml(midlong)分别表示前缀最长长度,后缀最长长度,中间的最长区间长度,并维护即可。 1 #include 2 #incl...
分类:
其他好文 时间:
2015-06-06 07:58:09
阅读次数:
157
题目大意:有n条长度为1的线段,确定他们的起点,必须是整数,使得第i条线段在[ri,di]之间。最后输出空隙的最小值解题思路:维护一个最左值和最右值,分别代表不存在间隙的线段所能填充的区间,如果要在下一个区间取线段,如果线段在所维护的区间之内,那么就表示从该维护区间内取线段,可以构成不间断的线段#include
#include
#include<algorithm...
分类:
其他好文 时间:
2015-05-05 23:56:18
阅读次数:
225
Splay的区间维护还是很机智的,不好写是真的。 1 #include 2 #include 3 #include 4 #include 5 #include 6 #define REP(i, s, n) for(int i = s; i = s; i --) 8 using...
分类:
其他好文 时间:
2015-04-14 23:03:53
阅读次数:
228
本题将一道LCT的题特殊化(支持加边和删边,询问图的连通性),将图变成了2×m的网格图,然后就神奇地可以用线段树来维护。对于每个区间[l,r],维护其四个角落之间的连通性(仅仅通过[l,r]这段的边构建起的连通性)。查询[l,r]时,先计算出[1,l-1],[l,r],[r+1,c]这三个线段的连通...
分类:
其他好文 时间:
2015-02-21 23:27:53
阅读次数:
389
题目大意:维护一种01数据结构,它可以:
1.把一段区间变成0。
2.把一段区间变成1。
3.把一段区间取反。
4.查询一段区间内1的个数。
5.查询一段区间内连续的1的个数。
思路:一眼看去Splay和线段树都可以,看起来好像Splay维护起来好弄一点,就没怎么想写了Splay。写完之后才发现Splay维护的时候边界值根本没法弄(可能是我写的麻烦),就又重写线段树。啊啊啊啊现...
分类:
其他好文 时间:
2014-10-01 13:33:11
阅读次数:
346
利用树的dfs序解决问题:就是dfs的时候记录每个节点的进入时间和离开时间,这样一个完整的区间就是一颗完整的数,就转化成了区间维护的问题。比如hdu3887 本质上是一个求子树和的问题 1 #include 2 #include 3 #include 4 #include 5 #i...
分类:
其他好文 时间:
2014-08-12 08:59:33
阅读次数:
261
bnu36907 Subpalindromes
字符串hash+线段树
题意:给一个字符串(
1)将指定位置的字符改为c
2)询问l-r的子串,是否是回文串。
解法 :区间维护pl和pr,表示从左到右的hash和从右到左的hash,然后在up和query中合并区间,最后判断pl和pr是否相等即可。
#include
#include
#include
#include
#inc...
分类:
其他好文 时间:
2014-08-11 21:29:52
阅读次数:
301
题目大意:往一面墙上贴与墙等高的海报,n次贴完后,求可以看见的海报总数(看见一部分也算)思路:明显的区间维护,用线段树,不过裸的线段树超时超空间,可以把坐标离散,得到不超过200000个有效点,每个点都表示一个小区间(a[i]~a[i+1]这一段),然后就可以轻松地解决了。不过题目有个坑,给定的右坐...
分类:
其他好文 时间:
2014-08-04 20:47:37
阅读次数:
369
Buy Tickets Time Limit:4000MS Memory Limit:65536KB
64bit IO Format:%I64d & %I64u DescriptionRailway tickets were difficult to
buy around the Lunar New...
分类:
其他好文 时间:
2014-05-04 12:01:48
阅读次数:
306