Cod sursa(job #200978)

Utilizator AndreiDDiaconeasa Andrei AndreiD Data 28 iulie 2008 11:40:18
Problema Plantatie Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.3 kb
#include <stdio.h>

#define NMAX 600

#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][NMAX];
int B[NMAX];

int max(int a, int b, int c, int d)
{
int maxim;

maxim=1;

if (a>maxim)
    maxim=a;

if (b>maxim)
    maxim=b;

if (c>maxim)
    maxim=c;

if (d>maxim)
    maxim=d;

return maxim;
}



int descompune(int cif)
{
int nr;
nr=0;
while (cif%2==0)
      {
      ++nr;
      cif/=2;
      }
return nr;
}





void solve()
{
//p=descompune(k);
for (i=1;i<=m;++i)
    {
     scanf("%d %d %d", &q1,&q2,&q3);
   //  for (ii=3;ii<=n;++ii)
     //	 B[i]=descompune(ii);
       for (ii=2;ii<=n;++ii)
       B[i]=B[i>>1]+1;
       x=B[q3];
       printf("%d\n",max(A[q1][q2][x],A[q1][q2+q3-(1<<x)][x],A[q1+q3-(1<<x)][q2+q3-(1<<x)][(1<<x)],A[q1+q3-(1<<x)][q2][x]));
     }
}








void init()
{

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

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

}

void read()
{

freopen(FIN,"rt",stdin);
freopen(FOUT,"wt",stdout);

scanf("%d %d", &n, &m);

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

init();
solve();
}



int main()
{
read();
return 0;
}