Cod sursa(job #162982)

Utilizator marcelcodreaCodrea Marcel marcelcodrea Data 21 martie 2008 00:24:22
Problema Plantatie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
#include<stdio.h>
int n,m;
int b[10][520][520],x,y,z,i,j,putere,k,p;
int max(int r1,int r2,int r3,int r4)
{
  if (r1>=r2&&r1>=r3&&r1>=r4) return r1;
  if (r2>=r1&&r2>=r3&&r2>=r4) return r2;
  if (r3>=r1&&r3>=r2&&r3>=r4) return r3;
  return r4;
}
int main()
{
   freopen("plantatie.in","r",stdin);
   freopen("plantatie.out","w",stdout);
   scanf("%ld %ld",&n,&m);
   for(i=1;i<=n;i++)
    for(j=1;j<=n;j++)
     scanf("%ld",&b[0][i][j]);
  putere=1;
  for(k=1;k<=10;k++)
  {
   for(i=1;i<=n-putere+1;i++)
    for(j=1;j<=n-putere+1;j++)
      b[k][i][j]=max(b[k-1][i][j+putere],b[k-1][i+putere][j],b[k-1][i+putere][j+putere],b[k-1][i][j]);
   putere*=2;
    }
   for(i=1;i<=m;i++)
    {
     scanf("%ld %ld %ld",&x,&y,&z);
     for(p=1,k=0;2*p<=z;p*=2,k++);
     printf("%ld\n",max(b[k][x+z-p][y],b[k][x][y+z-p],b[k][x+z-p][y+z-p],b[k][x][y]));
    }
   return 0;
}