1091 線段的重疊 區間重疊

2021-08-18 17:46:49 字數 823 閱讀 4353

題目鏈結

思路

保證思路的有序性。

如果拿出來每一條邊與其他邊進行比較,那麼一定可以得出答案。

但是一條邊[l,r]只能和與它有交集的邊產生可能。那麼進行排序,按照左端點,在某條邊的l大於當前選擇的邊的r時break。

能否在o(n)的演算法處理呢?

也就是說,列舉的區間是有選擇性的。

假設當前選定的區間是a。

那麼之後的區間有ecde四種情況,再加上 無交集的情況。

1.如果是b,c,e,那麼還是以a去掃瞄後面的區間,因為a是覆蓋b,c,e

2.如果是e,那麼e之後的區間的左端點都是大於l5,此時選定的區間應該從a轉移到e

#include using namespace std;

struct node

};vectorvec;

bool cmp(node a,node b)

int main()

sort( vec.begin(),vec.end(),cmp ) ;

int p = 0 ;

int l=vec[p].left,r=vec[p].right;

p++;

intlen = 0;

while ( pif ( vec[p].right

<= r ) else

p++;

}cout<

<0;

}

1091 線段的重疊

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

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條線段,這兩條線段的重疊部分...