51nod 1091 線段的重疊

2021-08-15 15:55:42 字數 961 閱讀 6495

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

輸出最長重複區間的長度。

sample input

5 1 5

2 4

2 8

3 7

7 9

sample output

4思路:

個人認為這是道貪心題。

首先,排序是必要的。 將線段按照左端點從小到大排序。

再然後,維護線段右端點的最大值和結果。

再然後就是重疊的時候有2種情況:

或者

所以不能簡單地用維護的最大值減去線段左端點。分類討論。

詳見**。

#include

#include

#define maxn 50005

using

namespace

std;

int n,ans,c;

struct node a[maxn];

bool cmp(node p,node q)

int main()

printf("%d\n",ans);

}

51nod 1091 線段的重疊

基準時間限制 1 秒 空間限制 131072 kb 分值 5 難度 1級演算法題 x軸上有n條線段,每條線段包括1個起點和終點。線段的重疊是這樣來算的,10 20 和 12 25 的重疊部分為 12 20 給出n條線段的起點和終點,從中選出2條線段,這兩條線段的重疊部分是最長的。輸出這個最長的距離。...

51nod1091 線段的重疊

x軸上有n條線段,每條線段包括1個起點和終點。線段的重疊是這樣來算的,10 20 和 12 25 的重疊部分為 12 20 給出n條線段的起點和終點,從中選出2條線段,這兩條線段的重疊部分是最長的。輸出這個最長的距離。如果沒有重疊,輸出0。input 第1行 線段的數量n 2 n 50000 第2 ...

51Nod 1091 線段的重疊

x軸上有n條線段,每條線段包括1個起點和終點。線段的重疊是這樣來算的,10 20 和 12 25 的重疊部分為 12 20 給出n條線段的起點和終點,從中選出2條線段,這兩條線段的重疊部分是最長的。輸出這個最長的距離。如果沒有重疊,輸出0。input 第1行 線段的數量n 2 n 50000 第2 ...