51Nod 1091:  http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1091
 
基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题
 
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

题解:

求最长的重叠段的长度

利用sort之后的数组,进行O(N) 扫, 维护一个最远点end, 可以求得当前线段与已存在线段的最长重叠段。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <map>
#include <cmath>
using namespace std; const int maxn = 50005; struct Segment{
int x, y;
}s[maxn];
int n; int cmp(const void *a, const void *b){
Segment *aa = (Segment *)a;
Segment *bb = (Segment *)b;
if(aa->x == bb->x){
return bb->y - aa->x;
}
return aa->x - bb->x;
} int main(){
freopen("in.txt", "r", stdin); int len, j, ans, end;
while(scanf("%d", &n) != EOF){
for(int i=0; i<n; ++i){
scanf("%d %d", &s[i].x, &s[i].y );
}
qsort(s, n, sizeof(s[0]), cmp);
ans = 0; end = s[0].y;
for(int i=0; i<n-1; ++i){
ans = max(ans, min(end, s[i+1].y) - s[i+1].x);
end = max(end, s[i+1].y);
}
printf("%d\n", ans);
}
return 0;
}

  

51Nod-1091 线段的重叠的更多相关文章

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

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

  2. 51Nod 1091 线段的重叠(贪心+区间相关

    1091 线段的重叠 X轴上有N条线段,每条线段包括1个起点和终点.线段的重叠是这样来算的,[10 20]和[12 25]的重叠部分为[12 20]. 给出N条线段的起点和终点,从中选出2条线段,这两 ...

  3. 51nod 1091 线段的重叠【贪心/区间覆盖类】

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

  4. [51nod] 1091 线段的重叠 贪心

    X轴上有N条线段,每条线段包括1个起点和终点.线段的重叠是这样来算的,[10 20]和[12 25]的重叠部分为[12 20]. 给出N条线段的起点和终点,从中选出2条线段,这两条线段的重叠部分是最长 ...

  5. 51Nod 1091 线段的重叠 (贪心)

    X轴上有N条线段,每条线段包括1个起点和终点.线段的重叠是这样来算的,[10 20]和[12 25]的重叠部分为[12 20]. 给出N条线段的起点和终点,从中选出2条线段,这两条线段的重叠部分是最长 ...

  6. 51Nod 1091 线段重叠 | 贪心

    Input示例 5 1 5 2 4 2 8 3 7 7 9 Output示例 4 first try: O(n^2):二层循环,减法取最大 后五个time limit exceeded #includ ...

  7. 51 Nod 1091 线段的重叠 (贪心算法)

    原题链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1091 思路分析:通过读题不难发现这是一道涉及贪心算法的题,刚 ...

  8. 51 Nod 1091 线段的重叠

    2017-09-24 19:51:41 writer:pprp 上一个题目就是关于线段重叠最大值,这个是找区间最长重合? 给你n个线段,然后让你在其中选择两条,使两条尽可能重合多一点 解决方法; 1. ...

  9. 51Nod 1091:线段的重叠(贪心)

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

随机推荐

  1. [JS]笔记13之Date对象

    -->获取与设置时间的方法-->使用Date对象制作相应的效果 1.设置时间创建一个时间对象 new Date(time); 设置时间 time 从1970年1月1日至几种格式:new D ...

  2. K 均值算法(K-means)

    K-means算法是最简单的一种聚类算法.算法的目的是使各个样本与所在类均值的误差平方和达到最小(这也是评价K-means算法最后聚类效果的评价标准) K-means聚类算法的一般步骤: 1. 初始化 ...

  3. iOS开发-UI 从入门到精通(五)

    近日在做项目的时候,为了快捷适配屏幕采用了Storyboard,添加约束以后运行后发现一个问题(下面将以普通案例展示该问题);在4.7 甚至更大的屏幕下是没有问题的,如下图(4.7屏幕): 但是放到更 ...

  4. 【Swift】UITableViewCell 中 TTTAttributedLabel 超链接无法点击的问题

    前言 还以为是自己代码写的有问题,用法和别的地方都一样,但是这个是在 UITableViewCell 中使用,另外在 tableHeaderView 中使用也没用这个问题 —— 使用 TTTAttri ...

  5. 【Swift】iOS开发历险记(一)

    前言 边开发边学习,边攒经验,汇总一下记录到这里 声明 欢迎转载,但请保留文章原始出处:) 博客园:http://www.cnblogs.com 农民伯伯: http://over140.cnblog ...

  6. 【代码笔记】iOS-获取字符串的宽度,高度

    一,代码. - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, ...

  7. maven工程模块化

    前言 项目的模块化有利于任务分工,后期维护,易扩展,模块还可以独立成服务单独部署等: 创建packaging类型为POM的父项目 我用的maven插件是m2e,相信大部分人在eclipse装的也是m2 ...

  8. 实战:考虑性能--Solr索引的schema设计

    从 high level 的角度来看,schema.xml 结果如下,这个例子虽然不是一个真实的XML,但是简洁明了的传达了shema的概念. <schema> <types> ...

  9. Python学习笔记1-数据类型

    数据类型: float — 浮点数可以精确到小数点后面15位 int — 整型可以无限大 bool — 非零为true,零为false list — 列表 Float/Int: 运算符: / — 浮点 ...

  10. mysql修改数据库编码(数据库字符集)和表的字符编码的方法

    Mysql数据库是一个开源的数据库,应用非常广泛.以下是修改mysql数据库的字符编码的操作过程和将表的字符编码转换成utf-8的方法,需要的朋友可以参考下. mysql将表的字符编码转换成utf-8 ...