Cod sursa(job #2628959)

Utilizator ElektrykT E S L A P E F E L I E Elektryk Data 18 iunie 2020 13:05:36
Problema Plantatie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.13 kb
#include <fstream>

using namespace std;

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

int log ( int x )
{
    int p = 0;
    while ( x > 1 )
    {
        x /= 2;
        ++p;
    }
    return p;
}

int n, m;

int v[40][507][507];

int x, y, l;

int main()
{
    in >> n >> m;
    for ( register int i = 1 ; i <= n ; ++i )
        for ( register int j = 1 ; j <= n ; ++j )
            in >> v[0][i][j];
    for ( register int k = 1 ; ( 1 << k ) <= n ; ++k )
        for ( register int i = 1 ; i + ( 1 << k ) <= n + 1 ; ++i )
            for ( register int j = 1 ; j + ( 1 << k ) <= n + 1 ; ++j )
                v[k][i][j] = max ( v[k - 1][i][j], max ( v[k - 1][i][j + ( 1 << ( k - 1 ) )], max ( v[k - 1][i + ( 1 << ( k - 1 ) )][j], v[k - 1][i + ( 1 << ( k - 1 ) )][j + ( 1 << ( k - 1 ) )] ) ) );
    for ( register int q = 1 ; q <= m ; ++q )
    {
        in >> x >> y >> l;
        int lg = log (l);
        out << max ( v[lg][x][y], max ( v[lg][x - ( 1 << lg ) + l][y], max ( v[lg][x][y - ( 1 << lg ) + l], v[lg][x - ( 1 << lg ) + l][y - ( 1 << lg ) + l] ) ) ) << '\n';
    }
    return 0;
}