Luogu P3602 Koishi Loves Segments
传送门
题解
既然是选取区间,没说顺序
肯定先排遍序 都是套路
那么按什么排序呢???
为了方便处理
我们把区间按左端点从小到大排序
把关键点也按从小到大排序
假设当扫到 \(i\) 点时,i 点之前的点都已处理完毕 (已达上限,或是覆盖了的区间全部取了)
既然要选的区间多
所以需要选的区间对后面的影响少,所以把所有覆盖了当前关键点按右端点从小到大依次选取,直至上限满了为止
这个 用set就解决了
不过一定要记得把右端点小于当前关键点的区间弹掉
代码
#include<bits/stdc++.h>
using namespace std;
#define re register
#define ll long long
#define in inline
#define get getchar()
in int read()
{
int t=0,x=1; char ch=get;
while ((ch<'0' || ch>'9') &&ch!='-') ch=get;
if(ch=='-') ch=get,x=-1;
while (ch<='9' && ch>='0') t=t*10+ch-'0',ch=get;
return t*x;
}
const int _=4e5+5;
struct region1{
int l,r;
}e[_]; //区间
struct drop1{
int num,a;
}d[_]; //关键点
int n,m;
in int cmp1(drop1 a,drop1 b){return a.num<b.num;}
in int cmp2(region1 a,region1 b){return a.l<b.l;}
bool operator< (const region1 &a,const region1 &b)
{ return a.r<b.r; }
multiset<region1> s; //可重set
int main()
{
n=read(),m=read();
int ans=n;
for(re int i=1;i<=n;i++)
{
e[i].l=read(),e[i].r=read();
if(e[i].l>e[i].r)swap(e[i].l,e[i].r);
}
for(re int i=1;i<=m;i++)
d[i].num=read(),d[i].a=read();
sort(d+1,d+1+m,cmp1);
sort(e+1,e+n+1,cmp2);
int j=1;
for(re int i=1;i<=m;i++)
{
while (j<=n&&e[j].l<=d[i].num) s.insert(e[j++]); //添加覆盖当前关键点的区间
while (s.size()!=0 && (*s.begin()).r<d[i].num) s.erase(s.begin()); //去掉右端点已经在当前关键点左侧的区间
while (s.size()>d[i].a)
{
s.erase(--s.end()); // 依次贪心选取可利用的区间
ans--;
}
}
cout<<ans<<endl;
}
Luogu P3602 Koishi Loves Segments的更多相关文章
- D 洛谷 P3602 Koishi Loves Segments [贪心 树状数组+堆]
题目描述 Koishi喜欢线段. 她的条线段都能表示成数轴上的某个闭区间.Koishi喜欢在把所有线段都放在数轴上,然后数出某些点被多少线段覆盖了. Flandre看她和线段玩得很起开心,就抛给她一个 ...
- 洛谷P3602 Koishi Loves Segments(贪心,multiset)
洛谷题目传送门 贪心小水题. 把线段按左端点从小到大排序,限制点也是从小到大排序,然后一起扫一遍. 对于每一个限制点实时维护覆盖它的所有线段,如果超过限制,则贪心地把右端点最大的线段永远删去,不计入答 ...
- 洛谷P3602 Koishi Loves Segments 贪心
正解:贪心 解题报告: 传送门! 首先在学习贪心的入门题的时候我们就知道,当x=1的时候,也就是每条线段不能相交的时候的做法——就按右端点排序然后能选就选,也就是会议安排问题,原因显然?就你选右端点更 ...
- 【Luogu3602】Koishi Loves Segments(贪心)
[Luogu3602]Koishi Loves Segments(贪心) 题面 洛谷 题解 离散区间之后把所有的线段挂在左端点上,从左往右扫一遍. 对于当前点的限制如果不满足显然会删掉右端点最靠右的那 ...
- LuoguP3602 Koishi Loves Segments
题面 n个区间和数轴上的m个关键点 (0<=n,m<=4*1e5,数轴范围 \(-1^7\) ~ \(1^7\))每个关键点有被区间区间覆盖的次数上限,求最多能放多少个区间到数轴上 传送门 ...
- 【题解】P3599 Koishi Loves Construction
[题解]P3599 Koishi Loves Construction \(\mod n\) 考虑如何构造,发现\(n\)一定在第一位,不然不行.\(n\)一定是偶数或者是\(1\),不然 \(n|\ ...
- 题解-Koishi Loves Construction
题解-Koishi Loves Construction 前缀知识 质数 逆元 暴搜 Koishi Loves Construction 给定 \(X\),\(T\) 组测试数据,每次给一个 \(n\ ...
- E 洛谷 P3598 Koishi Loves Number Theory[数论]
题目描述 Koishi十分喜欢数论. 她的朋友Flandre为了检测她和数论是不是真爱,给了她一个问题. 已知 给定和个数,求对取模. 按照套路,呆萌的Koishi当然假装不会做了,于是她来向你请教这 ...
- C 洛谷 P3599 Koishi Loves Construction [构造 打表观察]
题目描述 Koishi决定走出幻想乡成为数学大师! Flandre听说她数学学的很好,就给Koishi出了这样一道构造题: Task1:试判断能否构造并构造一个长度为的的排列,满足其个前缀和在模的意义 ...
随机推荐
- springboot的启动流程源码分析
.测试项目,随便一个简单的springboot项目即可: 直接debug调试: 可见,分2步,第一步是创建SpringApplication对象,第二步是调用run方法: 1.SpringApplic ...
- JQuery实现tab页
用ul 和 div 配合实现tab 页 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="U ...
- mysql-16-variables
#变量 /* 系统变量: 全局变量 会话变量 自定义变量: 用户变量 局部变量 */ # 一.系统变量 #由系统提供,属于服务器层面 #1.查看所有的系统变量 show global variable ...
- ESD(静电释放)上半部分
ESD(静电释放)上半部分 ESD:Electro-Static discharge静电释放 1.ESD静电释放的模式 1.1 人体放电模式(human body mode) 人体会释放静电,那么人体 ...
- 002 01 Android 零基础入门 01 Java基础语法 01 Java初识 02 Java简介
002 01 Android 零基础入门 01 Java基础语法 01 Java初识 02 Java简介 学习Java的基础语法 Java是一门编程语言,学习的逻辑其实和现实世界的语言是一样的,需要了 ...
- 【DFIR】数字取证与事件应急响应---初识
应急响应 适用于负责现场应急,找出可疑的程序,恶意代码的安全工程师.这些可疑恶意程序或代码由另外的专家进行逆向分析. 前言 首先,什么是DRIF? DRIR:Digital Forensics and ...
- JavaScript按钮排他思想
要求: 有一系列按钮,要求每单击其中一个,该按钮改变样式(以背景颜色为例),其他按钮恢复保持默认样式. 实现思路: 获取所有按钮元素 首先先把其他按钮的背景颜色去掉 再单独设置自己的样式 代码实现: ...
- java之网络编程1-Tcp
一,了解之前先了解一下网络基础 首先理清一个概念:网络编程 != 网站编程,网络编程现在一般称为TCP/IP编程 一般的网络编程都称为Socket编程,Socket的英文意思是"插座&quo ...
- 设置 eclipse C++ 版本
gcc 版本 4.8.5 20150623 (Red Hat 4.8.5-28) (GCC) 默认是使用 C++ 98 版本进行编译 设置 eclipse 中 C++ 的版本: Project -& ...
- 初探电波钟(A Brief Introduction Of Radio Controlled Clock AND Its Appliciations)
文档标识符:Radio_Controlled_Clock_T-D-P11 作者:DLHC 最后修改日期:2020.10.12 本文链接:https://www.cnblogs.com/DLHC-TEC ...