摘要: http://poj.org/problem?id=1436这道题最终就是问,两两可见的三条线段组有多少组。所谓两两可见,指的是某一条横线可以连接到两条线段,并且中途不会碰到其他线段。很显然又是一道区间染色的题目嘛,关于区间染色的解法,不多说了,这里说关键的!这题就sample来说,按它给的数据来建树的话,最右边的和最左边的是无法触碰到一起的,因为第二根线段和第三根线段之间只留下了[2,3]这样的小缝隙,而这样的小缝隙在线段树建树的过程中,是会被二分忽略掉的。看图上面黑色的,就是题目所给的sample所对应的坐标系上的图样,而下面的红色的,就是上面的黑色的在线段树中所对应的图样。很显然最右边的 阅读全文
posted @ 2011-11-13 15:50 Accept 阅读(227) 评论(0) 推荐(0) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=1828线段树求解重叠矩形周长。这个比求并面积交面积难度大一些,要多想想才能明白回忆求并面积的时候的第二种方法,利用线段树树形dp出可以与下一个将要插入的线段去构成并面积的最大y坐标长度,即tree[1].len;然后求并面积的时候,只需要将tree[i].len*(line[i+1].x-line[i].x)即可。想一想,并面积求的是乘绩,很容易想到周长其实就是求和。也就是y坐标长度加上x坐标的长度。而tree[1].len就已经求的了目前y坐标的可加长度,只需要将它减去上一次得到的tree[1].len再取 阅读全文
posted @ 2011-11-13 14:57 Accept 阅读(1116) 评论(0) 推荐(1) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=1255这题...如果会求面积并的话,面积交就不是问题了。只需要将原先判断线段树中cover值为大于等于1改为大于等于2即可!什么都不会的同学,请看上一个随笔http://www.cnblogs.com/ka200812/archive/2011/11/13/2247064.htmlView Code 1 #include<iostream> 2 #include<string> 3 #include<stdlib.h> 4 using namespace std; 5 6 阅读全文
posted @ 2011-11-13 10:18 Accept 阅读(484) 评论(1) 推荐(0) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=1542嗯哼,要开始利用线段树求解矩形面积的并、交、以及周长了。这题是求面积并的有两种方法,一种思想很简单,操作方便,理解容易,但效率不高。先看一下吧给定一个矩形的左下角坐标和右上角坐标分别为:(x1,y1)、(x2,y2),对这样的一个矩形,我们构造两条线段,一条定位在x1,它在y坐标的区间是[y1,y2],并且给定一个cover域值为1;另一条线段定位在x2,区间一样是[y1,y2],给定它一个cover值为-1。根据这样的方法对每个矩形都构造两个线段,最后将所有的线段根据所定位的x从左到右进行排序。上图中 阅读全文
posted @ 2011-11-13 10:12 Accept 阅读(6442) 评论(10) 推荐(1) 编辑