区间交
&*^*&
这个作者很懒,什么都没留下…
展开
-
acm-(思维、区间交) Codeforces Round #690 (Div. 3) F. The Treasure of The Segments
传送门 考虑反面会更简单,也就是找到和某个线段不相交的线段个数,假设当前考虑线段为(l,r)(l,r)(l,r),那么与它不相交的线段要么满足r′<lr'<lr′<l,要么满足l′>rl'>rl′>r,那么就upperbound()upper_bound()upperbound()找即可,这里有个小技巧,将rrr开成负数,这样就可以写成跟lll一样了(还不用特判)。 #include <bits/stdc++.h> using namespace std;.原创 2020-12-16 23:39:10 · 109 阅读 · 0 评论 -
acm-(dp、区间交)Codeforces Round #661 (Div. 3) F. Yet Another Segments Subset
传送门 本题考虑将线段按照长度从小到大排序,然后按照长度进行dp。 dp分为两部分: 第一部分:设val[i]val[i]val[i]表示与第iii条线段可以包含的所有线段(包括第iii条线段)的最大个数,并且这些线段要满足题目所述条件中的不相交(即要么包含要么不相交)关系。 第二部分:设dp[x]dp[x]dp[x]表示位于iii点及其之前的所有线段能够选择的最大条数(满足题目条件的情况下) 首先需要对所有线段进行离散化,然后方便起见可以添加一个长度能够覆盖所有线段的线段,编号为n+1n+1n+1,那么.原创 2020-12-16 21:51:09 · 100 阅读 · 0 评论 -
acm-(区间覆盖)Educational Codeforces Round 95 (Rated for Div. 2) G. Three Occurrences
传送门 本题考虑固定右端点rrr,然后看有多少个左端点lll符合条件。 那么如何找合法的lll呢,我们假设数组last[a[r]][0∼2]last[a[r]][0\sim 2]last[a[r]][0∼2]分别表示元素a[r]a[r]a[r]在rrr之前(不包括rrr)最近的第一个位置、第二个位置、第三个位置。 容易得出lll必定位于last[a[r]][2]+1∼last[a[r]][1]last[a[r]][2]+1\sim last[a[r]][1]last[a[r]][2]+1∼last[a[r.原创 2020-11-19 11:09:57 · 214 阅读 · 0 评论 -
acm-扫描线学习笔记
引言 扫描线可以用于解决矩形求面积并,矩形求周长并的问题 问题引入 我们以洛谷的P5490 【模板】扫描线为例题来讲解扫描线的基础运用。 先给出题面描述: 扫描线的精髓在于用一根垂直于坐标轴的线去扫描平面上的对象,并在此过程中维护关于平行于该扫描线的方向上的一维的变量。 具体就本题而言,我们可以设置一根平行于x轴而垂直于y轴的线条然后沿着y轴向上扫描矩形。当然,这根线上我们会始终维护一些量,本题中我们维护的是当前扫描线上与所有矩形的交集,显然是一根一根的线段,由于是求面积,我们维护的是这些交集线段的总原创 2020-10-09 12:12:27 · 655 阅读 · 0 评论 -
acm-(区间交,贪心,multiset,排序,思维)Codeforces Round #672 (Div. 2) D.Rescue Nibel!
考虑将所有区间按照左端点由小到大排序,然后按这个顺序来枚举区间并进行check,对于当前区间而言,考虑在它之前的区间中能否挑出k-1个区间使得它们与当前区间都至少有一个公共交点。由于之前的区间的左端点都是小于等于当前区间的左端点,因此只要保证它们的右端点大于等于当前区间左端点那么就一定与当前区间存在交集,也就是符号条件的区间。 那么如何获得满足该条件(即右端点大于等于当前区间左端点)区间的个数呢,考虑使用multiset来解决该问题,我们每次check完一个区间后,就将该区间的右端点加入multiset,.原创 2020-09-27 07:52:41 · 137 阅读 · 0 评论