Cod sursa(job #331800)

Utilizator hasegandaniHasegan Daniel hasegandani Data 15 iulie 2009 13:10:18
Problema Plantatie Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.92 kb
#include<stdio.h>

#define nmax 512

int n,m[nmax][nmax][32];

int max(int x,int y)
{
    if (x>y)
        return x;
    return y;
}

int main()
{
    int t;
    freopen("plantatie.in","r",stdin);
    freopen("plantatie.out","w",stdout);
    scanf("%d%d",&n,&t);
    for(int i=1;i<=n;++i)
        for(int j=1;j<=n;++j)
            scanf("%d",&m[i][j][1]);
            
    int p=1;
    for(int k=2;k<n;++k)
        {
        for(int i=1;i<=n;++i)
            for(int j=1;j<=n;++j)
                m[i][j][k]=max( max(m[i][j][k-1],m[i+p][j][k-1]) , max(m[i+p][j+p][k-1],m[i][j+p][k-1]) );
        p=p*2;
        }
                
    for(;t;--t)
        {
        int i,j,k;
        scanf("%d%d%d",&i,&j,&k);
        int p,l;
        for(l=1, p=1; 2*l<=k ;l*=2 , ++p);
        printf("%d\n",max(m[i][j][p], max(m[i][j+k-l][p], max(m[i+k-l][j][p], m[i+k-l][j+k-l][p]) ) ));
        }
    return 0;
}