【BZOJ5102】[POI2018]Prawnicy 堆
【BZOJ5102】[POI2018]Prawnicy
Description
Input
Output
Sample Input
3 8
4 12
2 6
1 10
5 9
11 12
Sample Output
题解:假如我们已经确定了最终区间的左端点L,那么我们选择的区间一定是左端点在L左边,且右端点最右的K个点。所以我们将所有区间按左端点排序,用小根堆维护左端点在左边,且右端点最大的K个点。每次用第K大值更新答案即可。
#include <cstdio>
#include <cstring>
#include <iostream>
#include <queue>
#include <algorithm>
using namespace std;
const int maxn=1000010;
int n,k,ans;
struct node
{int l,r,org;node() {}node(int a,int b) {r=a,org=b;}bool operator < (const node &a) const {return r>a.r;}
}p[maxn];
priority_queue<node> q;
bool cmp(const node &a,const node &b)
{return a.l<b.l;
}
inline int rd()
{int ret=0,f=1; char gc=getchar();while(gc<'0'||gc>'9') {if(gc=='-') f=-f; gc=getchar();}while(gc>='0'&&gc<='9') ret=ret*10+(gc^'0'),gc=getchar();return ret*f;
}
int main()
{n=rd(),k=rd();int i;for(i=1;i<=n;i++) p[i].l=rd(),p[i].r=rd(),p[i].org=i;sort(p+1,p+n+1,cmp);for(i=1;i<=n;i++){q.push(p[i]);if(i>k) q.pop();if(i>=k) ans=max(ans,q.top().r-p[i].l);}while(!q.empty()) q.pop();printf("%d\n",ans);for(i=1;i<=n;i++){q.push(p[i]);if(i>k) q.pop();if(i>=k&&ans==q.top().r-p[i].l){while(!q.empty()) printf("%d ",q.top().org),q.pop();return 0;}}
}
转载于:https://www.cnblogs.com/CQzhangyu/p/7954179.html
【BZOJ5102】[POI2018]Prawnicy 堆相关推荐
- BZOJ5102:[POI2018]Prawnicy(贪心,堆)
Description 定义一个区间(l,r)的长度为r-l,空区间的长度为0. 给定数轴上n个区间,请选择其中恰好k个区间,使得交集的长度最大. Input 第一行包含两个正整数n,k(1<= ...
- BZOJ5102 POI2018Prawnicy(堆)
考虑固定右端点,使左端点最小.那么按右端点排序后查询前缀这些区间的左端点第k小即可.然而写了一个treap一个线段树都T飞了,感觉惨爆.事实上可以用堆求第k小,维护一个大根堆保证堆中元素不超过k个即可 ...
- Java堆和栈的基本理解
Java 堆和栈的区别 参考背景: 堆内存:用来存放由new创建的对象和数组: 栈内存:存放基本类型的变量,对象的引用变量: 堆存放的原因:由于在堆中创建对象(或数组)后,可在栈中定义一个特殊变量,让 ...
- 堆叠式传感器架构带来先进的视觉功能
堆叠式传感器架构带来先进的视觉功能 Stacked sensor architecture brings advanced vision capabilities 巴黎-巴黎Prophesee公司是神 ...
- java栈、堆、方法区
1.java中的栈(stack)和堆(heap)是java在内存(ram)中存放数据的地方 2.堆区 存储的全部是对象,每个对象都包含一个与之对应的class的信息.(class的目的是得到操作指令) ...
- 【转】堆栈和托管堆 c#
原文地址:http://blog.csdn.net/baoxuetianxia/archive/2008/11/04/3218913.aspx 首先堆栈和堆(托管堆)都在进程的虚拟内存中.(在32位处 ...
- linux内核和cpu指令集,Linux之父:Intel别浪费时间在AVX512这类指令集、多堆核心才是正道...
原标题:Linux之父:Intel别浪费时间在AVX512这类指令集.多堆核心才是正道 在最近一次邮件交流中,Linux之父Linus Torvalds对Intel的处理器战略表达意见. 他谈到&qu ...
- 大根堆的删除c语言,二叉堆(一)之 C语言详解
本文介绍二叉堆,二叉堆就是通常我们所说的数据结构"堆"中的一种.和以往一样,本文会先对二叉堆的理论知识进行简单介绍,然后给出C语言的实现.后续再分别给出C++和Java版本的实现: ...
- C++在堆区创建数组
new申请数据空间 c++中的new在堆区申请空间的时候的格式是: int * p = new int(10); //该代码的意思就是说在堆区申请的内存赋值为10 //int 后面括号里面写的就是你的 ...
最新文章
- android 点击网络图片大全,android查看网络图片的实现方法
- 牛刀小试之Django二
- 中科曙光服务器怎么装系统_如何给服务器装系统
- 10岁才上小学的他,如今是高校男神教授
- C#不支持XPATH2.0
- python日期对照表_2020年日期表-python实现
- 研究生,怎么经济独立?
- 《游戏人工智能编程》读书笔记 —— 向量的归一和点乘
- 问题(二)--算法相关
- synchronized 线程同步
- Lowagie 导出html的内容到 pdf
- Java项目:springboot网上书城系统
- 免费机器视觉视频教程halcon-百度网盘
- macOS | 提取BDrip(封装格式为mkv)中视频与音频并重新封装为mp4
- 全面了解风控数据体系
- android svg格式图片,Android工程使用SVG图片
- 艾司博讯:拼多多子账户的操作流程
- 如何从JavaScript中的数组替换元素?
- 洛谷题目AC代码总结(未完成,日更题目中)
- Going to Redmond (keep moving)