nefu 1144 线段重叠

Description

在一维坐标轴中,给你N条线段,每条线段的起点和终点都是坐标轴上的整数点。例如,[10 29]和[12 25]的重叠部分为[12 25]。给出N条线段的起点(整数)和终点(整数),从中选择两条线段,使这两条线段的重叠部分是最长的。输出这个最长的距离。如果没有重叠,输出0。

Input

多组输入数据,每组测试数据包含两行:
第1行:线段的数量N(2 <= N <= 50000)。
第2 - N + 1行:每行2个数,线段的起点和终点。(0 <= s , e <= 10^9)

Output

对于每组测试数据,输出最长重复区间的长度。

Sample Input

5
1 5
2 4
2 8
3 7
7 9

Sample Output

4

//这道题是贪心思想,不断更新最长线段的右区间;
#include <iostream>
#include <algorithm>
#include<cstdio>
using namespace std;

struct node
{
    int x,y;
} data[500005];

bool cmp(const node &a,const node &b)
{
    if(a.x<b.x) return true;
    else if(a.x==b.x)
    {
        if(a.y<b.y) return true;
        else return false;
    }
    else return false;
}

int main()
{
    int n,maxx;
    while(cin>>n)
    {
        maxx=0;
        for(int i=0;i<n;i++)
        scanf("%d%d",&data[i].x,&data[i].y);
        sort(data,data+n,cmp);
        int tmp=data[0].y,k;
        for(int i=1;i<n;i++)
        {
            if(data[i].y>=tmp)
            {
                maxx=max(maxx,tmp-data[i].x);
                tmp=data[i].y;
            }
            else maxx=max(maxx,data[i].y-data[i].x);
        }
        printf("%d\n",maxx);
    }
    return 0;
}
时间: 2024-10-06 05:51:57

nefu 1144 线段重叠的相关文章

蓝桥杯 BASIC-18 矩形面积交(线段重叠)

[思路]:将各个边平行到x.y轴上,重叠部分相乘得面积.getLen中是两条线相交的各种判断.注意:因为输入一个矩形的两个点并没有说先输入左下再输入右上(测试数据也确实有先输入了右上),所以一定要两两排序.否则会出现a大于b的情况. [AC代码]: #include <iostream> #include <algorithm> #include <iomanip> #include <cstdio> #include <cstring> usi

NEFU 1160 线段树

点击打开链接 题意:弱校的OJ的弱题,给定一棵树,和关系,然后在节点上更新时,它的所有儿子也要更新,有个判断条件,查询是所有节点的值的和 思路:与HDU 5692一样的思路,不多说了 #pragma comment(linker, "/STACK:102400000, 102400000") #include <vector> #include <stdio.h> #include <string.h> #include <stdlib.h&g

软件项目技术点(25)——提升性能之检测绘制范围

软件里的一个画面包含很多个元素,但是当缩放到某个局部位置时,需要绘制的元素个数就很少.那么怎么判断某个元素是否需要进行绘制呢? 我们在绘制整个画面时,是进行循环遍历每个元素的,如下判断是否进行绘制的代码: 1 var elements = this.commonElements.all();//获取所有元素列表 2 var winInfo = getWindow();//获取画布窗口的宽高值 3 var viewMinx = 0; 4 var viewMiny = 0; 5 var viewMa

POJ 1328 Radar Installation 贪心算法

Description Assume the coasting is an infinite straight line. Land is in one side of coasting, sea in the other. Each small island is a point locating in the sea side. And any radar installation, locating on the coasting, can only cover d distance, s

中枢理论2

走势是以时间为横轴,价格.成交量并列为纵轴的价量分时曲线,缠论的级别概念的是以 1分.5分.30分.1天.1周等K线图走势周期为基础.      缠论认为:任何级别的所有走势,都能分解成趋势(上涨或下跌)与盘整两大走势类型,并且任何级别的任何走势类型终要完成.       无任上涨.下跌还是盘整,都必然涉及到中枢问题.中枢是某级别走势类型中,被三个(段)连续次级别走势类型所重叠部分构成的价格平台.中枢是有级别的,一般把最小中枢固定在1分钟图的3个K线重叠上. 所谓盘整,就是任何完成的任意级别走势

Codeforces Round #506 (Div. 3) A-C

CF比赛题解(简单题) 简单题是指自己在比赛期间做出来了 A. Many Equal Substrings 题意 给个字符串t,构造一个字符串s,使得s中t出现k次;s的长度最短 如t="cat",k=3, minlen(s)=9,s=catcatcat 1<=len(t),k<=50 题解 稍加思考是个前缀等于后缀的问题,用kmp的next数组模板 假设t[0..l-1]==t[n-l....n-1] 那么应该不断重复t[l...n-1]这样的子串 代码如下(应该好好记住

HDU 1050(搬椅子 数学)

题意是在一个有 400 个房间的走廊中搬动房间里的椅子,如果两次的路线重叠,就要分两次搬动,如果不重叠,就可以一次搬动. 开始的时候直接当成求线段重叠条数的题,发现这种思路完全是错的,比如 1 - 3,2 - 4,3 - 5 这一组,只需搬动两次即可,但找重叠线段的话就会找到 3 条重叠线段. 然后打算直接模拟做,加入一点贪心的思路,用结构体数组存搬动要求,按椅子搬动的距离从小到大排序,扫描一边整个结构体数组,将搬动的路径标记, 若已经标记过,则 ++ans,注意 ans 的初值为 1,因为第一

LeetCode 面试题 16.03. 交点

题目描述: 给定两条线段(表示为起点start = {X1, Y1}和终点end = {X2, Y2}),如果它们有交点,请计算其交点,没有交点则返回空值. 要求浮点型误差不超过10^-6.若有多个交点(线段重叠)则返回 X 值最小的点,X 坐标相同则返回 Y 值最小的点. 就是要分类讨论一下,要注意的是在判断两条线段是否相交时,不要使用浮点运算,可能会造成判断错误. class Solution { public: vector<double> intersection(vector<

线段的重叠(贪心)

题目:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1091 先按线段起点升序排序,此时有两大种情况: 第一种是第二根线段的左边在第一根线段右边的右边, 即两根线段不相交,此时要将终点更新,因为是按起点升序排序,如果第二根的就不相交那之后的线段都不相交: 第二种大情况是相交,其第一种小情况是包含,此时要将重叠长度与最大重叠比较,但不需要更新终点, 第二种小情况是相交但不包含,此时不仅要比较最大重叠长度,还需要更新终点.