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 失意相关推荐

  1. [bfs][堆] Jzoj P5830 water

    Description 有一块矩形土地被划分成 n*m 个正方形小块.这些小块高低不 平,每一小块都有自己的高度.水流可以由任意一块地流向周围四个 方向的四块地中,但是不能直接流入对角相连的小块中. ...

  2. [哈夫曼树][堆]JZOJ 4210 我才不是萝莉控呢qaq

    Description 小Y:"小R 你是萝莉控吗."小R:"..." 为了避免这个尴尬的话题,小R 决定给小Y 做一道题. 有一个长度为n 的正整数数组A,满 ...

  3. 【贪心】失意(jzoj 2318)

    失意 jzoj 2318 题目大意: 在x轴上给出n条线段,让你选m条线段,使他们的相交部分尽量大 输入样例: 4 6 3 3 8 4 12 2 6 1 10 5 9 11 12 输出样例: 4 1 ...

  4. 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 ...

  5. JZOJ 5609. 【NOI2018模拟3.28】Tree BZOJ 4919: [Lydsy1706月赛]大根堆

    #Description 给你一颗有 n 个点的树,其中 1 号点为根节点,每个点都有一个权值 vali 你可以从树中选择一些点,注意如果 i 与 j 都被选中且 j 在 i 的子树内,那么必须满足 ...

  6. JZOJ 5461 购物 —— 贪心

    题目:https://jzoj.net/senior/#main/show/5461 贪心,原来想了个思路,优先选优惠价最小的 K 个,然后其他按原价排序遍历: 如果当前物品没选过,原价选上,如果选过 ...

  7. JZOJ 5372. 【NOIP2017提高A组模拟9.17】猫

    Description 信息组最近猫成灾了!隔壁物理组也拿猫没办法.信息组组长只好去请神刀手来帮他们消灭猫.信息组现在共有n 只猫(n 为正整数),编号为1 到n,站成了一个环,第i 只猫的左边是第i ...

  8. jzoj2292-PPMM【模拟,堆】

    正题 题目链接:https://jzoj.net/senior/#contest/show/3008/0 题目大意 一个队列要求支持 队尾压入一个数 队首弹出一个数 队列里所有数取反 求最大值 解题思 ...

  9. jzoj4815-ksum【堆】

    正题 题目链接:https://jzoj.net/senior/#main/show/4815 题目大意 nnn个数的序列,求前kkk大的子段. 解题思路 一个区间的答案肯定比他的所有子区间要大,所以 ...

  10. nssl1148,jzoj5461-购物【可撤回贪心,堆】

    正题 jzoj题目链接:https://jzoj.net/senior/#main/show/5461 题目大意 有n个物品,m元,k个打折券. 每个物品打折前pip_ipi​元,打折后qiq_iqi ...

最新文章

  1. anaconda更换镜像源
  2. 编译linux-2.6.29内核,报错解决方法
  3. 比较两个时间字符串的大小
  4. 蓝桥杯 试题 基础练习 芯片测试——12行代码AC
  5. logo、展板、彩页、手提袋总结
  6. Android单元测试 - Sqlite、SharedPreference、Assets、文件操作 怎么测?
  7. 一步一步使用 DialogFragment 封装链式调用 Dialog
  8. Java Web 获取客户端真实IP
  9. 基于matlab的小波去噪方法研究,基于matlab的小波去噪分析毕业论文.doc
  10. 给 Android 应用开发者的十个建议
  11. Rust:Fn,FnMut,FnOnce
  12. Springboot物业管理系统
  13. 一款QQ全自动签到的辅助工具
  14. 数字电视输出标准规范和BT601/BT709/BT2020色域转换方法资料整理
  15. P3369 【模板】普通平衡树
  16. TensorFlow深度学习:3.API示范
  17. Intro to RL Lecture1
  18. 安卓手机上编程开发环境
  19. java画篮球_PS教程!手把手教你绘制炫酷的科比篮球海报
  20. c语言中的/和%表示什么意思

热门文章

  1. JAVA常见算法题(十九)
  2. 《Adobe After Effects CS5经典教程》——1.6 预览
  3. linux用户和组2
  4. 【设计模式】java设计模式总述及观察者模式
  5. android适配各种分辨率的问题
  6. LINUX信息命令查看大全
  7. 省地县级联操作 http://www.popub.net/script/pcas.html
  8. Redis牛逼!轻松实现实时订阅推送
  9. 在 Google 工作是什么体验?
  10. java给mongo数组添加_如何使用具有新值的java在mongodb中的现有集合中追加现有数组...