Cod sursa(job #1694959)

Utilizator Alexa2001Alexa Tudose Alexa2001 Data 26 aprilie 2016 12:43:30
Problema Plantatie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 kb
#include <cstdio>
#include <algorithm>

using namespace std;

int lg[505], a[10][505][505], n, i, j, q, v1,v2,v3,v4,z, x,y,Log, l;

void Rmq()
{
   int i,j,l;

   for(l=1; l<=lg[n]; ++l)
   {
       for(i=1; i<=n; ++i)
       for(j=1; j<=n; ++j)
       {
           z=(1<<(l-1));
           v1=a[l-1][i][j];
           v2=a[l-1][i-z][j];
           v3=a[l-1][i][j-z];
           v4=a[l-1][i-z][j-z];

           a[l][i][j]=max( max(v1,v2), max(v3,v4) );
       }
   }
}

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

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

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

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

    Rmq();

    while(q--)
    {
        scanf("%d%d%d", &x, &y, &l);
        x+=l-1;
        y+=l-1;

        Log=lg[l];
        z=l-(1<<Log);

        v1=a[Log][x][y];
        v2=a[Log][x][y-z];
        v3=a[Log][x-z][y];
        v4=a[Log][x-z][y-z];

        printf("%d\n", max( max(v1,v2), max(v3,v4)) );
    }

    return 0;
}