Cod sursa(job #18139)

Utilizator mariusdrgdragus marius mariusdrg Data 18 februarie 2007 10:02:46
Problema Plantatie Scor 100
Compilator cpp Status done
Runda preONI 2007, Runda 2, Clasa a 10-a Marime 1.37 kb
#include<stdio.h>

const int maxn2 = 14;
const int maxn = 512;

int a[maxn2][maxn][maxn];
int p,l,x,y;
int n,m;
int i,j,k;

int max(int a,int b)
{
        if (a<b) return b;
        return a;
}

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