题干:

X轴上有N条线段,每条线段包括1个起点和终点。线段的重叠是这样来算的,[10 20]和[12 25]的重叠部分为[12 20]。
给出N条线段的起点和终点,从中选出2条线段,这两条线段的重叠部分是最长的。输出这个最长的距离。如果没有重叠,输出0。
Input
第1行:线段的数量N(2 <= N <= 50000)。
第2 - N + 1行:每行2个数,线段的起点和终点。(0 <= s , e <= 10^9)
Output
输出最长重复区间的长度。
Input示例
5
1 5
2 4
2 8
3 7
7 9
Output示例

4

解题报告:

区间问题,先想到排序,此题以起点为标准排序,优点:排完后只需要o(n)看右端点即可,总体复杂度o(nlogn+n)。如果不排序直接暴搜复杂度是o(n^2)。

ac代码:

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;struct Node {int s,e;
} node[50000+5];//没有逗号!!!!(格式问题要记牢啊)
bool cmp(const Node & a,const Node & b) {if(a.s!=b.s) return a.s<b.s;else return a.e>b.e;
}
int main()
{int maxx=0;int n;cin>>n;for(int i = 1; i<=n; i++) {scanf("%d %d",&node[i].s,&node[i].e);}//相当于以起点开始的dp搜索(以node[i].s为起点(或者说当前的l)的最大公共区间部分) sort(node+1,node+n+1,cmp);//排序的好处还有一个就是已于看清最大公共区间的可能范围,因为你以起点排序了所以只需要排相邻两者即可,而不需要每一个都搜索一遍n,那样复杂度是n^2了,排序再算就是o(nlogn+n) int l=node[1].s,r=node[1].e;for(int i = 2; i<=n; i++) {if(node[i].e>r) {//maxx应该不变,不对 还是有可能变化的 maxx=max(maxx,r-node[i].s);}else if(node[i].e<=r) {        //  别忘=号!!!不然就wa了 maxx=max(maxx,node[i].e-node[i].s);}r=max(r,node[i].e);}printf("%d\n",maxx);return 0 ;} 

一个网络版的for循环结构是这样的:

for(int i=1;i<n;i++){if(s<=f[i].s && e<f[i].e)sum=e-f[i].s;else if(s<=f[i].s && e>=f[i].e)sum=f[i].e-f[i].s;maxx=max(maxx,sum);if(e>=f[i].e)continue;s=f[i].s;e=f[i].e;}

感觉这样写并不好,因为此处肯本不需要s的参与,因为你排好序了啊!!

51nod 1091 重叠的线段(贪心)相关推荐

  1. 51Nod --1133 不重叠的线段

    51Nod --1133 不重叠的线段 X轴上有N条线段,每条线段有1个起点S和终点E.最多能够选出多少条互不重叠的线段.(注:起点或终点重叠,不算重叠). 例如:[1 5][2 3][3 6],可以 ...

  2. 51Nod 1091 线段的重叠(贪心+区间相关,板子题)

    1091 线段的重叠 基准时间限制:1 秒 空间限制:131072 KB 分值: 5         难度:1级算法题 X轴上有N条线段,每条线段包括1个起点和终点.线段的重叠是这样来算的,[10 2 ...

  3. 51nod 1091 线段的重叠(贪心)

    题意: 求两条线段的最大重叠 思路: 按照l升序,r降序排列 维护最大的r 代码: #include<iostream> #include<cstdio> #include&l ...

  4. 【51Nod - 1133】不重叠的线段 (贪心)

    题干: X轴上有N条线段,每条线段有1个起点S和终点E.最多能够选出多少条互不重叠的线段.(注:起点或终点重叠,不算重叠). 例如:151523233636,可以选23233636,这2条线段互不重叠 ...

  5. 435. 无重叠区间(贪心算法)

    给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠. 注意: 可以认为区间的终点总是大于它的起点. 区间 [1,2] 和 [2,3] 的边界相互"接触",但没有相互 ...

  6. LeetCode 435. 无重叠区间(贪心/动态规划)

    文章目录 1. 题目 2. 解题 2.1 贪心 2.2 动态规划 1. 题目 给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠. 注意: 可以认为区间的终点总是大于它的起点. 区间 ...

  7. 不重叠的线段(51Nod-1133)

    题目 X轴上有N条线段,每条线段有1个起点S和终点E.最多能够选出多少条互不重叠的线段.(注:起点或终点重叠,不算重叠). 例如:[1 5][2 3][3 6],可以选[2 3][3 6],这2条线段 ...

  8. 51Nod - 1298(点到线段的距离)

    链接:51Nod - 1298 题意: 给出圆的圆心和半径,以及三角形的三个顶点,问圆同三角形是否相交.相交输出"Yes",否则输出"No".(三角形的面积大于 ...

  9. 51nod 1781 Pinball(线段树)

    题面 Pinball的游戏界面由m+2行.n列组成.第一行在顶端.一个球会从第一行的某一列出发,开始垂直下落,界面上有一些漏斗,一共有m个漏斗分别放在第2~m+1行,第i个漏斗的作用是把经过第i+1行 ...

最新文章

  1. c语言中struct和c++中class实例对比
  2. 如何使用LocalDateTime解析/格式化日期? (Java 8)
  3. php如何返回数据请求数据格式化,PHP以json或xml数据格式返回请求数据的封装代码...
  4. dbeaver 数据转化 mapping_Python机器学习实例:数据竞赛-足球运动员身价估计
  5. Qt实现多屏幕多分辨率自适应
  6. 安卓逆向系列教程 4.8 去广告 II
  7. 力扣700. 二叉搜索树中的搜索(JavaScript)
  8. pythonplot画多图间隔,matplotlib实现一页多图
  9. php实现中间件6,THINKPHP6 实现中间件
  10. 数据挖掘:模型选择——关联规则
  11. 谭浩强《C语言程序设计第五版》第二章学习笔记
  12. c语言题库及详解答案 免费下载,C语言题库(带详解答案).pdf
  13. warning: array subscript has type ‘char‘
  14. Linux面试题及答案
  15. 算法笔记 简单贪心(月饼问题)
  16. 清华博士接亲被要求现场写代码,5 分钟做出一颗爱心樱花3D相册(HTML+CSS+JavaScript)
  17. 电脑异常关机后,AS报错,无法编译工程Could not load module metadata from ..
  18. 如何在局域网使用自定义域名
  19. FM/AM收音机原理
  20. 网站关键词怎么合理布局提升网站排名

热门文章

  1. [剑指offer][JAVA]面试题第[29]题[顺时针打印矩阵][数组]
  2. [Leedcode][JAVA][第202题][快乐数]
  3. 【匈牙利算法】【二分图匹配】【转载】趣写算法系列之--匈牙利算法
  4. 常州win8如何禁用应用商店_Win8系统当中Windows defnedder安全软件应该如何禁用?...
  5. centos安装无线网卡驱动_CentOS下显卡驱动安装的相关思考
  6. 高仿人人android梦想版终极源码发送,人人Android客户端梦想版发布
  7. 腾讯视频客户端导出MP4格式
  8. if-else多级嵌套,输入3/4/5个数寻找最大值(太多了容易乱!!!)
  9. 在 VC6 中使用 GdiPlus-安装
  10. 微信小程序页面栈_微信小程序使用页面栈改变上一页面的数据