1091 線段的重疊

2021-07-02 21:19:38 字數 1133 閱讀 8246

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

當時腦袋短路想了乙個多小時才想明白,其實這就是一道水的貪心題。首先我們將線段按照線段的左端點進行排序。然後沒列舉當前的每一條線段,然後和前面出現的線段,且那條線段的右端點在最右面的那條線段的重合部分,即為當前的最大值,然後不斷地更新最終的最大值ans,並維護s即可。

#include #include #include #include #include using namespace std;

const int maxn = 50010;

typedef long long ll;

struct seg

seg(ll t_l, ll t_r) : l(t_l), r(t_r)

bool operator < (const seg &s) const

return l < s.l;

}}segs[maxn];

inline ll max(ll a, ll b)

inline ll min(ll a, ll b)

inline void swap(ll &a, ll &b)

int main()

}sort(segs + 1, segs + n + 1);

s.l = segs[1].l, s.r = segs[1].r;

for(int i = 2; i <= n; ++i)

}cout << ans << endl;

return 0;

}

1091 線段的重疊

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

1091 線段的重疊

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

1091 線段的重疊

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