样例不对 & 28pts 单调栈求助
查看原帖
样例不对 & 28pts 单调栈求助
592238
Elairin176楼主2023/2/27 19:14

样例输出 36
CODE:

//Code by __dest__ruct__or__(uid=592238)
#include <iostream>
#include <stack>
using namespace std;
#define umap unordered_map
#define uset unordered_set
#define ll long long
#define ld long double
#define pii pair<int,int>
#define pll pair<long long,long long>
#define spe putchar(' ')
const ll INF=9223372036854775807;
namespace mySTL{
	inline int max(int a,int b){return a>b?a:b;}
	inline int min(int a,int b){return a<b?a:b;}
	inline ll max(ll a,ll b){return a>b?a:b;}
	inline ll min(ll a,ll b){return a<b?a:b;}
	inline ld min(ld a,ld b){return a<b?a:b;}
	inline ld max(ld a,ld b){return a>b?a:b;}
	inline int _abs(int a){return a<0?-a:a;}
	inline int read(){char c=getchar();int f=1,ans=0;
	while(c<'0'||c>'9'){if(c=='-') f=-1;c=getchar();}
	while(c>='0'&&c<='9')ans*=10,ans+=c-'0',c=getchar();
	return ans*f;}
	inline long long readll(){char c=getchar();long long f=1,ans=0;
	while(c<'0'||c>'9'){if(c=='-') f=-1;c=getchar();}
	while(c>='0'&&c<='9')ans*=10,ans+=c-'0',c=getchar();
	return ans*f;}
	inline void swap(int &a,int &b){a^=b,b^=a,a^=b;}
	inline void swap(ll &a,ll &b){a^=b,b^=a,a^=b;}
	inline void write(int x){if(x<0){putchar('-');x=-x;}
	if(x>=10){write(x/10);}putchar(x%10+'0');}
	inline void writell(long long x){if(x<0){putchar('-');x=-x;}
	if(x>=10){writell(x/10);}putchar(x%10+'0');}
	inline ll pw(ll a,ll b,ll p){if(b==0)return 1;
	if(b==1)return a%p;
	ll mid=pw(a,b/2,p)%p;
	if(b&1)return mid*mid%p*a%p;else{return mid*mid%p;}}
	inline int gcd(int a,int b){return b?gcd(b,a%b):a;}
	inline ll gcd(ll a,ll b){return b?gcd(b,a%b):a;}
	inline int lcm(int a,int b){return a*b/gcd(a,b);}
}
using namespace mySTL;
int n,m,q[1010][1010],ans,w;
char c;
struct node{
	int l;
	int h;
};
stack<node>s;
int main(void){
	n=read();
	m=read();
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			cin>>c;
			q[i][j]=q[i][j-1]+(c=='F');
		}
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			w=0;
			while((!s.empty())&&q[i][j]<=s.top().h){
				w+=s.top().l;
				ans=max(ans,w*s.top().h);
				s.pop();
			}
			s.push(node{w+1,q[i][j]});
		}
		w=0;
		while(!s.empty()){
			w+=s.top().l;
			ans=max(ans,w*s.top().h);
			s.pop();
		}
	}
	write(ans*3);
	return 0;
}
2023/2/27 19:14
加载中...