poj1436 Horizontally Visible Segments】的更多相关文章

这是一个区间更新的题目,先将区间放大两倍,至于为什么要放大可以这样解释,按照从左到右有4个区间,y值是[1,5],[1,2],[3,4],[1,4]如果不放大的话,查询[1,4]区间和前面区间的”可见“情况时,由于[1,2],[2,3]将2,3端点覆盖,最终得不到[1,5]和区间[1,4]”可见“的情况,而实际上两者的[2,3]区间是可以存在一条水平线将其直接相连的.接下来将要更新的区间按照x从小到大排序,然后依次查询,查询之后再更新就行. 这样可以得到一个描述各个区间的相互关系的图G[N],G…
题意   在坐标系中有n条平行于y轴的线段  当一条线段与还有一条线段之间能够连一条平行与x轴的线不与其他线段相交  就视为它们是可见的  问有多少组三条线段两两相互可见 先把全部线段存下来  并按x坐标排序  线段树记录相应区间从右往左当前可见的线段编号(1...n)  超过一条就为0  然后从左往右对每条线段  先查询左边哪些线段和它是可见的  把可见关系存到数组中  然后把这条线段相应区间的最右端可见编号更新为这条线段的编号  最后暴力统计有多少组即可了 #include <cstdio>…
POJ 1436 Horizontally Visible Segments 题目链接 线段树处理染色问题,把线段排序.从左往右扫描处理出每一个线段能看到的右边的线段,然后利用bitset维护枚举两个线段.找出还有一个两个都有的线段 代码: #include <cstdio> #include <cstring> #include <algorithm> #include <bitset> #include <vector> using name…
ZOJ :: Problems :: Show Problem 1436 -- Horizontally Visible Segments 用线段树记录表面能被看见的线段的编号,然后覆盖的时候同时把能看到的线段记录下来.这里要用到拆点,在两个整点之间插入一个点. 最后O(n^2)统计三角形的个数,因为每条线段可以看见的另外的线段的条数不多,所以可以直接枚举两条边. 代码如下: #include <cstdio> #include <iostream> #include <al…
Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 5200   Accepted: 1903 Description There is a number of disjoint vertical line segments in the plane. We say that two segments are horizontally visible if they can be connected by a horizont…
Description There is a number of disjoint vertical line segments in the plane. We say that two segments are horizontally visible if they can be connected by a horizontal line segment that does not have any common points with other vertical segments.…
题意: 有一些平行于y轴的线段 ,两条线段称为互相可见当且仅当存在一条水平线段连接这两条  与其他线段没交点. 最后问有多少组  3条线段,他们两两是可见的. 思路: 线段树,找出两两可见的那些组合,最后暴力判断. #include<cstring> #include<cstdio> #include<algorithm> #include<cmath> #include<iostream> #include<vector> #def…
这道题做了快两天了.首先就是按照这些竖直线段的横坐标进行从左到右排序. 将线段的端点投影到y轴上,线段树所维护的信息就是y轴区间内被哪条线段所覆盖. 对于一条线段来说,先查询和它能相连的所有线段,并加入到一个有向图里面,一遍后面O(n3)暴力统计答案. 然后就是update,用这个线段将对应的区间“染色” 还要注意一个情况就是: 0 3 1, 0 1 2, 2 3 2, 0 3 3折四条线段 |    |    | |         | |    |    | 很明显第一和第三条线段是可相连的…
http://poj.org/problem?id=1436 题目大意:有n条平行于x轴的线段,每条线段有y坐标,如果两条线段有一段x坐标数值相等,且中间没有其它线段阻隔,则称这两条线段"照面".如果三条线段两两互能照面,则称这三条线段为一组.问这n条线段中有多少组? 可以看到题目中n<=8000,于是开始想n log n的算法,但是当我看那题的discuss时,有人说 这题数据太无语了--O(n^2lgn) TLE , O(n^3)的算法266ms-- O(n^3)能过?于是想…
水博客,水一水. Horizontally Visible Segments Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 6290   Accepted: 2287 Description There is a number of disjoint vertical line segments in the plane. We say that two segments are horizontally visible…