Cod sursa(job #331820)

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

#define nmax 512

int n,m[nmax][nmax][9],put[nmax],pm[nmax];

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;p<=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]) );
        
        put[p]=k-1;
        pm[p]=p;
        p=p*2;
        }
        
    for(int i=1;i<=n;++i)
        if (!put[i])
            {
            put[i]=put[i-1];
            pm[i]=pm[i-1];
            }
        
      
    for(;t;--t)
        {
        int i,j,k;
        scanf("%d%d%d",&i,&j,&k);
        int p=put[k],l=pm[k];
        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;
}