洛谷P4147 玉蟾宮 (單調棧)
阿新 • • 發佈:2022-04-15
要求我們去找一個最大矩形面積。
單調棧做法(和P1950 長方形那道題類似(一模一樣))。
1 #include<bits/stdc++.h> 2 using namespace std; 3 char M[1010][1010]; 4 int n,m,h[1010],l[1010],r[1010]; 5 int s[1010],top; 6 7 void ddzl(){ 8 top=0; 9 for(int i=m;i>=1;i--){ 10 while(top!=0 && h[i]<h[s[top]]) l[s[top--]]=i;11 s[++top]=i; 12 } 13 while(top) l[s[top--]]=0; 14 } 15 16 void ddzr(){ 17 top=0; 18 for(int i=1;i<=m;i++){ 19 while(top!=0 && h[i]<h[s[top]]) r[s[top--]]=i; 20 s[++top]=i; 21 } 22 while(top) r[s[top--]]=m+1; 23 } 24 int ans=0; 25 void work(){26 ddzl();ddzr(); 27 for(int i=1;i<=m;i++) 28 ans=max(ans,h[i]*(r[i]-l[i]-1)); 29 } 30 31 int main(){ 32 scanf("%d%d",&n,&m); 33 for(int i=1;i<=n;i++) 34 for(int j=1;j<=m;j++) 35 cin>>M[i][j]; 36 for(int i=1;i<=n;i++){ 37 for(int j=1;j<=m;j++){ 38 if(M[i][j]=='F') h[j]++; 39 else h[j]=0; 40 } 41 work(); 42 } 43 cout<<3*ans; 44 }
俗話說得好啊,題做多了總有重複的,模型記住了,其他類似的題也就能解決了。。。