51Nod 1091 線段的重疊 (貪心)

2022-04-12 09:40:08 字數 1354 閱讀 6753

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

思路:利用sort之後的陣列,進行o(n)掃

1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include 

12using

namespace

std;

13#define lowbit(x) (x&(-x))

14#define max(x,y) (x>y?x:y)

15#define min(x,y) (x16

#define max 100000000000000000

17#define mod 1000000007

18#define pi acos(-1.0)

19#define ei exp(1)

20#define pi 3.141592653589793238462

21#define inf 0x3f3f3f3f3f

22#define mem(a) (memset(a,0,sizeof(a)))

23 typedef long

long

ll;24

const

int n=50005;25

const

int mod=1e9+7;26

struct

node

27p[50001

];30

intcmp(node a,node b)

3135

intmain()

3648

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

50 printf("

%d\n

",maxn);

51return0;

52 }

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