Cod sursa(job #1667357)

Utilizator TibiraducanuTiberiu Raducanu Tibiraducanu Data 28 martie 2016 21:15:12
Problema Plantatie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.14 kb
#include <cstdio>
#include <algorithm>
using namespace std;

int r[505][505][10],lg[505];

int maxx(int a, int b, int c ,int d)
{
    int m=-1;

    if(a>m) m=a;
    if(b>m) m=b;
    if(c>m) m=c;
    if(d>m) m=d;

    return m;
}

int main()
{
    freopen("plantatie.in","r",stdin);
    freopen("plantatie.out","w",stdout);

    int n,m,i,j,l,lin,col,x,y,k,val;

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

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

    for(i=1;i<=n;i++)
    {
        for(j=1;j<=n;j++)
        {
            for(l=0;( (1<<l)<=i and (1<<l)<=j ) ; l++)
            {
                if(l==0) scanf("%d",&r[i][j][0]);
                else
                {
                    k=(1<<(l-1));
                    r[i][j][l]=maxx(r[i][j][l-1],r[i-k][j][l-1],r[i][j-k][l-1],r[i-k][j-k][l-1]);
                }
            }
        }
    }

    for(int t=1;t<=m;t++)
    {
        scanf("%d%d%d",&i,&j,&l);
        x=i+l-1;
        y=j+l-1;
        k=lg[l];
        val=(1<<k);

        printf("%d\n",maxx(r[i+val-1][j+val-1][k],r[i+val-1][y][k],r[x][j+val-1][k],r[x][y][k]) );
    }

    return 0;
}