總榜 rk6,但是發現只需要改 3s 的 T1 就可以拿到 rk2,但是沒有如果。
賽時
T1 怎麼像是原啊,算了反正不記得。
總結關鍵詞:斜率為非負整數,直線在某區間內的高度有限制。
想了想,發現斜率最大值是 \(m\over n\) 級的,所以後面顯然可以再乘上一個 \(n\)。
於是有思路:列舉斜率 \(k\),對每個元素計算想讓直線經過它時所需要的 \(b\) 值,找到出現次數最多的那個 \(b\) 值,就得到答案了。
umap
擔心會炸空間,所以我用正常陣列存 \(b\),每次清空就行了。
寫寫寫,大樣例過了,好了不管了。
T2 只會暴力啊。
繼續想,發現我可以預處理正常刪除到某個狀態時剩餘元素的個數。
發現每次可以 \(\mathcal{O}(n^2)\) DP 啊,我只需要一個 \(dp_{i,j}=\max(\min(dp_{i-1,j},dp_{i,j-1}),c_{i,j})\) 就行了,這樣總複雜度是 \(\mathcal{O}(n^3)\) 的,有一個優秀的 50pts。
寫寫寫,大樣例過了(因為沒給 \(5000\) 的樣例)。
繼續想,每次對 DP 陣列的修改是不是有限的狀態啊?然後就想到了 DDP,所以我不想了。
看 T3,發現我會 \(\mathcal{O}(n^4)\) 暴力。
寫寫寫,小樣例過了。
是不是隻有顏色相同的那些點才是有用的啊?不對,隨便一個顏色全相同的資料就能卡掉我。
看著可以用 LC 最佳化,但是我忘了怎麼寫 LC 了,跳了跳了。
看 T4,我會一個複雜度 \(\mathcal{O}(nk\log (nk)+mk\log(nk))\) 的演算法。
寫完以後發現不過樣例。
打表,哎我的 size
怎麼刪除一次減少了 \(3\) 啊,我用的是 multiset
啊?
難道刪一次會全刪了麼?好像還真是。
怎麼辦呢?我可以存結構體,雜湊一下,就可以了。
寫寫寫,怎麼又掛了?
我突然想起來了 \(\color{red}血淋淋的教訓\),哦還真是這問題,改完就可以了。
比賽還剩 10min,擺了。
賽後
吃飯的時候發現 T1 我的桶裡面會有負數,希望不會掛太多吧。
評測,看榜,HDS 用手法多拿了一堆分。
我 T1 水到了 55pts(小L:這都能 55pts?
最終是總榜 rk6。
T1 下發程式碼,加上偏移量,提交,透過,然後我就有 200pts 了,唉。
T4 告訴我們一定要記住 \(\color{red}血淋淋的教訓\)。
但其實也不用,刪除的時候我們去刪迭代器就可以了,比如 se.erase(se.find(k))
。
聽講評,T2 抽象模型以後類似網格圖,每次修改確實是有限的,但是我那個思路不好走下去。
T3 如果把兩步分開的話就有一個很簡單的 \(\mathcal{O}(n^3)\) 演算法了,加上 LC 就能過了啊。
T4 聽懂了,大致就是每 \(k\) 個元素分塊,發現塊內隨便做,塊與塊之間有最大值的性質,也能用線段樹做,單點修改也能改。
只能說還行吧。