Cod sursa(job #1322098)

Utilizator oprea1si2si3Oprea Sebastian oprea1si2si3 Data 19 ianuarie 2015 19:29:57
Problema Plantatie Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
#include <fstream>
#include <iostream>
using namespace std;
ifstream in ("plantatie.in");
ofstream out ("plantatie.out");

const int kNMax = 550, kLgMax = 14;
int n, Q, dp[kNMax][kNMax][kLgMax], lg[kNMax];
int main() {
    int i, j, k, q;
    in >> n >> Q;
    for (i = 1; i <= n; ++i)
        for (j = 1; j <= n; ++j)
            in >> dp[i][j][0];
    for (i = 2; i <= n; ++i)
        lg[i] = lg[i / 2] + 1;
    for (k = 1; k <= lg[n]; ++k){
        q = 1 << (k-1);
        for (i = 1; i <= n; ++i)
            for (j = 1; j <= n; ++j)
                dp[i][j][k] = max (dp[i][j][k - 1], max (dp[i + q][j][k - 1], max (dp[i][j + q][k - 1], dp[i + q][j + q][k - 1])));
    }
    int x, y, l, llog;
    for (i = 1; i <= Q; ++i) {
        in >> x >> y >> l;
        llog = lg[l];
        q = (1 << llog);
        out << max (dp[x][y][llog], max (dp[x + l - q][y][llog], max (dp[x][y + l - q][llog], dp[x + l - q][y + l - q][llog]))) << '\n';
    }
    in.close();
    out.close();
    return 0;
}