Cod sursa(job #1691909)

Utilizator catalin9898Bajenaru Catalin catalin9898 Data 19 aprilie 2016 18:59:38
Problema Plantatie Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.3 kb
#include <cstdio>

using namespace std;

int r[503][503][9],log[505];
int ma(int a,int b,int c,int d)
{
    if(a<b)a=b;
    if(c<d)c=d;
    if(a<c)return c;
    return a;
}

int main()
{freopen("plantatie.in","r",stdin);
 freopen("plantatie.out","w",stdout);
    int i,j,n,m,p,k,t,f,h,a,b;
    scanf("%d%d",&n,&m);
    for(i=1;i<=n;i++)
        for(j=1;j<=n;j++)
        scanf("%d",&(r[i][j][0]));



        log[1]=0;
        for(i=2;i<=504;i++)
            log[i]=log[i/2]+1;




        for(h=1;h<=log[n];h++)
            for(i=1<<h;i<=n;i++)
            for(j=1<<h;j<=n;j++)
        {
            k=(1<<h-1);
            r[i][j][h]=ma(r[i][j][h-1],r[i-k][j][h-1],r[i][j-k][h-1],r[i-k][j-k][h-1]);
        }


/*
        for(f=0;f<=log[n];f++)
        {
            for(i=1;i<=n;i++)
            {
                for(j=1;j<=n;j++)
                {
                    printf("%d ",r[i][j][f]);
                }printf("\n");
            }printf("\n\n\n\n\n");
        }

*/


        for(f=0;f<m;f++)
        {
            scanf("%d%d%d",&a,&b,&t);
          k=log[t];
          a=a+t-1;
          b=b+t-1;

            p=ma(r[a][b][k],r[a-(1<<k)][b][k],r[a][b-(1<<k)][k],r[a-(1<<k)][b-(1<<k)][k]);
            printf("%d\n",p);
        }

    return 0;
}