题目 题意: 给定n个高度为ai,宽度为1的矩形,求出其中最大面积的矩形。 思路: 先考虑暴力,枚举每个高度的矩形分别向左右扩展。时间复杂度不能接受。 发现如果有形如3 2这样的矩形排布,只需要记录下2即可。因为2决定了左侧矩形高度不能超过2,而且高度小于等于2的矩形在左侧都能接受。 因此,可以用单调栈维护一个高度的单调递增栈。 时间复杂度: O(n) 代码:
// Problem: 直方图中最大的矩形
// Contest: AcWing
// URL: https://www.acwing.com/problem/content/description/133/
// Memory Limit: 64 MB
// Time Limit: 1000 ms
//
// Powered by CP Editor (https://cpeditor.org)
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define OldTomato ios::sync_with_stdio(false),cin.tie(nullptr),cout.tie(nullptr)
#define fir(i,a,b) for(int i=a;iT;
// read(T);
while(T--)
{
solve();
}
return 0;
}