[堆] Jzoj P5861 失意
Description
Input
Output
Sample Input
4 6 3 3 8 4 12 2 6 1 10 5 9 11 12
Sample Output
4 1 2 4
Data Constraint
Hint
题解
- 考虑对于一个交集,那么就是一条线段的右端点于一条线段的左端点的交集大小
- 则ans=min(右端点坐标)-max(左端点坐标)
- 考虑一种对于每个左端点统计答案的做法
- 我们把线段按照左端点从小到大排序,依次选择
- 每当选择一条线段,我们将它的右端点放进堆中
- 当堆中已有 m 个元素时
- 弹出最小的右端点减去当前左端点
代码
1 #include <cstdio> 2 #include <algorithm> 3 #include <queue> 4 #include <bitset> 5 using namespace std; 6 struct edge 7 { 8 int l,r,d; 9 bool operator <(edge b) const { return r>b.r; } 10 } e[1000005],head; 11 std:: priority_queue<edge>Q; 12 std:: bitset<1000005>visit,vis; 13 bool cmp(edge a,edge b) { return a.l==b.l?a.r<b.r:a.l<b.l; } 14 int num,n,m,tot,ans; 15 int main() 16 { 17 freopen("failure.in","r",stdin); 18 freopen("failure.out","w",stdout); 19 scanf("%d%d%d",&num,&n,&m); 20 for (int i=1;i<=n;i++) scanf("%d%d",&e[i].l,&e[i].r),e[i].d=i; 21 sort(e+1,e+n+1,cmp); 22 for (int i=1;i<=m;i++) Q.push(e[i]),++tot,visit[e[i].d]=1; 23 head=Q.top(),ans=max(head.r-e[m].l,0),vis=visit; 24 for (int i=m+1;i<=n;i++) 25 { 26 Q.push(e[i]),++tot,visit[e[i].d]=1; 27 if (tot>m) head=Q.top(),visit[head.d]=0,Q.pop(),tot--; 28 if (tot==m) 29 { 30 head=Q.top(); 31 int mx=max(0,head.r-e[i].l); 32 if (mx>=ans) ans=mx,vis=visit; 33 } 34 } 35 printf("%d\n",ans); 36 for (int i=1;i<=n;i++) if (vis[i]) printf("%d ",i); 37 }
转载于:https://www.cnblogs.com/Comfortable/p/9649794.html
[堆] Jzoj P5861 失意相关推荐
- [bfs][堆] Jzoj P5830 water
Description 有一块矩形土地被划分成 n*m 个正方形小块.这些小块高低不 平,每一小块都有自己的高度.水流可以由任意一块地流向周围四个 方向的四块地中,但是不能直接流入对角相连的小块中. ...
- [哈夫曼树][堆]JZOJ 4210 我才不是萝莉控呢qaq
Description 小Y:"小R 你是萝莉控吗."小R:"..." 为了避免这个尴尬的话题,小R 决定给小Y 做一道题. 有一个长度为n 的正整数数组A,满 ...
- 【贪心】失意(jzoj 2318)
失意 jzoj 2318 题目大意: 在x轴上给出n条线段,让你选m条线段,使他们的相交部分尽量大 输入样例: 4 6 3 3 8 4 12 2 6 1 10 5 9 11 12 输出样例: 4 1 ...
- JZOJ 5977. 【清华2019冬令营模拟12.15】堆
Description Input Output Sample Input 10 10 0 1 1 2 2 4 3 12 2 6 2 15 3 5 3 10 7 7 9 16 2 3 1 10 9 2 ...
- JZOJ 5609. 【NOI2018模拟3.28】Tree BZOJ 4919: [Lydsy1706月赛]大根堆
#Description 给你一颗有 n 个点的树,其中 1 号点为根节点,每个点都有一个权值 vali 你可以从树中选择一些点,注意如果 i 与 j 都被选中且 j 在 i 的子树内,那么必须满足 ...
- JZOJ 5461 购物 —— 贪心
题目:https://jzoj.net/senior/#main/show/5461 贪心,原来想了个思路,优先选优惠价最小的 K 个,然后其他按原价排序遍历: 如果当前物品没选过,原价选上,如果选过 ...
- JZOJ 5372. 【NOIP2017提高A组模拟9.17】猫
Description 信息组最近猫成灾了!隔壁物理组也拿猫没办法.信息组组长只好去请神刀手来帮他们消灭猫.信息组现在共有n 只猫(n 为正整数),编号为1 到n,站成了一个环,第i 只猫的左边是第i ...
- jzoj2292-PPMM【模拟,堆】
正题 题目链接:https://jzoj.net/senior/#contest/show/3008/0 题目大意 一个队列要求支持 队尾压入一个数 队首弹出一个数 队列里所有数取反 求最大值 解题思 ...
- jzoj4815-ksum【堆】
正题 题目链接:https://jzoj.net/senior/#main/show/4815 题目大意 nnn个数的序列,求前kkk大的子段. 解题思路 一个区间的答案肯定比他的所有子区间要大,所以 ...
- nssl1148,jzoj5461-购物【可撤回贪心,堆】
正题 jzoj题目链接:https://jzoj.net/senior/#main/show/5461 题目大意 有n个物品,m元,k个打折券. 每个物品打折前pip_ipi元,打折后qiq_iqi ...
最新文章
- anaconda更换镜像源
- 编译linux-2.6.29内核,报错解决方法
- 比较两个时间字符串的大小
- 蓝桥杯 试题 基础练习 芯片测试——12行代码AC
- logo、展板、彩页、手提袋总结
- Android单元测试 - Sqlite、SharedPreference、Assets、文件操作 怎么测?
- 一步一步使用 DialogFragment 封装链式调用 Dialog
- Java Web 获取客户端真实IP
- 基于matlab的小波去噪方法研究,基于matlab的小波去噪分析毕业论文.doc
- 给 Android 应用开发者的十个建议
- Rust:Fn,FnMut,FnOnce
- Springboot物业管理系统
- 一款QQ全自动签到的辅助工具
- 数字电视输出标准规范和BT601/BT709/BT2020色域转换方法资料整理
- P3369 【模板】普通平衡树
- TensorFlow深度学习:3.API示范
- Intro to RL Lecture1
- 安卓手机上编程开发环境
- java画篮球_PS教程!手把手教你绘制炫酷的科比篮球海报
- c语言中的/和%表示什么意思
热门文章
- JAVA常见算法题(十九)
- 《Adobe After Effects CS5经典教程》——1.6 预览
- linux用户和组2
- 【设计模式】java设计模式总述及观察者模式
- android适配各种分辨率的问题
- LINUX信息命令查看大全
- 省地县级联操作 http://www.popub.net/script/pcas.html
- Redis牛逼!轻松实现实时订阅推送
- 在 Google 工作是什么体验?
- java给mongo数组添加_如何使用具有新值的java在mongodb中的现有集合中追加现有数组...