扫描线
里阿奴摩西
这个作者很懒,什么都没留下…
展开
-
[扫描线 计算几何] BZOJ 1845 [Cqoi2005] 三角形面积并
%%%PoPoQQQ:http://blog.csdn.net/popoqqq/article/details/42581881经典的扫描线首先求出所有直线交点的横坐标,排序,去重然后对于每个横坐标,两段之间夹的部分一定是一个或多个梯形因此我们取中位线,求出中位线被所有三角形覆盖区间的区间并的长度,即可计算出这部分的面积#includ原创 2016-03-18 20:08:41 · 1088 阅读 · 0 评论 -
[扫描线 二分图最大匹配 线段树优化网络流] Codeforces 793G Tinkoff Challenge - Elimination Round G. Oleg and chess
这个我们首先可以转化成一个二分图最大匹配的模型 但是肯定跑不出 首先扫描线 把free的格子剖成O(n)O(n)个矩形 对两边都建成线段树 每个矩形对应两边各O(logn)O(\log n)个点 两两相连 总边数O(nlog2n)O(n\log^2n)#include<cstdio>#include<cstdlib>#include<algorithm>#include<cstrin原创 2017-05-28 10:50:50 · 1048 阅读 · 0 评论 -
[扫描线 线段树] Codeforces 720D Russian Code Cup 2016 - Finals D. Slalom
注意这里的本质不同的含义 是左边和右边的障碍集合不同 那么我们要考虑怎么去重 我们要求能向右走就向右走 也就是说我们考虑把所有向左上的角都折叠起来然后就可以扫描线加线段树了 我们遇到一个障碍 就把能爬上来的都统计到障碍上面的那格 注意能爬需要一些判断#include<cstdio>#include<cstdlib>#include<algorithm>#include<set>usi原创 2017-04-17 09:38:34 · 574 阅读 · 0 评论 -
[单调栈 扫描线] BZOJ 4826 [Hnoi2017]影魔
先用单调栈找出比ii大的第一个数lil_i 和 rir_i 然后[i,i+1][i,i+1]有p1的贡献 [li,ri][l_i,r_i]有p1的贡献 [li,x] x∈[i+1,ri−1][l_i,x] \ x\in [i+1,r_i-1] 有p2的贡献 [x,ri] x∈[li+1,i−1][x,r_i] \ x\in [l_i+1,i-1] 有p2的贡献 放在平面上就是点和线段 矩形求原创 2017-04-20 06:54:56 · 884 阅读 · 0 评论 -
[扫描线 杂题] Codeforces Gym 101190 NEERC 16 E. Expect to Wait
智商越来越捉急 看图就知道了 答案就是阴影的面积 扫描线一波就好了#include<cstdio>#include<cstdlib>#include<algorithm>using namespace std;typedef long long ll;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; return原创 2017-04-15 20:15:13 · 761 阅读 · 0 评论 -
[扫描线 线段树] BZOJ 4422 [Cerc2015]Cow Confinement
好题 但是懒得写题解 最近特别懒#include<cstdio>#include<cstdlib>#include<algorithm>#include<set>using namespace std;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; return p1==p2&&(p2=(p1=buf)+frea原创 2017-04-13 17:27:45 · 586 阅读 · 0 评论 -
[Treap 笛卡尔树 扫描线 补集转化] BZOJ 2658 [Zjoi2012]小蓝的好友(mrx)
这个先转化成全部矩形 C2R+1∗C2C+1C_{R+1}^2*C_{C+1}^2 减去不包含点的矩形 我们考虑扫描线 也就是以当前直线作为右边界的矩形有多少个 对于每个纵坐标 设h表示最左能扩展到哪里 假设hmin(1,n)=hxh_{min (1,n)}=h_x 那么答案至少应该C2C+1∗hminC_{C+1}^2*h_{min} 然后还要加上C2x−1∗(hmin(1,x−1)−原创 2017-02-14 10:53:17 · 877 阅读 · 0 评论 -
[扫描线 线段树上二分] BZOJ 4411 [Usaco2016 Feb]Load balancing
第一维扫描线第二维线段树上二分好久之前的代码了#include#include#include#includeusing namespace std;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; if (p1==p2) { p2=(p1=buf)+fread(buf,1,10000,std原创 2016-10-23 12:14:47 · 641 阅读 · 0 评论 -
[线段树 扫描线 鬼畜] BZOJ 3228 [Sdoi2008]棋盘控制 && BZOJ 1905 Soldier 士兵控制的棋盘
这种题目太恶心 把坐标轴转一下 就是裸的扫描线但是是网格 很恶心我用线段树算出无边界的情况 分奇数列和偶数列算两次然后四个边界算一下去掉四个角重复减的算一下 加回去#include#include#include#include#define cl(x) memset(x,0,sizeof(x))using namespace std;typedef l原创 2016-09-22 18:41:27 · 716 阅读 · 0 评论 -
[扫描线 线段树 暴力] BZOJ 4059 [Cerc2012]Non-boring sequences
扫描线:http://blog.csdn.net/PoPoQQQ/article/details/46380617暴力大法好:http://blog.csdn.net/geotcbrl/article/details/49797889定义lasti表示第i个元素上一次出现的位置(第一次出现则为0),nexti表示第i个元素下一次出现的位置(最后一次出现则为n+1),那么这个元素原创 2016-03-18 20:13:55 · 1040 阅读 · 0 评论 -
[扫描线 set] BZOJ 4561 [JLoi2016]圆的异或并
这道题算什么 这道题才可怕:[扫描线 树链剖分 树状数组] BZOJ2758 [SCOI2012]Blinker的噩梦原创 2016-08-23 18:09:12 · 918 阅读 · 0 评论 -
[扫描线 树状数组 随机数列 优化] BZOJ 2221 [Jsoi2009]面试的考验
%%%JSB#include#include#includeusing namespace std;typedef long long ll;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; if (p1==p2) { p2=(p1=buf)+fread(buf,1,100000,stdin); if (p1=原创 2016-06-27 11:48:52 · 959 阅读 · 0 评论 -
[扫描线 线段树] BZOJ 2161 布娃娃
这读入真让人蛋疼本来想的是两个log的二分#include#include#includeusing namespace std;typedef long long ll;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; if (p1==p2) { p2=(p1=buf)+fread(buf,1,原创 2016-06-26 08:40:40 · 804 阅读 · 0 评论 -
[扫描线 树链剖分 树状数组] BZOJ2758 [SCOI2012]Blinker的噩梦
扫描线 一般扫描线的做法就是想象一根线向某个方向扫过,进入的进入,出去的出去,用一个set维护序列或是结合线段树,当然最恶心的就是加上计算几何但是落实到这题上就是各种鬼畜乱搞,只能膜大神省选前做难题的结果是——到处翻题解,程序越改越像“题意:平面上有n个多边形(凸包和圆)。任意两个多边形AB只有两种关系:(1)A包含B或者B包含A;(2)AB的公共面积为0。每个多边形有一个原创 2016-03-18 20:25:36 · 1457 阅读 · 0 评论 -
[扫描线 线段树 拓扑排序] BZOJ2584 [Wc2012]memory
%%% zky :http://blog.csdn.net/iamzky/article/details/42166795“P.S.找来kAc的标程想对拍,然后越改越像越改越像……”——zky找来zky的程序 然后越改越像#include#include#include#include#include#include#define V G[p].v#define ep原创 2016-03-18 20:34:55 · 684 阅读 · 0 评论 -
[几何 扫描线 最大子段和] JOI Open Contest 2017 Bulldozer
题目大意:给出平面上n个带权点,有正有负,求平面上两条平行直线之间的点权和最大是多少 VIEW PROBLEM - BULLDOZER (JOI17_BULLDOZER)直接枚举斜率,点按照距离排序后是一个最大子段和问题 然后考虑扫描线旋转斜率,两个点相对关系变化只会发生在斜率与两点连线平行的情况,那么两点位置swap一下,更一般的如果是一段都满足这个,那么这一段要reverse一下 就是把两原创 2017-07-05 07:50:00 · 542 阅读 · 0 评论