Cod sursa(job #324048)

Utilizator Magnuscont cu nume gresit sau fals Magnus Data 14 iunie 2009 14:19:51
Problema Plantatie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.18 kb
#include<stdio.h>   
#define NM 256+513   
  
int b[10][NM][NM];   
int a[NM][NM];   
int main(){   
freopen("plantatie.in","r",stdin);   
freopen("plantatie.out","w",stdout);   
int n,m,i,j,k,l,c,lat,pmax,p,x,t;   
scanf("%d%d",&n,&m);   
for(i=1;i<=n;++i)   
    for(j=1;j<=n;++j){   
        scanf("%d",&a[i][j]);   
        b[0][i][j]=a[i][j];   
        }   
k=0;p=1;   
while(p<n) k++,p*=2;   
x=k;p=1;   
for(k=1;k<=x;++k){   
    for(i=1;i<=n;++i)   
        for(j=1;j<=n;++j){   
            pmax=b[k-1][i][j];   
            if(pmax<b[k-1][i+p][j+p]) pmax=b[k-1][i+p][j+p];   
            if(pmax<b[k-1][i+p][j]) pmax=b[k-1][i+p][j];   
            if(pmax<b[k-1][i][j+p]) pmax=b[k-1][i][j+p];   
            b[k][i][j]=pmax;   
            }   
    p*=2;   
    }   
for(t=0;t<m;++t){   
    scanf("%d%d%d",&l,&c,&lat);   
    p=1;k=0;   
    while(p<lat) k++,p*=2;   
    if(p>lat) p/=2,k--;   
    pmax=b[k][l][c];   
    if(pmax<b[k][l][c+lat-p]) pmax=b[k][l][c+lat-p];   
    if(pmax<b[k][l+lat-p][c]) pmax=b[k][l+lat-p][c];   
    if(pmax<b[k][l+lat-p][c+lat-p]) pmax=b[k][l+lat-p][c+lat-p];   
    printf("%d\n",pmax);   
    }   
return 0;   
}