Cod sursa(job #3213818)

Utilizator BledeaAlexBledea Alexandru BledeaAlex Data 13 martie 2024 14:52:32
Problema Plantatie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.31 kb
#include <iostream>
#include <fstream>
#include <algorithm>

using namespace std;

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

const int N_MAX = 505, LOG = 10;
int n, q;
int E[N_MAX];
int m[LOG][N_MAX][N_MAX];

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

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

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

    for(int p = 1, len = 2; len <= n; ++p, len <<= 1)
        for(int i1 = 1, i2; i1 <= n - len + 1; ++i1)
            for(int j1 = 1, j2; j1 <= n - len + 1; ++j1){
                i2 = i1 + (len >> 1);
                j2 = j1 + (len >> 1);
                m[p][i1][j1] = max({m[p-1][i1][j1],
                                    m[p-1][i2][j1],
                                    m[p-1][i1][j2],
                                    m[p-1][i2][j2]
                                   });
            }

    int i1, j1, i2, j2, L, len, e;
    while(q--){
        f >> i1 >> j1 >> L;

        e = E[L];
        len = (1 << e);

        i2 = i1 + L - len;
        j2 = j1 + L - len;

        g << max({m[e][i1][j1],
                  m[e][i2][j1],
                  m[e][i1][j2],
                  m[e][i2][j2]
                 }) << '\n';
    }

    return 0;
}