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
#include <iostream> #include <algorithm> using namespace std; struct line { int start; int end; }a[50005]; bool cmp(line p,line q) { if(p.start==q.start) return p.end>q.end; else return p.start<q.start; } int main() { int n,i; cin>>n; for(i=0; i<n; i++) { cin>>a[i].start>>a[i].end; } sort(a,a+n,cmp); line b=a[0]; int ans=0; for(i=1; i<n; i++) { if(a[i].end<=b.end) ans=max(ans,a[i].end-a[i].start); else { ans=max(ans,b.end-a[i].start); b=a[i]; //更新参考线段的意义在于其后任何线段与目前参考线段的公共长度都不会小于与上一个 } //参考线段的公共长度 } cout<<ans<<endl; return 0; }