P2082 區間覆蓋 加強版 貪心

2022-01-19 14:05:12 字數 1737 閱讀 2343

解析:

剛開始自己寫的**:

我對l遞增排列,l相等按r遞增排列。

直接逐個判斷,相交,或者不相交。

但讓每乙個區間只和它前乙個區間發生關係,顯然是錯誤的。

比如:

[1,5]

[2,4]

[3,6]

答案應該是6,但是我這個**輸出的是7,原因是第三個區間[3,6]與[2,4]發生了關係,但是[1,5]已經把[2,4]覆蓋了。

#include//wawawawawawa!#include

#include

#include

#include

#include

using

namespace

std;

typedef

long

long

ll;const

int maxn=1e5+20

;struct

node

st[maxn];

bool

cmp(node a , node b)

intmain()

ll sum=0

; sort(st+1,st+1+n,cmp);

sum=st[1].r-st[1].l+1

;

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

}cout

}

正確的貪心思路:

因為首要排序的是l,所以這個情況下r基本是亂序的。

下乙個區間需要算的前提是什麼?當然是超出之前所有區間的範圍了。

所以可以維護乙個最大r,只有當前的區間超越r,才能納入計算(其實自己算也是這個思想的,腦袋秀逗了)。

同時更新最大的r。

引以為戒~

ac**:

#include#include

#include

#include

#include

#include

using

namespace

std;

typedef

long

long

ll;const

int maxn=1e5+20

;struct

node

st[maxn];

bool

cmp(node a , node b)

intmain()

ll sum=0

; sort(st+1,st+1+n,cmp);

sum=st[1].r-st[1].l+1

; ll r=st[1

].r;

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

else

if(st[i].r>r)

r=max(r,st[i].r);

}cout

}

洛谷P2082 區間覆蓋 加強版 (珂朵莉樹)

傳送門 雖然是黃題而且還是一波離散就能解決的東西 然而珂朵莉樹還是很好用 相當於一開始區間全為0,然後每一次區間賦值,問最後總權值 珂朵莉樹搞一搞就好了 1 minamoto 2 include 3 include4 include5 define ll long long 6 define it ...

1751 區間覆蓋問題

time limit 1000 ms memory limit 65536 kib problem description 設x1 x2 xn 是實直線上的n 個點。用固定長度的閉區間覆蓋這n 個點,至少需要多少個這樣的固定長度閉區間?對於給定的實直線上的n個點和閉區間的長度k,設計解此問題的有效演...

4 10區間覆蓋問題

問題描述 設x2,x2,xn是實直線上的n個點。用固定長度的閉區間覆蓋著n個點,至少需要多少個這樣的長度閉區間?設計解決此問題的有效演算法。演算法設計 對於給定的實直線上的n個點和閉區間的長度k,計算覆蓋點集的最少區間數。資料輸入 第一行有兩個整數n和k,表示有n個點,且固定長度閉區間的長度為k。接...