Cod sursa(job #1679282)

Utilizator crysstyanIacob Paul Cristian crysstyan Data 7 aprilie 2016 20:30:01
Problema Plantatie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.97 kb
#include <fstream>
#include <vector>
#include <cmath>
#include <algorithm>
#define NMAX 505
#define LMAX 12

using namespace std;

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

int i, n, j, nrquiz, x, y, k, rmq[NMAX][NMAX][LMAX], l;

int main()
{
    f >> n >> nrquiz;

    for (i = 1; i <= n; ++ i)
        for (j = 1; j <= n; ++ j)
            f >> rmq[i][j][0];

    for (l = 1; (1 << l) <= n; ++ l)
        for (i = 1; i + (1 << l) - 1 <= n; ++ i)
            for (j = 1; j + (1 << l) - 1 <= n; ++ j)
                rmq[i][j][l] = max(max(max(rmq[i][j][l - 1], rmq[i + (1 << (l - 1))][j][l - 1]), rmq[i][j + (1 << (l - 1))][l - 1]), rmq[i + (1 << (l - 1))][j + (1 << (l - 1))][l - 1]);

    for (; nrquiz; -- nrquiz)
    {
        f >> x >> y >> k;

        l = log2(k);
        g << max(max(max(rmq[x][y][l], rmq[x + k - (1 << l)][y][l]), rmq[x][y + k - (1 << l)][l]), rmq[x + k - (1 << l)][y + k - (1 << l)][l]) << '\n';
    }
    return 0;
}