1. 程式人生 > 其它 >[CESC] Maximum Building II 簡單題解

[CESC] Maximum Building II 簡單題解

如果我能夠繼續等待,如果時間能夠停留下來,如果…沒有如果?

上午才做了,下午被神仙問的時候說的一點都不清楚,但現在清楚多了,還是記一記,說個大概思路,畢竟網上連題解都沒有。

考慮先對於每一個點求出以他為矩形左上角的矩形,不觸碰障礙物。

然後考慮對於每一個進行考慮,你考慮每次以這個矩形的左邊開始,往下選出的矩形,然後矩形裡每個地方都可以有一個貢獻,相當於會給這些 +1 。

然後容易發現,考慮只要第 \(i\) 列可以,那麼第 \(i-1\) 列也可以。

那麼就直接考慮最後一列,然後在這上面不斷加,容易發現這東西是一個不斷往上加層的覆蓋,區間 + 1, 等價於是一個差分,然後做 \(n\) 次差分,複雜度為 \(n^3\) 的。

然後考慮將差分再差分之後,發現只有 \(4\)

個位置進行了修改,那就很舒服了,直接 \(nm\) 暴力差分修改。

最後做兩次列裡的字首和,然後就將兩次差分變成了答案。

然後在橫著做一個字尾和,然後就求出答案了。

程式碼由於博主在睡大覺,於是後面再放,也可以直接私信博主催放。