玉蟾宫-单调栈
题目描述
题解
单调栈
一列一列地扫过去,维护每一行从当前列向左得到的最长‘F’串的长度,然后问题就转化为了求柱状图中最大的矩形面积.(注意单调栈的实现最后一定再加入一个额外的元素,把栈内所用东西弹出以更新答案)
代码实现
#include<bits/stdc++.h>
#define M 1009
using namespace std;
int n,m,head,tail,vis[M],q[M],ans;
char Map[M][M];
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)cin>>Map[i][j];
for(int i=1;i<=m;i++){
head=1,tail=0;
for(int j=1;j<=n+1;j++){
if(Map[j][i]=='R'||j==n+1) vis[j]=0;
else vis[j]++;
while(head<=tail&&vis[q[tail]]>=vis[j]){
ans=max((j-q[tail-1]-1)*vis[q[tail]],ans);
tail--;
}q[++tail]=j;
}
}cout<<3*ans<<endl;
return 0;
}