C. Maximal Intersection codeforces round#506(div3)

看似逼格的一道排序傻逼题。。。只要确定去掉的线段一定具有最大的左端点和最小的右端点就可以啦。肯定不可能是其他的情况,因为如果不去掉这两条,删其他的根本没用

#include<bits/stdc++.h>
using namespace std;
const int INF=(int)1e9+7;
struct segment{
    int l;
    int r;
};
bool cmp1(segment A,segment B)
{
    return A.l<B.l;
}
bool cmp2(segment A,segment B)
{
    return A.r<B.r;
}
segment seg[300005];
int main()
{
    int n;
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
        int l,r;
        scanf("%d%d",&l,&r);
        seg[i].l=l;
        seg[i].r=r;
    }
    sort(seg+1,seg+n+1,cmp1);
    int maxl=0;
    int minr=INF;
    for(int i=1;i<=n-1;i++)
    {
        maxl=max(seg[i].l,maxl);
        minr=min(seg[i].r,minr);
    }
    int res=max(0,minr-maxl);
    sort(seg+1,seg+n+1,cmp2);
    maxl=0,minr=INF;
    for(int i=2;i<=n;i++)
    {
        maxl=max(seg[i].l,maxl);
        minr=min(seg[i].r,minr);
    }
    res=max(res,minr-maxl);
    printf("%d
",res);
}
原文地址:https://www.cnblogs.com/lishengkangshidatiancai/p/10254543.html