Cod sursa(job #2849857)

Utilizator wav_uuwRares Paul wav_uuw Data 15 februarie 2022 21:16:53
Problema Plantatie Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.19 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];
        }
    }
    
    for (int e = 1; (1 << e) <= n; e++)
        for (int i = (1 << e); i <= n; i++)
            for (int j = (1 << e); j <= n; j++)
            {
                int lat = (1 << (e - 1));
                rmq[e][i][j] = max4(rmq[e - 1][i - lat][j - lat], rmq[e - 1][i - lat][j],
                                    rmq[e - 1][i][j - lat], rmq[e - 1][i][j]);
            }

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

    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;

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

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