Cod sursa(job #1952041)

Utilizator VicktorVictor Teodor Stoian Vicktor Data 3 aprilie 2017 21:57:31
Problema Plantatie Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#include <fstream>
#include <cstdio>

using namespace std;

ofstream cout("plantatie.out");

int M[505][505][10],i,j,n,m,nr,x,y,k,r;
int a,b,c,d;
int lg[505];
int main()
{
    FILE*fin=freopen("plantatie.in","r",stdin);

    scanf("%d%d",&n,&m);

    for(i=1;i<=n;i++)
        for(j=1;j<=n;j++)
            scanf("%d",&M[0][i][j]);

    lg[1]=0;
     for(i=2;i<=n;i++)
        lg[i]=lg[i/2]+1;

    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=M[k-1][i][j];
                b=M[k-1][i][j+(1<<(k-1))];
                c=M[k-1][i+(1<<(k-1))][j];
                d=M[k-1][i+(1<<(k-1))][j+(1<<(k-1))];
                M[k][i][j]=max(a,max(b,max(c,d)));
            }

    for(i=1;i<=m;i++){
        scanf("%d%d%d",&x,&y,&r);
             k=lg[r];
        a=M[k][x][y];
        b=M[k][x][y+r-(1<<k)];
        c=M[k][x+r-(1<<k)][y];
        d=M[k][x+r-(1<<k)][y+r-(1<<k)];
        cout<<max(a,max(b,max(c,d)))<<'\n';
    }
    return 0;
}