Cod sursa(job #1301012)

Utilizator diana97Diana Ghinea diana97 Data 25 decembrie 2014 14:38:10
Problema Plantatie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 kb
#include <iostream>
#include <fstream>

using namespace std;

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

const int NMAX = 500 + 1;
const int LOGMAX = 9 + 1;

int n, m;
int lg[NMAX], rmq[LOGMAX][NMAX][NMAX];

void citeste() {
    f >> n >> m;
    int x;
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= n; j++)
            f >> rmq[0][i][j];
    }
}

void initializeaza() {
    for (int i = 2; i <= n; i++) lg[i] = 1 + lg[i / 2];

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

void raspunde() {
    int i, j, k, l, p;
    while (m--) {
        f >> i >> j >> k;
        l = lg[k];
        p = (1 << l);
        g << max(rmq[l][i][j], max(rmq[l][i + k - p][j], max(rmq[l][i][j + k - p], rmq[l][i + k - p][j + k - p]))) << '\n';
    }

}

int main() {
    citeste();
    initializeaza();
    raspunde();
    return 0;
}