Cod sursa(job #322882)

Utilizator taloibogdanTaloi Bogdan Cristian taloibogdan Data 10 iunie 2009 10:37:39
Problema Plantatie Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#include<stdio.h>
long n,m,i,j,a[505][505][11],k,x,y,p,aa;
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",&a[i][j][0]);
 for(k=1;(1<<k)<=n;++k)
    for(i=1;i+(1<<(k-1))-1<=n;++i)
       for(j=1;j+(1<<(k-1))-1<=n;++j)
          {a[i][j][k]=a[i][j][k-1];
           if(a[i][j][k]<a[i][j+(1<<(k-1))][k-1])
               a[i][j][k]=a[i][j+(1<<(k-1))][k-1];
           if(a[i][j][k]<a[i+(1<<(k-1))][j][k-1])
               a[i][j][k]=a[i+(1<<(k-1))][j][k-1];
           if(a[i][j][k]<a[i+(1<<(k-1))][j+(1<<(k-1))][k-1])
               a[i][j][k]=a[i+(1<<(k-1))][j+(1<<(k-1))][k-1];}
 for(i=1;i<=m;++i)
    {scanf("%ld%ld%ld",&x,&y,&k);
     p=1;
     while((1<<(p+1))<=k)p++;
     aa=a[x][y][p];
     if(aa<a[x][y+k-(1<<p)][p])aa=a[x][y+k-(1<<p)][p];
     if(aa<a[x+k-(1<<p)][y][p])aa=a[x+k-(1<<p)][y][p];
     if(aa<a[x+k-(1<<p)][y+k-(1<<p)][p])aa=a[x+k-(1<<p)][y+k-(1<<p)][p];
     printf("%ld\n",aa);}
 return 0;
}