Cod sursa(job #2849850)

Utilizator wav_uuwRares Paul wav_uuw Data 15 februarie 2022 21:02:36
Problema Plantatie Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.13 kb
#include <fstream>
#include <algorithm>

using namespace std;

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

int rmq[9][501][501], lg[501];

int max4(int a, int b, int c, int d)
{
    return max(max(a, b), max(c, d));
}

int main()
{
    int n, m;
    f >> n >> m;

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

        if (i > 1)
            lg[i] = 1 + lg[i/2];
    }
    
    for (int e = 1; e <= lg[n]; e++)
        for (int i = (1 << e); i <= n; i++)
            for (int j = (1 << e); j <= n; j++)
                rmq[e][i][j] = max4(rmq[e - 1][i - (1 << (e - 1))][j - (1 << (e - 1))], rmq[e - 1][i - (1 << (e - 1))][j],
                                    rmq[e - 1][i][j - (1 << (e - 1))], rmq[e - 1][i][j]);

    int l, c, lat, p, e;
    for (int i = 1; i <= m; i++)
    {
        f >> l >> c >> lat;

        e = lg[lat];
        p = 1 << (e - 1);

        l += lat - 1;
        c += lat - 1;

        g << max4(rmq[e][l - lat + p][c - lat + p], rmq[e][l - lat + p][c], rmq[e][l][c - lat + p], rmq[e][l][c]) << '\n';
    }

    f.close();
    g.close();
    return 0;
}