[题目链接]

https://www.lydsy.com/JudgeOnline/problem.php?id=5102

[算法]

首先,n条线段的交集一定是[Lmax,Rmin] , 其中,Lmax为最靠右的左端点,Rmin为最靠左的右端点

根据这个性质 , 我们不妨将所有线段按左端点为关键字排序 , 依次枚举最终交集的左端点 , 同时 , 我们还需维护一个小根堆 , 维护前k大的右端点 , 每次我们通过( 堆顶 - 当前枚举线段的左端点 )更新答案

[代码]

#include<bits/stdc++.h>
using namespace std;
#define MAXN 1000010 struct segment
{
int id;
int l,r;
} a[MAXN]; int n,k,ans,l,r,len;
priority_queue< pair<int,int> > q;
int res[MAXN]; template <typename T> inline void read(T &x)
{
int f = ; x = ;
char c = getchar();
for (; !isdigit(c); c = getchar()) if (c == '-') f = -f;
for (; isdigit(c); c = getchar()) x = (x << ) + (x << ) + c - '';
x *= f;
}
inline bool cmp(segment a,segment b)
{
if (a.l == b.l) return a.r > b.r;
else return a.l < b.l;
} int main()
{ read(n); read(k);
for (int i = ; i <= n; i++)
{
a[i].id = i;
read(a[i].l);
read(a[i].r);
}
sort(a + ,a + n + ,cmp);
ans = ;
for (int i = ; i <= n; i++)
{
if ((int)q.size() < k)
{
q.push(make_pair(-a[i].r,a[i].id));
if ((int)q.size() == k)
{
ans = max(ans,-q.top().first - a[i].l);
l = a[i].l; r = -q.top().first;
continue;
}
} else
{
if (a[i].r < -q.top().first) continue;
pair<int,int> tmp = q.top();
q.pop();
q.push(make_pair(-a[i].r,a[i].id));
if (-q.top().first - a[i].l > ans)
{
ans = -q.top().first - a[i].l;
l = a[i].l; r = -q.top().first;
}
}
}
printf("%d\n",ans);
if (ans == )
{
for (int i = ; i <= k; i++)
printf("%d ",i);
printf("\n");
return ;
}
for (int i = ; i <= n; i++)
{
if (a[i].l <= l && a[i].r >= r)
{
res[++len] = a[i].id;
if ((--k) == ) break;
}
}
for (int i = ; i <= len; i++) printf("%d ",res[i]);
printf("\n"); return ; }

最新文章

  1. java在类定义时对hashset的便捷初始化方法
  2. Redis不同数据类型的的数据结构实现
  3. coocs2d-x资源压缩笔记
  4. uva 725 division(水题)——yhx
  5. angularjs-$interval使用
  6. .NET本质论(4)应用程序对象HttpApplication
  7. Android类库打包方法探究
  8. android 窗体透明的,黑暗度等的设置技巧
  9. [.NET] 《Effective C#》快速笔记 - C# 高效编程要点补充
  10. 349B - Color the Fence
  11. UE4使用第三方库读写xml文件
  12. Dockerfile Volume指令与docker -v的区别
  13. cc.Node 的坐标空间与ACTION的学习
  14. Python Flask Restful
  15. wxpy: 用 Python 玩微信【转】
  16. MFC无闪烁隐藏窗口
  17. es-aggregations聚合分析
  18. DDR II中的延时参数
  19. MongoDB分片配置系列一:
  20. 047——VUE中css过渡动作实例

热门文章

  1. python实现二叉树的遍历以及基本操作
  2. 07Microsoft SQL Server View
  3. jenkins部署遇到离线问题如何解决
  4. 编译器:gcc, clang, llvm
  5. TWaver HTML5之树形布局
  6. 1043 输出PATest (20 分)
  7. 51nod 1241 特殊的排序
  8. hadoop 3.0.0新特性
  9. js中匿名函数的N种写法
  10. code wars quiz: toInteger