Cod sursa(job #2485596)

Utilizator Davla2Stancu Vlad Davla2 Data 1 noiembrie 2019 19:52:31
Problema Plantatie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.15 kb
#include <fstream>
#include <algorithm>
#include <iostream>

using namespace std;

ifstream in("plantatie.in");
ofstream out("plantatie.out");

int r[10][501][501],log[501];

int main()
{
    int n,x,y,m,l,i,j,lat,rez;
    in>>n>>m;
    for(i=1; i<=n; i++)
    {
        for(j=1; j<=n; j++)
        {
            in>>r[0][i][j];
        }
    }

    for(l=1; (1<<l)<=n; l++)
    {
        lat=1<<(l-1);
        for(i=1; i + (1 << l) <= n + 1; i++)
        {
            for(j=1; j + (1 << l) <= n + 1; j++)
            {
                r[l][i][j]=max(r[l-1][i][j], r[l-1][i][j+lat]);
                r[l][i][j]=max(r[l][i][j], r[l-1][i+lat][j]);
                r[l][i][j]=max(r[l][i][j], r[l-1][i+lat][j+lat]);
            }
        }
    }
    log[1]=0;
    for(i=2; i<=n; i++)
    {
        log[i]=1+log[i/2];
    }
    //return 0;
    for(int a=1; a<=m; a++)
    {
        in>>x>>y>>lat;
        l=log[lat];
        //cout << x << " " << y << " " << lat << " " << l << "\n";
        rez=max(r[l][x][y], r[l][x][y+lat-(1<<l)]);
        rez=max(rez, r[l][x+lat-(1<<l)][y]);
        rez=max(rez, r[l][x+lat-(1<<l)][y+lat-(1<<l)]);
        out<<rez<<"\n";
    }
    return 0;
}