ACM_线段树
文章平均质量分 80
SmallKind
这个作者很懒,什么都没留下…
展开
-
poj 1436 Horizontally Visible Segments
链接;点击打开链接 求三条线段,两两可见。两条线段可见是有一条平行X的直线与这两条线段都有交点且在这两条线段之间,没有其他线段与这条平行线相交。题目给你线段的起点和终点,还有x轴坐标。以Y轴来建树,按X轴排序,先求出两两可见的线段,储存在容器里(省时),然后for暴力求出三条两两可见的。 #include #include #include #include #include usin原创 2013-08-02 15:44:14 · 397 阅读 · 0 评论 -
山东省第四届ACM-H Boring Counting
链接:点击打开链接 题意: 给你n个数,m个询问(N and M (1 ),询问包含四个数L,R,A,B 求区间[L,R]里面在区间[A,B]的数的个数。 思路: 首先想到的是而且的树状数组,或者线段树处理,因为数据量太大。但是二维这个维数也不能表示,因为离散化之后50000*50000是不能表示的,那怎么办呢? 划分树,我们只要二分枚举该区间的最小的第几大大于等原创 2013-08-16 16:56:01 · 646 阅读 · 0 评论 -
poj 1151 Atlantis
链接:点击打开链接 同样也是求矩形的面积和,线段树+离散化+扫描线,根据hdu 覆盖面积改过来的。不过出现一个问题,用%.2lf不能过,改为%.2f就过啦。 #include #include #include #include #include using namespace std; #define N 1100 struct node1{ double x,y1,y2;原创 2013-08-11 20:12:44 · 356 阅读 · 0 评论 -
poj 1389 Area of Simple Polygons
链接:点击打开链接 没看题意,应该就给你多个矩形,让你求出总面积,覆盖多次的算一次。其实和hdu 覆盖的面积差不多,线段树+离散化+扫描线。poj 1151的代码改一下就过啦,这三道题基本就是一样的。 #include #include #include #include #include using namespace std; #define N 11000 str原创 2013-08-11 20:07:55 · 535 阅读 · 0 评论 -
2011ACM湖南省省赛K题 RMQ with Shifts
问题描述 In the traditional RMQ (Range Minimum Query) problem, we have a static array A. Then for each query (L, R) (L<=R), we report the minimum value among A[L], A[L+1], …, A[R]. Note that the indi原创 2013-08-07 15:50:02 · 715 阅读 · 0 评论 -
FZU 2105 Digits Count
链接:点击打开链接 四个操作,或,与,异或,求和。成段更新。 如果相邻两个数经过操作之后变成相同的数了,那么再经过覆盖了该区间的操作时,那么他们的值将同时发生改变,变成另外一个相同的值,这多次操作下去,之后将生更多的相同的数字区间,这里的相同数字就是懒惰标记更新的关键:例如:OR 6 0 3, A=[6 6 6 7]; 其中6出现了3次 #inc原创 2013-08-06 18:50:22 · 596 阅读 · 0 评论 -
poj 3667 Hotel
链接:点击打开链接 给定N个连续的房间,最初的时候全部是空的,接下来m个操作,总共有一下两种操作: 1、 a:询问是不是有连续长度为a的空房间,有的话住进最左边 2 、a b:将[a,a+b-1]的房间清空 基础的区间合并和覆盖问题,维护四个域:懒惰标记setv,区间最值maxv,从左端点开始的连续的最大房间数lmax,从右端点开始的连续的最大房间数rmax #inc原创 2013-08-06 10:38:27 · 310 阅读 · 0 评论 -
poj 2777 Count Color
链接:点击打开链接 两种操作,C A B C是A到B中涂颜色C,P A B 是A到B区间有几种颜色。成段更新。需要注意的是这里没讲A一定大于B。 #include #include #include #include using namespace std; #define N 100010 struct node{ int l; int r; int c; }原创 2013-08-04 18:54:11 · 389 阅读 · 0 评论 -
poj 3277 City Horizon
链接:点击打开链接 求在同一水平线上的矩形面积。与HDU 1255 覆盖面积有点类似。 #include #include #include #include using namespace std; #define N 40010 int line[2*N],a[N],b[N],h[N]; struct node{ int l; int r; int c;原创 2013-08-04 09:31:49 · 525 阅读 · 0 评论 -
poj 3264 Balanced Lineup
链接:点击打开链接 大水题一个。这周的线段树训练,恐怕就是这道最水啦。。。。 #include #include #include #include using namespace std; #define N 50010 struct node{ int l; int r; int min; int max; }anode[4*N]; int date原创 2013-08-04 18:58:22 · 375 阅读 · 0 评论 -
hdu 1255 覆盖的面积
链接:点击打开链接 求覆盖两次和两次以上的面积,扫描线加线段树。 #include #include #include #include #include using namespace std; #define N 5010 #define SB 1e-8 struct node1{ double x,y1,y2; int flag; }a[N]; struct no原创 2013-08-04 09:26:53 · 422 阅读 · 0 评论 -
poj 3468 A Simple Problem with Integers
链接:点击打开链接 有N个数,A1~An,有两种操作,C A B C代表A到B区间所有的数都加C,Q A B是求A到B区间的和,是一道简单的分段更新,懒惰记忆。记得用long long就行 #include #include #include using namespace std; #define N 100010 struct node{ int l; int r; long原创 2013-08-02 15:25:25 · 331 阅读 · 0 评论 -
poj 2892 Tunnel Warfare
链接:点击打开链接 给你N个相连的村庄,有三种操作,D x是把x村庄销毁(就是这个村庄与其他村庄的路都毁掉),Q x是问你有几个村庄与之相连,R是把最近销毁的村庄复原。 求的是连续的区间,区间合并问题,村庄左连续和右连续的村庄,就可以得出总连续的村庄。 #include #include #include using namespace std; #define N 50010 i原创 2013-08-02 15:14:13 · 402 阅读 · 0 评论 -
poj 2528 Mayor's posters
l链接;点击打开链接 给一墙贴海报,求的是最后还可以看见好多张海报。。。 由于数据很大,我们要用到离散化,区间覆盖,跟涂颜色差不多,就是求墙上还可以看到多少种颜色。 #include #include #include #include using namespace std; #define N 20100 struct node1{ int x; int y;原创 2013-08-02 15:53:16 · 374 阅读 · 0 评论 -
hdu 2665 Kth number || poj 2761 Feed the dogs || poj 2104 K-th Number
都是划分树加线段树。 划分树定义为,它的每一个节点保存区间[lft,rht]所有元素,元素顺序与原数组(输入)相同,但是,两个子树的元素为该节点所有元素排序后(rht-lft+1)/2个进入左子树,其余的到右子树,同时维护一个num域,num[i]表示lft->i这个点有多少个进入了左子树。 三个代码基本一样,就只有输入不同,第二个和第三个一样: #include #includ原创 2013-08-04 09:39:29 · 598 阅读 · 0 评论