2012年3月30日
摘要: POJ_2892 这个题目用splay去想还是比较直接的,但之所以感觉思路比较直接,也是因为前面又巩固、学习了一下线段树的一些对于区间合并的操作,更多的涉及线段树区间合并的题目可以参考胡浩的博客http://www.notonlysuccess.com/index.php/segment-tree-complete/。 当然,这个题目是可以用线段树去做的,而且和splay去做是比较相似的,查询的时候都是去找这个点左半部分区间的右边有多少个连续的1,以及这个点右半部分区间的左边有多少个连续的1。 下面还是说一下我用splay做的时候的一些思路吧。 首先要明确的就是splay上一个节点表示... 阅读全文
posted @ 2012-03-30 16:27 Staginner 阅读(312) 评论(0) 推荐(0) 编辑
摘要: HDU_3397 感觉这种维护序列的题目就是填代码,把每种操作的模块写好就OK了。更多和区间合并相关的问题可以参考胡浩的博客http://www.notonlysuccess.com/index.php/segment-tree-complete/。 为了方便实现各种操作,可以引入lc[0/1](left contiguous)表示一个区间从左边开始连续最长0/1是多少,rc[0/1](right contiguous)表示一个区间从右边开始连续最长的区间0/1是多少,mc[0/1](max contiguous)表示当前区间最长的0/1是多少,num[0/1]表示当前区间的0/1的数量是多少 阅读全文
posted @ 2012-03-30 13:39 Staginner 阅读(232) 评论(0) 推荐(0) 编辑
摘要: HDU_3308 这个题目可以用线段树去做。对于一个区间内最长的LCIS,要么在左儿子中,要么在右儿子中,要么就横跨在中间。 单点的更新操作还是比较好写的,因为其没有区间限制,只要依次更新线段树上的各个父节点即可。 查询操作就有区间限制了,但区间内最长的LCIS的性质还是没有变的,即要么在左儿子中,要么在右儿子中,要么横跨在中间。但由于有了区间的限制,我们在更新最优解的时候要对不同形态的区间分类讨论一下了。#include<stdio.h>#include<string.h>#define MAXD 100010int N, M, a[MAXD], mc[4 * MAX 阅读全文
posted @ 2012-03-30 01:30 Staginner 阅读(444) 评论(0) 推荐(0) 编辑