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\))起正式开始了. 本来说要下周开始的,没想到竟提早了几天,真是一个惊喜.毕竟明天有语文考试.后天有科学考试,逃 ...
随机推荐
- 蜗牛—Android基础之button监听器
XML文件中有一个textView 和 一个button. <LinearLayout xmlns:android="http://schemas.android.com/apk/re ...
- SpringMVC:文件上传
MultipartFile attach HttpServletRequest re commons-io-2.0.jar (一定要用2.0以上的版本,否则没有copyInputStreamToFil ...
- 【转载】聊一聊C#的Equals()和GetHashCode()方法
首先先谈一下Equals()这个方法: Equals()方法,来自于Object,是我们经常需要重写的方法.此方法的默认实现大概是这样的: public virtual bool Equals(obj ...
- 用redis实现跨服务器session(转)
这个月我们新开发了一个项目,由于使用到了4台机器做web,使用dns做负载均衡, 上面图上用户通过DNS的调度(一个域名对应多个ip)分别访问到VM2-VM5上,四台机器都访问VM1上的redis,两 ...
- What is the relationship between Xcode, Swift and Cocoa?
Xcode is an IDE for developing Swift or Objective-C applications, which can use the Cocoa API (which ...
- 韦东山 第9课第1节.u-boot分析之编译体验 http://www.100ask.net/index.html
http://www.100ask.net/index.html 韦东山官网网址 http://wenku.baidu.com/view/ae78a00390c69ec3d5bb75ce.html h ...
- Swift高阶函数介绍(闭包、Map、Filter、Reduce)
Swift语言有非常多函数式编程的特性.常见的map,reduce,filter都有,初看和python几乎相同,以下简介下 闭包介绍: 闭包是自包括的功能代码块,能够在代码中使用或者用来作为參数传值 ...
- GuozhongCrawler系列教程 (1) 三大PageDownloader
GuozhongCrawler QQ群 202568714 教程源代码下载地址:http://pan.baidu.com/s/1pJBmerL GuozhongCrawler内置三大PageDown ...
- EasyDarwin开源流媒体server将select改为epoll的方法
本文来自EasyDarwin团队Fantasy(fantasy(at)easydarwin.org) 一. EasyDarwin网络模型介绍 EventContext负责监听全部网络读写事件.Even ...
- cookie、session及实现记住密码,自动登录
在登录帐号.密码框下,有三种帐号登录模式可供选择,用户可根据自己的具体情况选择其中一种适合自己的模式. 1.网吧模式:勾选网吧模式后,登录的帐号会在歪歪注销/退出的时候自动清除,不会留在登录框中,可以 ...