51nod 線段的重疊 貪心

2021-07-30 14:20:05 字數 2018 閱讀 9171

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示例51

5242

8377

9output示例

4

對於所有線段,我們以起點公升序,終點降序排一遍序。

然後o(n)遍歷,每次只取區間寬度最長的邊(起點一樣,終點最遠)。

有乙個tmp記錄每次比較完更新的邊。

例如:152

4283

7791

5282

4377

9tmp先記錄1,5,比較完(2,4)更新成(2,5)一直這樣下去即可。

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define mod 1000000007

#define fir first

#define sec second

#define fin freopen("/home/ostreambaba/文件/input.txt", "r", stdin)

#define fout freopen("/home/ostreambaba/文件/output.txt", "w", stdout)

#define mes(x, m) memset(x, m, sizeof(x))

#define pii pair

#define pll pair

#define inf 1e9+7

#define inf 0x3f3f3f3f

#define pi 4.0*atan(1.0)

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

#define lson l,m,rt<<1

#define rson m+1,r,rt<<1|1

typedef

long

long ll;

typedef

unsigned

long

long ull;

const

double eps = 1e-9;

const

int maxn = 50000+10;

const

int maxm = 205;

using

namespace

std;

inline

int read()

while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar();

return x*f;

}struct linep[maxn];

bool

operator

<(const line&a,const line&b)else

if(p[i].relse

tmp.l=p[i].l;

}cout

0;}

51 Nod 線段最長重疊部分

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

51nod1091線段重疊 貪心

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

51nod 1091 線段的重疊 貪心

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