玉蟾宫

玉蟾宫

考虑用一条竖着的线(上端下端的高度已经确定),在高度不变的情况下左右移动,它能移动的最大范围就是它能产生的最大矩阵

枚举这条线的下端高度。(横纵坐标)

预处理出,每一个点能最多向上延伸到哪里。也就是以这个点为下端的最长的线。

然后用单调队列,处理出每一条竖线的最大移动范围。

具体来说,对下端点在同一行的线,从左到右扫描,并维护单调递增序列。

设一条线高度为\(h_i\),向左的最大移动范围为 \(w\)

当一条线 \(i\) 加入时,\(w_i\) 等于 所有被他弹出的点的\(w\)之和 \(+1\)因为被他弹出的线都比他长,那这些点能覆盖的,也能被 \(i\) 覆盖。最后还要加上他自身的宽度 \(1\).

考虑怎么计算最大面积 \(mx\)

当一条线被弹出的时候,设在他之前(包括他)被弹出的点的\(w\)之和为 \(sum_i\). 则 \(mx=max(sum_i*h_i)\)。因为在他之前被弹出的线在矩阵中位置在他右边,而且比 \(i\) 长。他们向左能覆盖的,就是\(i\)能向右覆盖的。

时间复杂的为 \(O(n^2)\)

posted @ 2023-09-12 15:42  bwartist  阅读(18)  评论(0)    收藏  举报