bzoj5102
$贪心$
$按左端点排序。$
$当我们钦定了最右的左端点,那么自然希望右端点尽量靠右$
$考虑之前的区间,那么我们相当于选之前的区间中第k大的右端点$
$堆维护一下就可以了,每次把新的元素放进堆,如果能更新就弹出旧的,否则弹出自己$
#include<cstdio>
#include<cstring>
#include<iostream>
#include<queue>
#include<vector>
#include<algorithm>
using namespace std;
const int N = 1e6 + ;
int n, k, ans;
struct data {
int l, r, id;
bool friend operator < (const data &a, const data &b) {
return a.l < b.l;
}
} a[N];
priority_queue<pair<int, int>, vector<pair<int, int> >, greater<pair<int, int> > > q;
int main() {
// freopen("1.in", "r", stdin);
scanf("%d%d", &n, &k);
for(int i = ; i <= n; ++i) {
scanf("%d%d", &a[i].l, &a[i].r);
a[i].id = i;
}
sort(a + , a + n + );
for(int i = ; i < k; ++i) {
q.push(make_pair(a[i].r, a[i].id));
}
for(int i = k; i <= n; ++i) {
q.push(make_pair(a[i].r, a[i].id));
ans = max(ans, q.top().first - a[i].l);
q.pop();
}
printf("%d\n", ans);
while(!q.empty()) {
q.pop();
}
for(int i = ; i < k; ++i) {
q.push(make_pair(a[i].r, a[i].id));
}
for(int i = k; i <= n; ++i) {
q.push(make_pair(a[i].r, a[i].id));
if(ans == q.top().first - a[i].l) {
vector<int> v;
while(!q.empty()) {
v.push_back(q.top().second);
q.pop();
}
sort(v.begin(), v.end());
for(int i = ; i < v.size(); ++i) {
printf("%d ", v[i]);
}
return ;
}
q.pop();
}
return ;
}
bzoj5102的更多相关文章
- BZOJ5102 POI2018Prawnicy(堆)
考虑固定右端点,使左端点最小.那么按右端点排序后查询前缀这些区间的左端点第k小即可.然而写了一个treap一个线段树都T飞了,感觉惨爆.事实上可以用堆求第k小,维护一个大根堆保证堆中元素不超过k个即可 ...
- 【BZOJ5102】[POI2018]Prawnicy 堆
[BZOJ5102][POI2018]Prawnicy Description 定义一个区间(l,r)的长度为r-l,空区间的长度为0. 给定数轴上n个区间,请选择其中恰好k个区间,使得交集的长度最大 ...
- bzoj5102: [POI2018]Prawnicy
Description 定义一个区间(l,r)的长度为r-l,空区间的长度为0. 给定数轴上n个区间,请选择其中恰好k个区间,使得交集的长度最大. Input 第一行包含两个正整数n,k(1<= ...
- BZOJ5102:[POI2018]Prawnicy(贪心,堆)
Description 定义一个区间(l,r)的长度为r-l,空区间的长度为0. 给定数轴上n个区间,请选择其中恰好k个区间,使得交集的长度最大. Input 第一行包含两个正整数n,k(1<= ...
- bzoj5102 [POI2018]Prawnicy 线段树
$bzoj$跑的太慢了...... 我们考虑用线段树来解决这个问题 考虑扫描线 当扫到左端点$i$时,我们把线段$i$加入线段树 同时,对于每个左端点$i$,我们在线段树上二分出最远的$r$满足$r$ ...
- [BZOJ5102]Prawnicy
Description 定义一个区间(l,r)的长度为r-l,空区间的长度为0. 给定数轴上n个区间,请选择其中恰好k个区间,使得交集的长度最大. Input 第一行包含两个正整数n,k(1<= ...
- POI2018
[BZOJ5099][POI2018]Pionek(极角排序+two pointers) 几个不会严谨证明的结论: 1.将所有向量按极角排序,则答案集合一定是连续的一段. 当答案方向确定时,则一个向量 ...
- NOIP2018赛前停课集训记(10.24~11.08)
前言 为了不久之后的\(NOIP2018\),我们的停课从今天(\(Oct\ 24th\))起正式开始了. 本来说要下周开始的,没想到竟提早了几天,真是一个惊喜.毕竟明天有语文考试.后天有科学考试,逃 ...
随机推荐
- Nginx 第三方模块的安装以及一致性哈希算法的使用
Nginx 第三方模块的安装以及一致性哈希算法的使用 第三方模块安装方法总结: 以ngx_http_php_memcache_standard_balancer-master为例 1:解压 到 pat ...
- mysql复制表命令
http://hi.baidu.com/dwspider/item/908bf5e1746275bd2e140b03 上面命令是实现复制表的一种方法,缺陷就是索引等表信息不会复制过去,只是复制 ...
- BUCK电路工作原理
Buck电路,也称呼为DC_DC Buck型降压开关电源电路,这种电路结构实际应用也是很多的,电路拓扑结构看下图: 电路中,Q1是开关管,D1是续流二极管,L1就是问题中提到的这个电感器.C1就是问题 ...
- kubernetes之计算机资源管理
系列目录 当你编排一个pod的时候,你也可以可选地指定每个容器需要多少CPU和多少内存(RAM).当容器请求特定的资源时,调度器可以更好地根据资源请求来确定把pod调度到哪个节点上.当容器请求限制特定 ...
- iOS 7 中 StoryBoard 总体缩放
iOS 7 中 StoryBoard 总体缩放 太阳火神的漂亮人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用 ...
- Core Data 版本号迁移经验总结
大家在学习和使用Core Data过程中,第一次进行版本号迁移的经历一定是记忆犹新,至少我是这种,XD.弄的不好,就会搞出一些因为迁移过程中数据模型出错导致的Crash.这里总结了一下Core Dat ...
- fabric-ca安装
1.Go版本1.7+(具体可参考Linux安装Go语言) 2.GOPATH环境变量正确配置 export GOROOT=/usr/local/go export GOPATH=/opt/gopath ...
- 用Cocoapods集成XMPPFramework 遇 Module 'KissXML' not found 问题
用Coacopods集成XMPPFramework完成后Command + B,报Module 'KissXML' not found 一般来说,通过Coacopods集成集成第三方框架,不会再有依赖 ...
- 图像滤镜艺术---PS图层混合模式之明度模式
本文将介绍PS图层混合模式中比較复杂 的"明度"模式的算法原理及代码实现内容. 说到PS的图层混合模式,计算公式都有,详细代码实现也能找到,可是,都没有完整介绍全部图层混合模式的代 ...
- IP address could not be resolved: Name or service not known
[root@test ~]# /usr/local/mysql/bin/mysqld2018-08-05T07:00:33.647509Z 0 [Warning] [MY-011070] [Serve ...