Codeforces 1249 D2. Too Many Segments (hard version)
贪心
对于第一个不合法的位置,我们显然要通过删除几个覆盖了它的区间来使这个位置合法
显然删右端点更靠右的区间是更优的,所以就考虑优先删右端点靠右的,然后再考虑下一个不合法位置
用一个 $set$ 维护一下右端点和区间编号即可
- #include<iostream>
- #include<cstdio>
- #include<algorithm>
- #include<cstring>
- #include<cmath>
- #include<vector>
- #include<set>
- using namespace std;
- typedef long long ll;
- inline int read()
- {
- int x=,f=; char ch=getchar();
- while(ch<''||ch>'') { if(ch=='-') f=-; ch=getchar(); }
- while(ch>=''&&ch<='') { x=(x<<)+(x<<)+(ch^); ch=getchar(); }
- return x*f;
- }
- const int N=2e5+;
- int n,m;
- struct dat {
- int r,id;
- dat (int _r=,int _id=) { r=_r,id=_id; }
- inline bool operator < (const dat &tmp) const {
- return r!=tmp.r ? r<tmp.r : id<tmp.id;
- }
- };
- vector <dat> V[N];
- vector <int> mov;
- set <dat> S;
- int main()
- {
- n=read(),m=read(); int a,b,mx=;
- for(int i=;i<=n;i++)
- a=read(),b=read(),
- mx=max(mx,b),
- V[a].push_back(dat(b,i));
- int ans=;
- for(int i=;i<=mx;i++)
- {
- while(S.size()&&(*S.begin()).r<i) S.erase(S.begin());
- for(auto x: V[i]) S.insert(dat(x.r,x.id));
- while(S.size()>m)
- {
- auto p=S.rbegin();
- ans++,mov.push_back((*p).id);
- S.erase(*p);
- }
- }
- printf("%d\n",ans);
- for(auto x: mov) printf("%d ",x); puts("");
- return ;
- }
Codeforces 1249 D2. Too Many Segments (hard version)的更多相关文章
- codeforces 1249 D2 Too Many Segments (hard version) 贪心+树状数组
题意 给定n个线段,线段可以相交,第\(i\)个线段覆盖的区间为\([l_i,r_i]\),问最少删除多少个线段让覆盖每个点的线段数量小于等于k. 分析 从左往右扫每个点\(x\),若覆盖点\(x\) ...
- Codeforces Round #535 E2-Array and Segments (Hard version)
Codeforces Round #535 E2-Array and Segments (Hard version) 题意: 给你一个数列和一些区间,让你选择一些区间(选择的区间中的数都减一), 求最 ...
- 【Codeforces 1108E1】Array and Segments (Easy version)
[链接] 我是链接,点我呀:) [题意] 题意 [题解] 枚举最大值和最小值在什么地方. 显然,只要包含最小值的区间,都让他减少. 因为就算那个区间包含最大值,也无所谓,因为不会让答案变小. 但是那些 ...
- codeforces 1249D1/D2 Too Many Segments (贪心)
(点击此处查看原题) 题意说明 有n个区间,第i个区间覆盖范围[li,ri]内所有点,问删除最少哪些区间,使得所有点被区间覆盖的次数少于等于k次 解题思路 看到这个题的时候,觉得和开关(反转)问题很像 ...
- Codeforces 1108E2 Array and Segments (Hard version) 差分, 暴力
Codeforces 1108E2 E2. Array and Segments (Hard version) Description: The only difference between eas ...
- Codeforces Round #535 (Div. 3) E2. Array and Segments (Hard version) 【区间更新 线段树】
传送门:http://codeforces.com/contest/1108/problem/E2 E2. Array and Segments (Hard version) time limit p ...
- Codeforces 1108E2 Array and Segments (Hard version)(差分+思维)
题目链接:Array and Segments (Hard version) 题意:给定一个长度为n的序列,m个区间,从m个区间内选择一些区间内的数都减一,使得整个序列的最大值减最小值最大. 题解:利 ...
- D2. Remove the Substring (hard version)(思维 )
D2. Remove the Substring (hard version) time limit per test 2 seconds memory limit per test 256 mega ...
- D2. Equalizing by Division (hard version)
D2. Equalizing by Division (hard version) 涉及下标运算一定要注意下标是否越界!!! 思路,暴力判断以每个数字为到达态最小花费 #include<bits ...
随机推荐
- Echarts常用API(echarts和echartsInstance)
一.echarts上的方法 一般在项目中引入echarts之后,可以获得一个全局的echarts对象. 1.下面是几个比较常用的echarts方法 echarts.init() 创建一个echarts ...
- [ERR] 2006 - MySQL server has gone away如何解决
解决方案: max_allowed_packet = 16M 改大点! 文章来源:外星人来地球 欢迎关注,有问题一起学习欢迎留言.评论
- mysql中的sql-mode导致的datetime类型字段不能为0000
问题描述: 在执行建表语句的时候,出现invalid default datetime value '0000-00-00 00:00:00',从字面意思看,就是不合法的默认值'0000-00-00 ...
- mybatis 的 <![CDATA[ ]]> 标签作用
有个细节一直没有注意到,今天mark一下: mybatis进行时间比较的时候我们会这么写,一直都是在复制粘贴所以没有注意,一个标签<![CDATA[ ]]> 今天在做另外一个有时间比较sq ...
- SQL-W3School-函数:SQL NOW() 函数
ylbtech-SQL-W3School-函数:SQL NOW() 函数 1.返回顶部 1. NOW() 函数 NOW 函数返回当前的日期和时间. 提示:如果您在使用 Sql Server 数据库,请 ...
- kafka和zookeeper的配置文件优化配置
zookeeper的配置 日志自动清理这两个参数都是在zoo.cfg中配置的: autopurge.purgeInterval 这个参数指定了清理频率,单位是小时,需要填写一个1或更大的整数,默 ...
- 123457123456#0#-----com.threeapp.XianshiDaDiShu03-----现实版打地鼠03
com.threeapp.XianshiDaDiShu03-----现实版打地鼠03
- 执行spark-shell报错:
执行spark-shell报错: [ERROR] Terminal initialization failed; falling back to unsupportedjava.lang.NoClas ...
- weblogic12.1.3安装
weblogic weblogic12.1.3安装 环境: centos7.5 ip: 192.168.0.94 1.安装jdk 2.安装 weblogic 下载.解压安装包 wls1213_dev. ...
- 使用 Sublime + PlantUML 高效地画图
转自 http://www.jianshu.com/p/e92a52770832