Cod sursa(job #200998)

Utilizator AndreiDDiaconeasa Andrei AndreiD Data 28 iulie 2008 12:11:48
Problema Plantatie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#include <stdio.h>

#define NMAX 710
#define NMIN 10

#define FIN "plantatie.in"
#define FOUT "plantatie.out"


int x,n,q1,q2,q3,p,w,i,j,k,m,ii;
int A[NMAX][NMAX][NMIN];
int B[NMAX];

int max(int a,int b,int c, int d)
{
int maxim;
maxim=1;
if (maxim<a)
   maxim=a;
if (maxim<b)
   maxim=b;
if (maxim<c)
   maxim=c;
if (maxim<d)
   maxim=d;

return maxim;

}


int main()
{
freopen(FIN,"rt",stdin);
scanf("%d %d",&n,&m);


for(i=1;i<=n;++i)
    for(j=1;j<=n;++j)
	scanf("%d",&A[i][j][0]);

for(k=1; (1<<k) <=n;++k)
    for(i=1;i<=n;++i)
	for(j=1;j<=n;++j)

	 A[i][j][k]=max(A[i][j][k-1],A[i+(1<<(k-1))][j][k-1],A[i][j+(1<<(k-1))][k-1],A[i+(1<<(k-1))][j+(1<<(k-1))][k-1]);

for (i=2;i<=n;++i)
    B[i]=B[i/2]+1;

freopen(FOUT,"wt",stdout);
for(ii=1;ii<=m;++ii)
{
scanf("%d %d %d",&i,&j,&k);
printf("%d\n",max (A[i][j][B[k]],A[i][j+k-(1<<B[k])][B[k]],A[i+k-(1<<B[k])][j][B[k]],A[i+k-(1<<B[k])][j+k-(1<<B[k])][B[k]]));
}
return 0;
}