单调队列---Martix MAX

来源:互联网 发布:东莞广电网络套餐介绍 编辑:程序博客网 时间:2024/05/09 05:16

题目链接:http://acm.hdu.edu.cn/diy/contest_showproblem.php?pid=1005&cid=21426

求由*组成的最大子矩阵的面积


一维的题:poj-3559-Largest Rectangle in a Histogram


本题为2维的。。

#include<stdio.h>#include<string.h>#include<stdlib.h>#include<algorithm>using namespace std;char ch[1010][1010];int h[1010];int r[1010],l[1010];int main(){int i,j,k;int n,m;while(~scanf("%d%d",&n,&m)){int mx=0;for(i=0;i<n;i++)scanf("%s",ch[i]);memset(h,0,sizeof(h));for(i=0;i<n;i++){for(j=0;j<m;j++){if(ch[i][j]=='*')h[j]++;elseh[j]=0;}l[0]=0;int t1;for(j=1;j<m;j++){t1=j;while(t1>0 && h[j]<=h[t1-1])t1=l[t1-1];l[j]=t1;}r[m-1]=m-1;for(j=m-2;j>=0;j--){t1=j;while(t1<m-1 && h[j]<=h[t1+1])t1=r[t1+1];r[j]=t1;}for(j=0;j<m;j++){mx=max(mx,(r[j]-l[j]+1)*h[j]);}}printf("%d\n",mx);}}




原创粉丝点击