Cod sursa(job #1520606)

Utilizator zacuscaAlex Iordache zacusca Data 9 noiembrie 2015 08:25:58
Problema Plantatie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 kb
#include <fstream>

using namespace std;

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

int n, m, lg[503], A[13][503][503];

inline int max (int x, int y) { if(x > y) return x; return y;}

int main()
{
    in >> n >> m;
    lg[0] = -1;
    for (int i = 1; i <= n; ++i)
    {
        for (int j = 1; j <= n; ++j)
            in >> A[0][i][j];
        lg[i] = lg[i >> 1] + 1;
    }

    for (int k = 1; k <= lg[n]; ++k)
    {
        for (int i = 1; i + (1 << k) - 1 <= n; ++i)
        {
            for (int j = 1; j + (1 << k) - 1 <= n; ++j)
            {
                A[k][i][j] = max(max(A[k-1][i][j], A[k-1][i][j + (1 << (k-1))]), max(A[k-1][i + (1 << (k-1))][j], A[k-1][i + (1 << (k-1))][j + (1 << (k-1))]));
            }
        }
    }

    for (int x, y, k, i = 1; i <= m; ++i)
    {
        in >> x >> y >> k;
        int h = lg[k];
        int sol = max(max(A[h][x][y], A[h][x + k - (1 << h)][y]), max(A[h][x][y + k - (1 << h)], A[h][x + k - (1 << h)][y + k - (1 << h)]));
        out << sol << '\n';
    }

    out.close();
    return 0;
}