点击这里查看原题
单调栈模板题,注意答案要乘3。
/*
User:Small
Language:C++
Problem No.:3039
*/
#include<bits/stdc++.h>
#define ll long long
#define inf 999999999
using namespace std;
const int M=1e3+5;
int a[M][M],s[M],l[M],tp,ans,n,m;
void work(int h[]){
tp=0;
for(int i=1;i<=m;i++){
int len=0;
while(tp&&h[i]<s[tp]){
len+=l[tp];
ans=max(ans,len*s[tp]);
tp--;
}
s[++tp]=h[i];
l[tp]=len+1;
}
int len=0;
while(tp){
len+=l[tp];
ans=max(ans,len*s[tp]);
tp--;
}
}
int main(){
freopen("data.in","r",stdin);//
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
char c[5];
scanf("%s",&c);
if(c[0]=='F') a[i][j]=a[i-1][j]+1;
}
}
for(int i=1;i<=n;i++) work(a[i]);
printf("%d\n",3*ans);
return 0;
}