题目描述

  智者奥尔曼曾说过:有缘的人即使相隔海角天涯,也会在梦境中相遇。
  $IcePrince\text{_}1968$和$IcePrincess\text{_}1968$便是如此。有一天$IcePrincess\text{_}1968$突发奇想:为什么不用梦境操控仪器来增加她和$IcePrince\text{_}1968$的缘分呢?
  $IcePrincess\text{_}1968$的梦境可以用$n$个区间来表示,第$i$个区间$[l_i,r_i]$表示她的第$i$个梦境会在$l_i$时刻开始,在$r_i$时刻结束(包含$l_i$和$r_i$两个时刻)。因为$IcePrincess\text{_}1968$经常做白日梦,所以$n$可能很大。
  两个人的梦境不是什么时候都能融合的。只有在一些关键的与另一个人相关的梦境转折点两个人的梦境相遇,才能完成融合,形成浪漫的梦境。$IcePrincess\text{_}1968$探测到$IcePrince\text{_}1968$近期的$m$个与$IcePrincess\text{_}1968$相关的梦境转折点,第$i$个转折点$t_i$表示他的第$i$个梦境转折点会在$t_i$时刻出现。因为$IcePrince\text{_}1968$和$IcePrincess\text{_}1968$很有缘,$IcePrince\text{_}1968$经常梦到$IcePrincess\text{_}1968$,所以$m$可能会很大。
  当$IcePrincess\text{_}1968$的一个梦境包含了$IcePrince\text{_}1968$的一个梦境转折点时,两个人的这两段梦境就能得到融合。但要注意$IcePrincess\text{_}1968$的每段梦境只能和$IcePrince\text{_}1968$的一个梦境转折点融合,类似的,$IcePrince\text{_}1968$的每个梦境转折点只能和$IcePrincess\text{_}1968$的一段梦境融合,否则会引发时空混乱。
  $IcePrincess\text{_}1968$很喜欢做和$IcePrince\text{_}1968$相关的梦。所以她想算出她的这些梦境最多能和$IcePrince\text{_}1968$的梦境转折点融合出多少个浪漫的梦境。$IcePrincess\text{_}1968$擅长文学但不擅长计算机,所以只能找你帮忙。


输入格式

  输入文件名为$dream.in$。
  文件的第一行为有两个正整数$n,m$,表示$IcePrincess\text{_}1968$的梦境个数和$IcePrince\text{_}1968$的与$IcePrincess\text{_}1968$相关的梦境转折点个数。
  第$2$至第$n+1$行,每行两个正整数$l_i,r_i$,第$i+1$行的两个数刻画了$IcePrincess\text{_}1968$的第$i$段梦境,含义如题面中所述。
  第$n+2$至第$n+m+1$行,每行一个正数$t_i$,第$i$行的两个数刻画了$IcePrince\text{_}1968$的第$i-n-1$个梦境转折点,含义如题面中所述。


输出格式

  输出文件名和$dream.out$。
  输出文件仅一行,一个非负整数$N$表示$IcePrincess\text{_}1968$最多能获得多少段浪漫的梦境。


样例

样例输入:

2 2
1 3
2 4
1
3

样例输出:

2


数据范围与提示

样例解释:

$IcePrincess\text{_}1968$可以将自己的第一段梦境和第一个梦境转折点匹配,第二段梦境和第二个梦境转折点匹配,从而获得两段浪漫的梦境。因为$IcePrincess\text{_}1968$一共只做了两个梦,所以这一定是最多的数量。

数据范围:

对于$30\%$的数据,$n\leqslant 10,m\leqslant 10$;
对于$50\%$的数据,$n\leqslant 100,m\leqslant 100$;
对于$70\%$的数据,$n\leqslant 2,000,m\leqslant 2,000$;
对于$100\%$的数据,$n\leqslant 200,000,m\leqslant 200,000,1\leqslant l_i,r_i\leqslant 1,000,000,000,1\leqslant ti\leqslant 1,000,000,000$,保证对于每段梦境,$l_i\leqslant r_i$。


题解

简单贪心。

将每段梦境按$l$从小到大排序,将每个梦境转折点从小到大排序。

枚举每个梦境转折点,并将每个$l$小于它的梦境压入一个以$r$排序的小根堆,然后弹走所有$r$已经小于它的梦境(因为梦境转折点递增,所以这些梦境已经没用了),然后选择$r$最小的这一个一定最优,统计有多少梦境转折点会被利用即可。

时间复杂度:$\Theta(n\log n)$。

期望得分:$100$分。

实际得分:$100$分。


代码时刻

#include<bits/stdc++.h>
using namespace std;
struct rec{int l,r;}e[200001];
int n,m;
int t[200001],fail=1;
bool vis[200001];
int ans;
bool cmp(rec a,rec b){return a.l<b.l;}
priority_queue<int,vector<int>,greater<int>>q;
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)scanf("%d%d",&e[i].l,&e[i].r);
for(int i=1;i<=m;i++)scanf("%d",&t[i]);
sort(e+1,e+n+1,cmp);
sort(t+1,t+m+1);
for(int i=1;i<=m;i++)
{
while(e[fail].l<=t[i]&&fail<=n){q.push(e[fail].r);fail++;}
while(!q.empty()&&q.top()<t[i])q.pop();
if(q.size()){ans++;q.pop();}
}
printf("%d",ans);
return 0;
}

rp++

[CSP-S模拟测试]:梦境(贪心+小根堆)的更多相关文章

  1. AcWing:145. 超市(贪心 + 小根堆 or 贪心 + 并查集)

    超市里有N件商品,每个商品都有利润pipi和过期时间didi,每天只能卖一件商品,过期商品(即当天di<=0di<=0)不能再卖. 求合理安排每天卖的商品的情况下,可以得到的最大收益是多少 ...

  2. AcWing:111. 畜栏预定(贪心 + 小根堆)

    有N头牛在畜栏中吃草. 每个畜栏在同一时间段只能提供给一头牛吃草,所以可能会需要多个畜栏. 给定N头牛和每头牛开始吃草的时间A以及结束吃草的时间B,每头牛在[A,B]这一时间段内都会一直吃草. 当两头 ...

  3. bzoj 1577: [Usaco2009 Feb]庙会捷运Fair Shuttle——小根堆+大根堆+贪心

    Description 公交车一共经过N(1<=N<=20000)个站点,从站点1一直驶到站点N.K(1<=K<=50000)群奶牛希望搭乘这辆公交车.第i群牛一共有Mi(1& ...

  4. AcWing:146. 序列(小根堆 + 数学归纳 + 贪心)

    给定m个序列,每个包含n个非负整数. 现在我们可以从每个序列中选择一个数字以形成具有m个整数的序列. 很明显,我们一共可以得到nmnm个这种序列, 然后我们可以计算每个序列中的数字之和,并得到nmnm ...

  5. [CSP-S模拟测试]:字符交换(贪心+模拟)

    题目传送门(内部题136) 输入格式 输入文件第一行为两个正整数$n,k$,第二行为一个长度为$n$的小写字母字符串$s$. 输出格式 输出一个整数,为对字符串$s$进行至多$k$次交换相邻字符的操作 ...

  6. csp-s模拟测试99

    csp-s模拟测试99 九九归一直接爆炸. $T1$一眼板子. $T2$一眼语文题(语文的唯一一次$120+$是给模拟出来的可知我的语文能力). $T3$一眼普及题. ?? Hours Later 板 ...

  7. 「题解」NOIP模拟测试题解乱写II(36)

    毕竟考得太频繁了于是不可能每次考试都写题解.(我解释个什么劲啊又没有人看) 甚至有的题目都没有改掉.跑过来写题解一方面是总结,另一方面也是放松了. NOIP模拟测试36 T1字符 这题我完全懵逼了.就 ...

  8. scala写算法-用小根堆解决topK

    topK问题是指从大量数据中获取最大(或最小)的k个数,比如从全校学生中寻找成绩最高的500名学生等等. 本问题可采用小根堆解决.思路是先把源数据中的前k个数放入堆中,然后构建堆,使其保持堆序(可以简 ...

  9. 随手练——HDU Safe Or Unsafe (小根堆解决哈夫曼问题)

    HDU 2527 :http://acm.hdu.edu.cn/showproblem.php?pid=2527 哈夫曼树,学完就忘得差不多了,题目的意思都没看懂,有时间复习下,看了别人的才知道是怎么 ...

随机推荐

  1. C#读取xml节点数据方法小结

    本文实例总结了C#读取xml节点数据的方法.分享给大家供大家参考.具体如下: 第一种: 使用XPath XML的路径我配置在web.config 的appSettings节点下 <appSett ...

  2. [Git] 015 远程仓库篇 第二话

    0. 前言 在 [Git] 006 在本地新建一个仓库 中,我在本地建了一个仓库 "git_note" 这回的任务 在 GitHub 上建一个远程仓库:为方便记忆,我就起名为 &q ...

  3. Hyper-V Centos7 虚拟机固定IP

    在网上看到很多篇文章,自己也去试验过,结果实现的效果都不是很理想,并不是自己所需要的,下面是我自己研究,最后成功的经验,希望能够帮到大家.少走一些弯路. 需求 1.无论物理机的网络环境怎么变化,都需要 ...

  4. python 如何解决高并发下的库存问题??

    python 提供了2种方法解决该问题的问题:1,悲观锁:2,乐观锁 悲观锁:在查询商品储存的时候加锁 select_for_update()  在发生事务的commit或者是事务的rollback时 ...

  5. SCUT - 216 - 宝华科技树

    https://scut.online/p/216 演员 把这个当成dp算了半天,各种姿势,好吧,就当练习一下树dp. 假如是每个节点的层数之和,按照dp[i][j]为从i点出发获得j科技的最小费用d ...

  6. Runnable、Callable和Future三者对比

    Runnable是个借口,使用简单: 1. 实现该接口并重写run方法 2. 利用该类的对象创建线程 3. 线程启动时就会自动调用该对象的run方法     通常在开发中结合ExecutorServi ...

  7. java中的数据类型,基本数据类型及其包装类型

    java中的8大基本类型及其包装类型 1,int--->Integer 2,byte--->Byte 3,short--->Short 4,long--->Long 5,cha ...

  8. Android 开发环境部署

    引言   在windows安装Android的开发环境不简单也说不上算复杂,本文写给第一次想在自己Windows上建立Android开发环境投入Android浪潮的朋友们,为了确保大家能顺利完成开发环 ...

  9. XMPP实现原理

    XMPP协议简介   XMPP(Extensible Messageing and Presence Protocol:可扩展消息与存在协议)是目前主流的四种IM(IM:instant messagi ...

  10. 028-实现阿里云ESC多FLAT网络

    实现类似于阿里云ECS的网络结构,其效果为云主机拥有两块和两个不同的网络,一个网络是用于用于和外网连接,一个用于内网通信,但宿主机上至少有两个网卡,整体配置如下:1.在wmare里给宿主机添加一块网卡 ...