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