題解 海亮集訓 倍增 放積木

2021-09-25 02:29:27 字數 1286 閱讀 3139

alice 有 n 塊積木,放置第 i 塊積木會佔據區間[li, ri]。

alice 每次會騰出乙個區間放積木,她希望放的積木盡可能多,對每個詢問區間,你需

要回答 alice 最多可放置的積木數量。

注意: 積木與積木的放置區間不可重疊,且任意選定的積木放置區間不能超出詢問區間。

我們想整解

線段覆蓋,我們可以將它們理解為跳跳跳 的問題。

所以,對於跳跳跳 這一類的問題,我們自然而然地想到了倍增。

設f a[

i][j

]fa[i][j]

fa[i][

j]表示從第i個位置開始,跳2

k2^k

2k個區間所到達的最小位置

很顯然,初始值可以這樣賦:

f a[

a[i]

.l][

0]=m

in(f

a[a[

i].l

][0]

,a[i

].r)

0≤i≤

nfa[a[i].l][0]=min(fa[a[i].l][0],a[i].r)_

fa[a[i

].l]

[0]=

min(

fa[a

[i].

l][0

],a[

i].r

)0≤i

≤n​

初始值賦完,便可以進行預處理了:

f a[

i][j

]=fa

[fa[

i][j

−1]]

[j−1

]fa[i][j]=fa[fa[i][j-1]][j-1]

fa[i][

j]=f

a[fa

[i][

j−1]

][j−

1]這樣之後,我們就可以從每個區間進行倍增更新答案。

//具體細節請參照**

#include

using

namespace std;

int n,m,len,ans=0;

struct nodea[

1010101];

int fa[

200010][

50];inline

bool

mycmp

(node x,node y)

intmain()

return0;

}

題解 海亮集訓 dp 子串

題目傳送門 題目描述 有兩個僅包含小寫英文本母的字串 aa 和 bb。現在要從字串 aa 中取出 kk 個互不重疊的非空子串,然後把這 kk 個子串按照其在字串 aa 現的順序依次連線起來得到乙個新的字串,請問有多少種方案可以使得這個新串與字串 bb 相等?注意 子串取出的位置不同也認為是不同的方案...

海亮集訓 題解 線段樹 農場分配

armer john最近新建立了乙個農場,並且正在接受奶牛的畜欄分配請求,有些 畜欄會看到農場美妙的風景。農場由n 1 n 100,000 個畜欄組成,編號為1 n,畜欄i可以最多容納c i只奶牛 1 c i 100,000 奶牛i希望得到連續的一段畜欄,表示為一段區間 a i,b i 這樣的話奶牛...

2019 7 15海亮暑假集訓Day10考試總結

t1,我在做的時候竟然沒想到統計方案,這真的有點.70分啊 這一道題首先可以發現,最長上公升子串行和次長上公升子串行的差別就是 如果最長上公升子串行有1個,那麼次長上公升子串行的長度則為最長上公升子串行 1,否則就是最長上公升子串行,那麼我們就可以統計最長上公升子串行和其方案數就可在o n 2 的時...