bzoj5102: [POI2018]Prawnicy
Description
Input
Output
按左端点排序,i=1..n,取左端点前i小的区间中,右端点最大的k个,可以用堆维护。
#include<bits/stdc++.h>
typedef long long i64;
const int N=1e6+;
char ib[N*],*ip=ib;
int _(){int x;scanf("%d",&x);return x;}
struct itv{
int l,r,id;
bool operator<(const itv&w)const{return l<w.l;}
}is[N];
int n,k;
std::priority_queue<int,std::vector<int>,std::greater<int> >q1;
int ans=,L=INT_MAX,R=INT_MIN;
void upd(int l,int r){
if(r-l>ans)ans=r-l,R=r,L=l;
}
int main(){
n=_(),k=_();
for(int i=;i<n;++i){
is[i].l=_();
is[i].r=_();
is[i].id=i+;
}
std::sort(is,is+n);
for(int i=;i<k;++i)q1.push(is[i].r);
upd(is[k-].l,q1.top());
for(int i=k;i<n;++i){
int x=is[i].r;
if(x>q1.top()){
q1.push(x);
q1.pop();
}
upd(is[i].l,q1.top());
}
printf("%d\n",ans);
for(int i=;k&&i<n;++i)
if(is[i].l<=L&&is[i].r>=R){
printf("%d ",is[i].id);
--k;
}
return ;
}
bzoj5102: [POI2018]Prawnicy的更多相关文章
- 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】[POI2018]Prawnicy 堆
[BZOJ5102][POI2018]Prawnicy Description 定义一个区间(l,r)的长度为r-l,空区间的长度为0. 给定数轴上n个区间,请选择其中恰好k个区间,使得交集的长度最大 ...
- BZOJ 5102: [POI2018]Prawnicy
考虑最优解的集合中一定有一个$l$最大的,我们就去枚举左端点,把所有$l$小于等于它的全丢进堆里,取前$k$个即可. #include <bits/stdc++.h> using name ...
- [POI2018]Prawnicy
题目大意: 有$n(n\le10^6)$个线段,每个线段覆盖的范围是$[l_i,r_i]$,要求从中选取$k(k\le10^6)$个线段使得这些线段覆盖范围的交集最大,求最大交集及任意一种方案. 思路 ...
- POI2018
[BZOJ5099][POI2018]Pionek(极角排序+two pointers) 几个不会严谨证明的结论: 1.将所有向量按极角排序,则答案集合一定是连续的一段. 当答案方向确定时,则一个向量 ...
- NOIP2018赛前停课集训记(10.24~11.08)
前言 为了不久之后的\(NOIP2018\),我们的停课从今天(\(Oct\ 24th\))起正式开始了. 本来说要下周开始的,没想到竟提早了几天,真是一个惊喜.毕竟明天有语文考试.后天有科学考试,逃 ...
- [BZOJ5102]Prawnicy
Description 定义一个区间(l,r)的长度为r-l,空区间的长度为0. 给定数轴上n个区间,请选择其中恰好k个区间,使得交集的长度最大. Input 第一行包含两个正整数n,k(1<= ...
- bzoj5100 [POI2018]Plan metra 构造
5100: [POI2018]Plan metra Time Limit: 40 Sec Memory Limit: 128 MBSec Special JudgeSubmit: 189 Sol ...
随机推荐
- dilated convolutions:扩张卷积
最近在阅读<Context Encoding for Semantic Segmentation>中看到应用了dilated convolutions. 扩张卷积与普通的卷积相比,除了卷积 ...
- Mysql按周,按月,按日,按小时分组统计数据
按周 select DATE_FORMAT(create_time,'%Y%u') weeks,count(caseid) count from tc_case group by weeks; ...
- 微信支付---公众号支付和H5支付区别
微信支付分为如下几种:(来源https://pay.weixin.qq.com/wiki/doc/api/index.html) 本文主要讲解公众号支付和H5支付,两者均属于线上支付比较常用的方式: ...
- sqlplus的非交互式使用
sqlplus交互界面存在的问题 sqlplus的两种非交互式使用方式 1 通过外部命令文件 2 通过标准输入 利用管道做兴许处理 须要注意的地方 一个简单的脚本 1 sqlplus交互界面存在的问题 ...
- Forth词典条目结构
body, table{font-family: 微软雅黑} table{border-collapse: collapse; border: solid gray; border-width: 2p ...
- 经典的Foo和getName
搜了下经典的Foo和getName的题目,看了几个解释,懒得看,自己解一下,作为笔记. function Foo(){ getName = function(){ console.log(1); }; ...
- 获取进程ID,父进程ID,进程完整路径
准备写一个进程管理的功能模块,今天下午先写了扫描获取本机各个进程路径,获取各个进程映像名称,进程完整路径. 要获取进程信息,第一步想到的就是提权,提权代码用过多次了,今天也小结了一下(http://w ...
- char与char的区别
char与varchar的区别 : char (13)长度固定, 如'www.qq.net' 存储需要空间 12个字符: varchar(13) 可变长 如'www.qq.net' 需要存储空间 9字 ...
- wordpress搭建自己的博客~
去官方网站下载wordpress,并解压缩.下载链接:https://cn.wordpress.org/ wordpress是一款开源的PHP框架,搭建个人博客网站最实用的选择之一,甚至你都不需要懂P ...
- 自动化测试-13.selenium执行JS处理滚动条
前言 selenium并不是万能的,有时候页面上操作无法实现的,这时候就需要借助JS来完成了. 常见场景: 当页面上的元素超过一屏后,想操作屏幕下方的元素,是不能直接定位到,会报元素不可见的. 这时候 ...