洛谷P4147 玉蟾宫 (单调栈)
作者:互联网
要求我们去找一个最大矩形面积。
单调栈做法(和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 }
俗话说得好啊,题做多了总有重复的,模型记住了,其他类似的题也就能解决了。。。
标签:洛谷,玉蟾,int,top,ddzl,&&,P4147,1010,单调 来源: https://www.cnblogs.com/yhxnoerror/p/16151132.html