51nod 1091 線段的重疊

2021-08-09 21:40:02 字數 1094 閱讀 9193

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
一拿到題 ,線段樹????

再仔細看了看,應該是貪心題,抱著僥倖的心理來一波  優化後的暴力,居然a了。。。

主要思路是:

1.先給差值從大到小排序

2.然後從第一條(即差值最大的線段)順序匹配第二條線段,ans=max(ans,(l-r/*滿足條件的情況下*/))。。。。。不多說,直接上**。

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

typedef long long ll;

struct btreenode[50005];

int cmp(btree a,btree b)

int main(){

int n;

while(scanf("%d",&n)!=eof){

for(int i=0;inode[k].r||node[j].rnode[k].l&&node[j].r>node[k].r){

ans=max(ans,node[k].r-node[j].l);

// cout

ans=max(ans,node[j].r-node[k].l);

//cout<

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