ssoj3983: 梦境(dream)

时间限制: 1 Sec 内存限制: 256 MB
提交: 40 解决: 19
[提交][状态][博客][加入收藏]
题目描述
智者奥尔曼曾说过:有缘的人即使相隔海角天涯,也会在梦境中相遇。

IcePrince_1968 和 IcePrincess_1968 便是如此。有一天 IcePrincess_1968 突发奇想:为什么不用梦境操控仪器来增加她和 IcePrince_1968 的缘分呢?

IcePrincess_1968 的梦境可以用 n 个区间来表示,第 i 个区间[li,ri]表示她的第 i 个梦境会li 时刻开始,在 ri 时刻结束(包含 li 和 ri 两个时刻)。因为 IcePrincess_1968 经常做白日梦,所以 n 可能很大。

两个人的梦境不是什么时候都能融合的。只有在一些关键的与另一个人相关的梦境转折点两个人的梦境相遇,才能完成融合,形成浪漫的梦境。 IcePrincess_1968 探测到 IcePrince_1968 近期的 m 个与 IcePrincess_1968 相关的梦境转折点,第 i 个转折点 ti 表示他的第 i 个梦境转折点会在 ti 时刻出现。因为 IcePrince_1968 和 IcePrincess_1968 很有缘, IcePrince_1968 经常梦到 IcePrincess_1968,所以 m 可能会很大。当IcePrincess_1968 的一个梦境包含了 IcePrince_1968 的一个梦境转折点时,两个人的这两段梦境就能得到融合。但要注意 IcePrincess_1968 的每段梦境只能和 IcePrince_1968 的一个梦境转折点融合,类似的,IcePrince_1968 的每个梦境转折点只能和 IcePrincess_1968的一段梦境融合,否则会引发时空混乱。

IcePrincess_1968 很喜欢做和 IcePrince_1968 相关的梦。所以她想算出她的这些梦境最多能和 IcePrince_1968 的梦境转折点融合出多少个浪漫的梦境。IcePrincess_1968 擅长文学但不擅长计算机,所以只能找你帮忙。

输入
第一行为有两个正整数n,m,表示 IcePrincess_1968 的梦境个数和 IcePrince_1968 的与 IcePrincess_1968 相关的梦境转折点个数。

第 至第 n+1 行,每行两个正整数 li,ri,第 i+1 行的两个数刻画了 IcePrincess_1968 的i 段梦境,含义如题面中所述。

第2 至第 n+m+1 行,每行一个正数 ti,第i 行的两个数刻画了 IcePrince_1968 的第 i-n-1个梦境转折点,含义如题面中所述。

输出
一个非负整数 N 表示 IcePrincess_1968 最多能获得多少段浪漫的梦境。

样例输入
2 2
1 3
2 4
1
3
样例输出
2
提示
【输入输出样例 1 解释】
IcePrincess_1968 可以将自己的第一段梦境和第一个梦境转折点匹配,第二段梦境和第二个梦境转折点匹配,从而获得两段浪漫的梦境。因为 IcePrincess_1968 一共只做了两个梦,所以这一定是最多的数量

【输入输出样例 2】

见选手目录下的 dream/dream2.in 和 dream/dream2.ans。

【数据规模和约定】

对于 30%的数据,n<=10,m<=10;

对于 50%的数据,n<=100,m<=100;

对于 70%的数据,n<=2000,m<=2000;

对于 100%的数据,n<=200,000,m<=200,000,1<=li,ri<=1,000,000,000,1<=ti<=1,000,000,000,保证对于每段梦境,li<=ri。

来源
noip2018模拟-南外

题解:
对于这么大的数据,考虑贪心。考虑对于每一个点,所有区间左端点小于等于它,且右端点大于等于它的区间是可以产生贡献的,而若一个点能被至少一个区间覆盖到,那么匹配这个点一定是最优的,(因为如果这个点没被匹配,那么省下来的那个区间在后面也至多匹配一个点)即只需找到最没用的那个区间覆盖它,就是最优方案。那么按点的下标排序,最没用的应是右端点最小的区间(因为这对后面产生的贡献最小),故再按区间左端点排序,用堆优化即可。

猜你喜欢

转载自blog.csdn.net/sz_165394732/article/details/83351516