Cod sursa(job #2606624)

Utilizator ioana.jianuIoana Jianu ioana.jianu Data 28 aprilie 2020 10:24:13
Problema Plantatie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.19 kb
#include <iostream>
#include <stdio.h>

using namespace std;

const int NMAX = 505;
int rmq[10][NMAX][NMAX], log2[NMAX];

int main() {

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

    int n, m, i, j, ii, jj, x, y, xx, yy, xf, yf, l, k, rez;

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

    log2[1] = 0;
    for (i = 2; i <= n; i++)
        log2[i] = 1 + log2[i / 2];

    for (l = 1; l <= log2[n]; l++)
        for (i = 1<<l; i <= n; i++)
            for (j = 1<<l; j <= n; j++) {
                ii = i - (1<<(l - 1));
                jj = j - (1<<(l - 1));
                rmq[l][i][j] = max(max(rmq[l - 1][ii][jj], rmq[l - 1][i][j]), max(rmq[l - 1][ii][j], rmq[l - 1][i][jj]));
            }

    for (i = 1; i <= m; i++) {
        scanf ("%d%d%d", &x, &y, &k);
        l = log2[k];
        xf = x + k - 1;
        yf = y + k - 1;
        xx = x + (1<<l) - 1;
        yy = y + (1<<l) - 1;
        rez = max(max(rmq[l][xx][yy], rmq[l][xf][yf]), max(rmq[l][xx][yf], rmq[l][xf][yy]));
        printf("%d\n", rez);

    }

    return 0;
}