Cod sursa(job #2917805)

Utilizator ArseniuVictorStefanArseniu Victor Stefan ArseniuVictorStefan Data 7 august 2022 18:58:48
Problema Plantatie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.43 kb
#include <fstream>
#include <initializer_list>

using namespace std;

constexpr inline int lg(int n)
{
    return 31 - __builtin_clz(n);
}

template<typename _Tp>
constexpr _Tp max(initializer_list<_Tp> a_args)
{
    _Tp r = *a_args.begin();
    for(auto it = a_args.begin() + 1; it != a_args.end(); it++)
        r = max(r, *it);
    return r;
}

const int NMAX = 500, MMAX = 75000;

int n, m, x, y, k;
int rmq[lg(NMAX) + 1][NMAX][NMAX];

int main()
{
    ifstream cin("plantatie.in");
    ofstream cout("plantatie.out");

    cin >> n >> m;
    for(int i = 0; i < n; i++)
        for(int j = 0; j < n; j++)
            cin >> rmq[0][i][j];
    for(int h = 1; (1 << h) <= n; h++)
        for(int i = 0; i + (1 << h) - 1 < n; i++)
            for(int j = 0; j + (1 << h) - 1 < n; j++)
                rmq[h][i][j] = max({rmq[h - 1][i][j],
                                    rmq[h - 1][i + (1 << (h - 1))][j],
                                    rmq[h - 1][i][j + (1 << (h - 1))],
                                    rmq[h - 1][i + (1 << (h - 1))][j + (1 << (h - 1))]});
    for(int i = 0; i < m; i++)
    {
        cin >> x >> y >> k;
        x--; y--;
        int lgc = lg(k);
        cout << max({rmq[lgc][x][y],
                     rmq[lgc][x + k - (1 << lgc)][y],
                     rmq[lgc][x][y + k - (1 << lgc)],
                     rmq[lgc][x + k - (1 << lgc)][y + k - (1 << lgc)]}) << '\n';
    }
}