市赛题。。当时没敲。。太无语了。。
还是用扫描法 对每个位置记录 up left 和right 只不过这回记录left 和right的时候 要在这个位置 往左和右探查。。这样复杂度最坏可能上升到三次方。
。
代码写的长了。。但是逻辑清晰。
直接过了。。。唉 。市赛时候忘了敲一下了。。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=805;
int map[maxn][maxn];
int up[maxn][maxn];
int Left[maxn][maxn];
int Right[maxn][maxn];
int n,m;
int main()
{
freopen("/home/gl/acm/in","r",stdin);
while(scanf("%d %d",&n,&m)!=EOF)
{
for(int i=0; i<n; ++i)
for(int j=0; j<m; ++j)
scanf("%d",&map[i][j]);
int k,ans=1;
for(int i=0; i<n; ++i)
{
if(i==0)
{
for(int j=0; j<m; ++j)
{
up[i][j]=1;