Cod sursa(job #2905741)

Utilizator BluThund3rRadu George BluThund3r Data 23 mai 2022 15:07:30
Problema Plantatie Scor 50
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.32 kb
#include <fstream>
#include <iostream>
using namespace std;
ifstream in("plantatie.in");
ofstream out("plantatie.out");

const int Nmax = 500;
int log2[Nmax], n, m, teren[Nmax][Nmax], a[Nmax][Nmax][Nmax];

int main() {
    in >> n >> m;
    for(int i = 1; i <= n; ++ i)
        for(int j = 1; j <= n; ++ j)
            in >> teren[i][j];

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

    for(int i = 1; i <= n; ++ i)
        for(int j = 1; j <= n; ++ j)
            a[0][i][j] = teren[i][j];

    for(int k = 1; (1 << k) <= n; ++ k)
        for(int i = 1; i <= n - (1 << k) + 1; ++ i)
            for(int j = 1; j <= n - (1 << k) + 1; ++ 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 k = 0; (1 << k) <= n; ++ k)
//        for(int i = 1; i <= n - (1 << k) + 1; ++ i)
//            for(int j = 1; j <= n - (1 << k) + 1; ++ j)
//                cout << a[k][i][j] << ' ';


    int i, j, k, p, result;
    while(m --) {
        in >> i >> j >> k;
        p = log2[k];
        result = max(max(a[p][i][j], a[p][i][j + k - (1 << p)]), max(a[p][i + k - (1 << p)][j], a[p][i + k - (1 << p)][j + k - (1 << p)]));
        out << result << '\n';
    }
//

    return 0;
}