洛谷P3602 Koishi Loves Segments 贪心
正解:贪心
解题报告:
首先在学习贪心的入门题的时候我们就知道,当x=1的时候,也就是每条线段不能相交的时候的做法——就按右端点排序然后能选就选,也就是会议安排问题,原因显然?就你选右端点更靠左的线段显然不会更劣
然后现在考虑x!=1了怎么做
于是考虑类似的套路,依然是右端点排序能选就选,考虑什么时候不能选了?就加入现在新加入了一条线段,然后导致有个点被覆盖次数超过x了,那肯定就是要从覆盖了这个点的边中删去一条?然后就考虑删哪条?那就显然是把右端点最靠右的给删了,证明的话,因为我们是从左到右一个个扫描点的,所以显然每次删最靠右的收益最大
具体实现的话,两个点?
一个是因为要一个个点地扫所以要离散化,显然只有端点和p有意义,就成功把复杂度降下来了QwQ
一个是,我们不是要支持删边操作balabla的嘛,就感觉比较难实现?所以考虑开个c数组记录到达这个点之后线段数量的变化,再开个全局变量t记录整个儿经过了几条线段,然后差分一下,这样每次删边就只会修改c[右端点]和t
(其实也可以,直接开个set,就直接支持一下删除最大值最小值操作就欧克了QwQ其实方便很多QAQ
over
关于细节二我好像说得不太清,,,还是不能弃疗所以还是强行再解释下趴,,,
首先我们要开个c数组,这个c数组是针对每个点开的,主要是用来记录这个到达这个点之后还存活的线段的数量的变化情况
然后考虑什么时候线段数量会有变化?一个是一条边的右端点经过了这个点,于是这条线段就不会经过这个点了,所以就--了
另一个是一条边被删了,然后本来因为这条边c--了,所以就++补回来就欧克了
over,放下不知道为什么跑得飞慢的代码QAQ
#include<bits/stdc++.h>
using namespace std;
#define il inline
#define gc getchar()
#define ri register int
#define rc register char
#define rb register bool
#define rp(i,x,y) for(ri i=x;i<=y;++i) const int N=8e5+;
int n,m,st[N],l[N],r[N],p[N],x[N],tot,lim[N],tmp,c[N],as;
vector<int>nod[N];
priority_queue<int>Q; il int read()
{
rc ch=gc;ri x=;rb y=;
while(ch!='-' && (ch>'' || ch<''))ch=gc;
if(ch=='-')ch=gc,y=;
while(ch>='' && ch<='')x=(x<<)+(x<<)+(ch^''),ch=gc;
return y?x:-x;
}
il int fd(ri x){return lower_bound(st+,st+tot+,x)-st;} int main()
{
// freopen("3602.in","r",stdin);freopen("3602.out","w",stdout);
n=read();m=read();rp(i,,n)st[++tot]=l[i]=read(),st[++tot]=r[i]=read();rp(i,,m)st[++tot]=p[i]=read(),x[i]=read();
sort(st+,st++tot);tot=unique(st+,st+tot+)-st-;rp(i,,n)nod[fd(l[i])].push_back(fd(r[i]));
memset(lim,,sizeof(lim));rp(i,,m)p[i]=fd(p[i]),lim[p[i]]=min(lim[p[i]],x[i]);
rp(i,,tot)
{
tmp+=c[i];
for(auto j:nod[i])--c[j+],++tmp,Q.push(j),++as;
while(tmp>lim[i])++c[Q.top()+],--tmp,--as,Q.pop();
}
printf("%d\n",as);
return ;
}
洛谷P3602 Koishi Loves Segments 贪心的更多相关文章
- D 洛谷 P3602 Koishi Loves Segments [贪心 树状数组+堆]
题目描述 Koishi喜欢线段. 她的条线段都能表示成数轴上的某个闭区间.Koishi喜欢在把所有线段都放在数轴上,然后数出某些点被多少线段覆盖了. Flandre看她和线段玩得很起开心,就抛给她一个 ...
- 洛谷P3602 Koishi Loves Segments(贪心,multiset)
洛谷题目传送门 贪心小水题. 把线段按左端点从小到大排序,限制点也是从小到大排序,然后一起扫一遍. 对于每一个限制点实时维护覆盖它的所有线段,如果超过限制,则贪心地把右端点最大的线段永远删去,不计入答 ...
- E 洛谷 P3598 Koishi Loves Number Theory[数论]
题目描述 Koishi十分喜欢数论. 她的朋友Flandre为了检测她和数论是不是真爱,给了她一个问题. 已知 给定和个数,求对取模. 按照套路,呆萌的Koishi当然假装不会做了,于是她来向你请教这 ...
- C 洛谷 P3599 Koishi Loves Construction [构造 打表观察]
题目描述 Koishi决定走出幻想乡成为数学大师! Flandre听说她数学学的很好,就给Koishi出了这样一道构造题: Task1:试判断能否构造并构造一个长度为的的排列,满足其个前缀和在模的意义 ...
- Luogu P3602 Koishi Loves Segments
传送门 题解 既然是选取区间,没说顺序 肯定先排遍序 都是套路 那么按什么排序呢??? 为了方便处理 我们把区间按左端点从小到大排序 把关键点也按从小到大排序 假设当扫到 \(i\) 点时,i 点之前 ...
- 洛谷P3599 Koishi Loves Construction 构造
正解:构造 解题报告: 传送门! 这题俩问嘛,就分成两个问题港QwQ 就按顺序趴,先港第一问QwQ 首先要发现,n在膜n意义下就是0嘛 那作为前缀和的话显然它就只能放在第一个 然后再想下,发现,如果n ...
- 【Luogu3602】Koishi Loves Segments(贪心)
[Luogu3602]Koishi Loves Segments(贪心) 题面 洛谷 题解 离散区间之后把所有的线段挂在左端点上,从左往右扫一遍. 对于当前点的限制如果不满足显然会删掉右端点最靠右的那 ...
- 洛谷 P1580 yyy loves Easter_Egg I
洛谷 P1580 yyy loves Easter_Egg I 题解: 队列+字符串 #include <cstdio> #include <string> #include ...
- 【洛谷 P1667】 数列 (贪心)
题目链接 对于一个区间\([x,y]\),设这个区间的总和为\(S\) 那么我们在前缀和(设为\(sum[i]\))的意义上考虑到原操作其实就是\(sum[x−1]+=S\) , \(sum[x]+S ...
随机推荐
- 用panels 制作drupal首页
1.下载zen主题 路径:https://www.drupal.org/project/zen2.“启用并设为默认”3.基于zen制作子主题 把zen目录下STARTERKIT文件夹,复制到sites ...
- vs2013 error LNK2005 已经在***.obj中定义
错误解决办法: 方法一: 中文 项目--属性 ---连接器---输入 附加依赖项 空格Nafxcwd.lib Libcmtd.lib ...
- swoole web服务
web.php <?php $http = ); $http->on('request', function ($request, $response) { var_dump($reque ...
- js中的try/catch
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 腾讯云极速配置NodeJS+LNMP运行环境
版权声明:本文由吴逸翔原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/848754001487150669 来源:腾云阁 h ...
- Java Debugging with Eclipse - Tutorial
1.1. What is debugging? Debugging allows you to run a program interactively while watching the sourc ...
- [原]CentOS 7 网卡子接口的创建
OS:CentOS 7 在linux上创建vlan需要加载802.1q模块: 1.检测OS是否已经加载802.1q模块 [root@controller ~]# modinfo 8021q filen ...
- 理解syslinux,SYSLINUX和PXELINUX
在研究网络装机的过程中,菜菜地被Syslinux.SYSLINUX和PXELINUX这些定义折磨了一下 它们有什么区别和联系?为什么配置PXELINUX要安装的是Syslinux而不是Pxelinux ...
- Arduino基本数据类型
基本数据类型简介 常见的Arduino是基于ATmega的8位 AVR单片机,例如Arduino UNO ,Arduino Nano,Arduino mega2560等.还有高级点 32位的,如Ard ...
- HTTP协议(web开发)
HTTP协议 HTTP协议简介 超文本传输协议(英文:HyperText Transfer Protocol,缩写:HTTP)是一种用于分布式.协作式和超媒体信息系统的应用层协议.HTTP是万维网的数 ...