玉蟾宫
考虑用一条竖着的线(上端下端的高度已经确定),在高度不变的情况下左右移动,它能移动的最大范围就是它能产生的最大矩阵
枚举这条线的下端高度。(横纵坐标)
预处理出,每一个点能最多向上延伸到哪里。也就是以这个点为下端的最长的线。
然后用单调队列,处理出每一条竖线的最大移动范围。
具体来说,对下端点在同一行的线,从左到右扫描,并维护单调递增序列。
设一条线高度为\(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)\)
本文来自博客园,作者:bwartist,转载请注明原文链接:https://www.cnblogs.com/bwartist/p/17696386.html

浙公网安备 33010602011771号