一鼓作氣,四題暴力......
賽時發現可以將限制簡化為一棵樹,嘗試樹形 \(dp\),然後嘗試合併子樹嘗試的一早上......
正解區間 \(dp\),設 \(dp[l][r]\) 表示區間 \([l, r]\) 的合法出棧序列數,每次列舉最晚出棧的數 \(k\),轉移顯然 轉移 \(dp[l][r] = \sum \),但是我們需要考慮限制:
\(o(m)\) 判斷的話總時間複雜度達到 \(o(n^3 m)\),想必不能通過此題,但可以發現以上需要判斷的限制 \((f, g)\) 中,\((f, g)\) 都是連續的,形象地說:
那麼二位字首和優化判斷即可,時間複雜度 \(o(n^3 + n^2)\)
令 \(pre_i\) 表示 \(i\) 之前第乙個與 \(a_i\) 相同的位置,那麼合法的左端點應滿足 \(l \geq \max_^r\)。
那麼區間 \([l, r]\) 的答案就可以表示為:
\[\sum_^^r,l - 1)}
\]顯然 \(\max_^\) 是遞增的,所以我們可以用線段樹維護字首 \(\max\)。
考慮線段樹需要支援什麼操作:1. 修改乙個數;2. 查詢區間 \([l, r]\) 的答案(字首 \(\max\) 的和)
如何維護呢?對於線段樹上每個節點 \(t\),令 \(ls_t, \ rs_t\) 表示它的左右兒子,同時維護 \(ma_t\) 表示區間 \(t\) 的 \(pre\) 的最大值,\(f_t\) 表示區間 \(t\) 在區間 \(fa_t\) 上的字首最大值之和,在區間 \(fa_t\) 上的意思是以 \(t\) 的父親的區間的左端起始的字首最大值(根節點的話就是它本身)。
設當前線段樹上更新到節點 \(t\),\(ma_t\) 很好維護,而 \(f_t\) 需要用到 \(fa_t\) 的資訊,所以我們 在回溯到 \(fa_t\) 時再更新 \(f_t\)。言下之意呢,就是說此時我們需要更新 \(f_\) (區間 \(ls_t\) 與 \(t\) 的左端相同,不需要更新),那麼我們將 \(ma_\) (以下表述為 \(ma'\)) 代入區間 \(rs_t\),設更新到 \(u\):
這樣子我們就維護好啦!至於詢問,其實和維護 \(f_t\) 的過程十分類似,我們只需要代入 \(l - 1\),每次先詢問左區間,然後將左區間的 \(ma\) 和 \(l - 1\) 取個 \(\max\) 再代入右區間即可。
構造題會打不會證在此就不贅述了
2020 11 5提高組模擬 總結
這場比賽是csp前最後一場模擬賽了,但我考得並不好。t1很快就想到了乙個貪心,感覺沒毛病,就放下了。t2很快想到正解,馬上開始碼,9 00 t1,t2碼完,然後去看t3 儘管我之前做過類似的題,但是考場上頭昏腦脹,連凸包都沒有想到,沒想清楚就去打了,11 00發現是錯的,然後去看t4 t4看了一眼式...
2017 8 15 提高B組模擬總結
alice要搭建平台,平台不能漂在空氣中,必須要有兩根柱子支撐,具體地說,每個平台的兩端必須由一根柱子支撐,柱子的另一端在地板或另乙個平台上。給你平台的放置位置 如下左圖所示 每個平台的位置由它的高度 離地面的垂直距離 和水平方向兩個端點的座標決定,每根柱子必須安放在離端點0.5個單位的位置,如下右...
2020 11 21 提高組 模擬賽C組總結
這是乙個好東西 作者主頁 t1 雞腿 樹蔭 題目大意 給你一段數,每次清空 l,r 區間的數,求每次清空後還剩多少個數。思路 線段樹 用線段樹維護區間,利用laz ylazy lazy 陣列來標記這段區間是否清空。暴力 用a ia i ai 記錄離他最近的沒有清空的數的位置,然後直接模擬。t2 su...