2012年4月7日
摘要: HDU_1542 如果我们将矩形左右两条边拓展成直线的话,这样平面就被分成了若干个区域,而每个区域内矩形覆盖的面积就等于这个区域的宽度乘以该区域内y轴方向上矩形覆盖的线段的长度和。 于是我们可以把y坐标离散化并建立线段树,然后沿x轴的方向进行扫描,每当遇到一条矩形左边的竖直边,就将其并到线段树中,每当遇到一条矩形右边的竖直边,就将线段树中以前并上的对应的左边的竖直边从线段树中删除。同时,每次在操作之前都可以将当前新扫描到的面积累加起来。为了能够表述“并”与“删除”,我们可以在线段树中用一个数组cnt表示这个节点表示的区间被覆盖了多少次,而不能简单的当成染色问题来对待,因为如果一个区间被覆盖了多 阅读全文
posted @ 2012-04-07 23:00 Staginner 阅读(580) 评论(2) 推荐(0) 编辑
摘要: POJ_2991 如果我们将其中某一个线段旋转β角,那么这个线段上方的所有线段都会旋转β角,这就很类似线段树中的对区间加上一个常数的问题了,于是不妨向着线段树的思路去想。 接下来一个问题就是β角是相对于谁的,换句话说我们所谓的每个线段都会旋转β角,那么是绕谁旋转的?实际上,如果我们局限于把线段当线段看的话,那么这个旋转就会看成是绕某个定点的,这个点就是我们旋转的线段和它下面那个不动的线段的交点,再这样想下去我们就没法处理了,因为每个旋转操作所绕的定点不是唯一的,我们没办法把所有的旋转操作都统一到一起,那么我们就没办法把旋转操作叠加,这样就没法使用线段树了。 但如果换个思路的话,实际上β角还等于 阅读全文
posted @ 2012-04-07 20:27 Staginner 阅读(2051) 评论(0) 推荐(1) 编辑