Cod sursa(job #19379)

Utilizator slayer4uVictor Popescu slayer4u Data 19 februarie 2007 13:44:03
Problema Plantatie Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.11 kb
#include<cstdio>
#include<cmath>
int n,i,j,x[12][1024][1024],kkt,y,k,a,t,o,b,l,v[]={1,2,4,8,16,32,64,128,256,512,1024,2048};
inline int maxim(int a, int b)
{
    return (a<b?b:a);
}
int main()
{
    freopen ("plantatie.in","rt",stdin);
    freopen ("plantatie.out","wt",stdout);
    
    scanf ("%d %d",&n,&t);
    
    for (i=1;i<=n;i++)
        for (j=1;j<=n;j++)
            scanf("%d", &x[0][i][j]);
         
    for (i=0;v[i]<n;i++);
    i--;
    kkt=i;
       
    for (i=1;i<=kkt;i++)
        for (j=1;j<=n;j++)
            for (k=1;k<=n;k++)
            {
                y=(int)pow((double)2,i-1);
                x[i][j][k]=maxim( maxim(x[i-1][j+y][k],x[i-1][j][k+y]) , maxim(x[i-1][j][k],x[i-1][j+y][k+y]) );
            }
        
    
    for (o=1;o<=t;o++)
    {
        scanf("%d %d %d",&a,&b,&l);
        
        i=0;
        while (v[i]<l) 
              i++;
        i--;
        
        y=(int)pow(2,i);
        
        printf("%d\n",maxim( maxim(x[i][a][b],x[i][a+l-y][b]), maxim(x[i][a][b+l-y],x[i][a+l-y][b+l-y]) ));
    }              
    
    
    return 0;
}