51nod 1158 全是1的最大子矩阵

来源:互联网 发布:mac限时免费大全 编辑:程序博客网 时间:2024/05/17 01:39
#include<bits/stdc++.h>using namespace std;int val[550][550];int sta[550],lef[550];int main(){int n,m,i,j,k,ans,top;while(~scanf("%d%d",&n,&m)){ans=0;for(i=1;i<=n;i++){for(j=1;j<=m;j++){scanf("%d",&val[i][j]);if(val[i][j]){val[i][j]+=val[i][j-1];ans=max(ans,val[i][j]);}}}for(j=1;j<=m;j++){top=0;val[n+1][j]=-1;for(i=1;i<=n+1;i++){if(top==0||val[i][j]>val[sta[top-1]][j])//单调递增的栈 {sta[top++]=i;lef[i]=i;continue;}if(val[i][j]==val[sta[top-1]][j])continue;while(top>=1&&val[i][j]<val[sta[top-1]][j]){ans=max(ans,(i-lef[sta[top-1]])*val[sta[top-1]][j]);top--;}lef[i]=lef[sta[top]];sta[top++]=i;}}printf("%d\n",ans);}}

0 0
原创粉丝点击