單調佇列與斜率優化雜題

2022-05-16 10:00:45 字數 1536 閱讀 6115

hdu3530 subsequence

給定乙個序列,求滿足 \(a\leq\max-\min\leq b\) 的最長的子串行

\(n\leq10^6\)

維護遞增遞減兩個單調佇列,若兩隊首之差大於 \(b\) ,挪動較小左端點,並更新答案左端點

時間複雜度 \(o(n)\)

**poj1180 [ioi2002]batch scheduling

有 \(n\) 個任務,每個任務有時間 \(t_i\) 與花費 \(f_i\) 。將這些任務分組,每組花費為 \((\)之前花費的時間\(+s+\displaystyle\sum t_i)\times (\sum f_i)\)

\(n\leq10^4,\ s\leq50,\ 1\leq t_i,\ f_i\leq100\)

首先可以設計出乙個狀態數為 \(n^2\) 時間複雜度為 \(o(n^3)\) 的dp,用斜率優化可以做到 \(o(n^2)\)

但這樣空間會炸,考慮設計乙個狀態線性的dp

由於總時間 \(=k\times s+\displaystyle\sum_^nt_i\) 。將一段區間分為一組會使得剩下的所有數的時間增加 \(s\) ,也就使得剩下的花費增加了 \(s\times \displaystyle\sum_^nf_i\)

於是可以設計乙個倒序dp,令 \(f_i\) 為 \(i\) 到 \(n\) 的任務分為若干組的最小花費,則 $$f_i=\displaystyle\min_t_i)\times(\sum_nf_i)}$$

可以斜率優化

令 \(t_i=\displaystyle\sum_^nt_i,\ f_i=\sum_^nf_i\)

則 \(f_j=f_it_j+f_i-sf_i-t_if_i\)

時間複雜度 \(o(n)\)

**bzoj1855 [scoi2010]**交易

一共有 \(n\) 天,每天**價為 \(ap_i\) ,賣出價為 \(bp_i\) ,最多** \(as_i\) 股,最多賣出 \(bs_i\) 股。兩次交易至少間隔 \(w\) 天,任何時候最多持有 \(m\) 股。初始資金數目無限,求 \(n\) 天之後能賺到多少錢。

\(1\leq w\leq n,\ m\leq2000,\ 1\leq ap_i,\ bp_i,\ as_i,\ bs_i\leq1000\)

令 \(f_\) 為第 \(i\) 天,持有 \(j\) 股最多賺錢數目

\[f_=\max(f_,\ \displaystyle\max_\+(k-j)\times ap_i\},\ \max_\+(k-j)\times bp_i\})

\]考慮其中第二個式子,將括號拆開,把 \(j\times ap_i\) 提出來得到 \(\displaystyle\max_\+k\times ap_i\}-j\times ap_i\)

可以發現 \(\max\) 中只有與 \(k\) 相關的項,於是可以用單調佇列優化

注意初值設定

時間複雜度 \(o(nm)\)

**

整理 斜率or單調佇列優化dp

題意 求乙個序列的子區間滿足長度大於k且所有數平均值最大 周源 裡的題。之前有人說周源講的是錯的 其實應該是沒什麼問題的 可以o n 求出 不過這題hdu上的資料不知道怎麼了 反正我在網上找的ac 們全都tle。總之 意思明白就好 反正也是入門題 include include include in...

LA 4726 斜率優化 單調佇列

題意 給定乙個01序列,選乙個長度至少為l 的連續子串行使其平均值最大 輸出這個子串行的起點和終點 如果有多個答案,輸出長度最小的,還有多個就輸出第乙個編號最小的 思路 用sum i 表示 1,i 的和 題目的平均值就可以變成 sum i sum j 1 i j 1 問題也變成求橫座標的距離至少為l...

見面會EX dp 斜率優化 單調佇列

題目大意 參考這篇blog,但是資料範圍是1e7。題解 這題居然有線性做法是真的秀 就是這個題不能直接線性的原因是斜率優化沒辦法支援刪除資訊,因此需要用分治 線段樹等來去掉刪除。然後有乙個黑科技 考慮將序列劃分為若干段,使得不存在乙個轉移區間同時和至少三個段有交。劃分方法是,由於轉移區間端點是不降的...