Cod sursa(job #1280327)

Utilizator andreismara97Smarandoiu Andrei andreismara97 Data 1 decembrie 2014 19:53:08
Problema Plantatie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.06 kb
#include<fstream>
using namespace std;
ifstream in("plantatie.in");
ofstream out("plantatie.out");

#define Nmax 501
int A[10][Nmax][Nmax],lg[Nmax];
int n,q,x,y,l;


int main ()
{
    int i1,j1,L,x1,x2,y1,y2;
    in>>n>>q;

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

    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
            in>>A[0][i][j];

    for(int k=1;k<=lg[n];k++)
        for(int i=1;i<=n;i++)
            for(int j=1;j<=n;j++)
            {
                if((1 << k) > i || (1 << k) > j)
                    continue;

                i1=i-(1<<(k-1));
                j1=j-(1<<(k-1));
                A[k][i][j]=max(max(A[k-1][ i ][ j ],A[k-1][ i1 ][j]),max(A[k-1][i][j1],A[k-1][i1][j1]));

            }

    for(int k=1;k<=q;k++)
    {
        in>>x>>y>>l;

        L = lg[l];

        x1=x+(1<<L)-1;
        y1=y+(1<<L)-1;
        x2=x+l-1;
        y2=y+l-1;

        out << max(max(A[L][x1][y1] , A[L][x1][y2]) , max(A[L][x2][y1] , A[L][x2][y2])) << '\n';

    }
    return 0;
}