All pastes #41265 Raw Edit

Miscellany

public text v1 · immutable
#41265 ·published 2006-02-12 13:23 UTC
rendered paste body
#include<stdio.h>
#include<limits.h>
long mat[1001][1001];
char bin[1001][1001];
long ans[1001][1001];
long max=0;
long N;
long n,m;


long mini(long a,long b)
{
	if(a>b)
		return b;
	else
		return a;
}

int main()
{

	long i;
	long j;
	long x;
	long t;
	scanf("%ld",&N);

	for(x=0;x<N;x++)
	{
		max=0;
		scanf("%ld %ld",&m,&n);


		for(i=0;i<=m;i++)
		{
			bin[i][0]=0;
			mat[i][0]=LONG_MAX;
			ans[i][0]=0;
			
		}

		for(i=0;i<=n;i++)
		{
			bin[0][i]=0;
			mat[0][i]=LONG_MAX;
			ans[0][i]=0;
		}

		for(i=1;i<=m;i++)
		{
			for(j=1;j<=n;j++)
			{
				scanf("%ld",&mat[i][j]);
				if(mat[i][j]<=mat[i][j-1] && mat[i][j]<=mat[i-1][j])
				{
					bin[i][j]=1;
				}
				else
				{
					bin[i][j]=0;
				}

			}

		}


		for(i=1;i<=m;i++)
		{
			for(j=1;j<=n;j++)
			{
				t=mini(ans[i-1][j],ans[i][j-1]);
				if(bin[i][j]==1)
				{
					if(t>=ans[i-1][j-1])
					{
						ans[i][j]=ans[i-1][j-1]+1;
					}
					else
					{
						ans[i][j]=t+1;
					}
					if(ans[i][j]>max)
					{
						max=ans[i][j];
					}
				}
				else
				{
					ans[i][j]=0;
				}
			}
		}
		max++;

		printf("%ld\n",max*max);
	}

	return 0;
}