摘要: http://poj.org/problem?id=3667哈哈,经典中的经典题啊。利用线段树求最大连续空闲区间,并返回空闲区间的起点坐标。View Code 1 #include<iostream> 2 #include<string> 3 #include<algorithm> 4 using namespace std; 5 6 struct node 7 { 8 int l; 9 int r; 10 int l_val; //从左节点数起的最大连续空闲区间 11 int r_val; //从右节点起的最大连续空闲区间 12 ... 阅读全文
posted @ 2011-11-10 21:21 Accept 阅读(280) 评论(0) 推荐(0) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=2795这题咋一看和线段树没啥关系似的。其实不然,非线段树不能解也!将黑板报上每一行看做一个节点线段,黑板的宽度为其容量,这样,H行黑板就对应了H个叶子节点。H的范围为10^9,看起来很大不是吗?我们再看通知的数目n,n的数目小于等于200000,也就是说,就算每一行都放一个通知,最多也只需要200000行,可见H<=10^9,这个纯属吓人的嘛为每个线段添加一个max_left域,表示该区间的最大剩余容量,采用先序遍历树的方式,在max_left>=(通知长度) 的情况下一直向下查找,知道找到根节点 阅读全文
posted @ 2011-11-10 19:57 Accept 阅读(213) 评论(0) 推荐(0) 编辑
摘要: http://poj.org/problem?id=2528又是一道区间染色问题,经典问题,自然有经典解法:为线段树添加一个cover域,当cover的值为-1的时候,则说明该区间是有多种颜色组成的。当cover为一个非-1的值时,说明该区间为cover一种颜色组成。更新的时候只需要将单色的区间信息向下传递即可这题唯一要做的,或许就是离散化吧。离散化就是利用数组的下标与其值一一对应的映射关系的一种hash。View Code 1 #include<iostream> 2 #include<string> 3 #include<algorithm> 4 usi 阅读全文
posted @ 2011-11-10 15:08 Accept 阅读(250) 评论(0) 推荐(0) 编辑