Cod sursa(job #915750)

Utilizator iuli1505Parasca Iuliana iuli1505 Data 15 martie 2013 12:09:23
Problema Plantatie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 kb
#include<cstdio>
#define MAX(a,b) a>b?a:b
#define nmax 510
using namespace std;
int a[nmax][nmax][10],l[nmax],i,j,k,sol,n,m;
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[i][j][0]);
    for(k=1;(1<<k)<=n;++k)
        for(i=1;i<=n-(1<<k)+1;++i)
            for(j=1;j<=n-(1<<k)+1;++j)
            {
                a[i][j][k]=MAX(a[i][j][k-1],a[i][j+(1<<(k-1))][k-1]);
                a[i][j][k]=MAX(a[i][j][k],a[i+(1<<(k-1))][j][k-1]);
                a[i][j][k]=MAX(a[i][j][k],a[i+(1<<(k-1))][j+(1<<(k-1))][k-1]);
            }
    for(l[1]=0,i=2;i<=n;++i)
        l[i]=l[i/2]+1;
    for(;m;--m)
    {
        scanf("%d%d%d", &i, &j, &k);
        sol=MAX(a[i][j][l[k]],a[i][j+k-(1<<l[k])][l[k]]);
        sol=MAX(sol,a[i+k-(1<<l[k])][j][l[k]]);
        sol=MAX(sol,a[i+k-(1<<l[k])][j+k-(1<<l[k])][l[k]]);
        printf("%d\n", sol);
    }


    return 0;
}