51nod 1091 線段的重疊

2022-04-27 14:56:33 字數 945 閱讀 6517

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 52 4

2 83 7

7 9

output示例

4
思路:最初思路 是用dp[i]儲存前i個點線段重疊的最大部分,但是如果二維迴圈,o(n*n)的複雜度,明顯超時,但是其實只用一維就完全可以搞定了,

先按起點排序對所有點,然後找當前點前面的所有線段終點最靠後的那根,就跟當前線段有最大的重合,長度就是那個線段的終點減去當前線段的起點,但是有一種情況就是那個線段的終點超過了當前線段的終點,那麼重合的長度就是當前線段的長度,那根線段覆蓋當前長度。只要每次儲存最大值就行,這樣排序複雜度nlogn,一次遍歷n,總複雜度是nlogn。

#include#include#includeusing namespace std;

struct node

p[50001];

int cmp(node a,node b)

else maxn=max(maxn,p[i].y-p[i].x);

}printf("%d\n",maxn);

return 0;

}

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 ...