Cod sursa(job #2347122)

Utilizator niculaandreiNicula Andrei Bogdan niculaandrei Data 18 februarie 2019 15:08:43
Problema Plantatie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.16 kb
#include <bits/stdc++.h>

using namespace std;

ifstream fin("plantatie.in");
ofstream fout("plantatie.out");

int N, Q, RMQ[501][501][11], lg[501], x, y, l, d, mx;

int main()
{
    fin >> N >> Q;
    for (int i = 1; i <= N; i++)
        for (int j = 1; j <= N; j++)
            fin >> RMQ[i][j][0];
    for (int i = 2; i <= N; i++)
        lg[i] = lg[i / 2] + 1;
    for (int k = 1; k <= lg[N] + 1; k++)
    {
        for (int i = 1; i <= N; i++)
        {
            for (int j = 1; j <= N; j++)
            {
                int j2 = min(N, j + (1 << (k - 1)));
                int i2 = min(N, i + (1 << (k - 1)));
                RMQ[i][j][k] = max(RMQ[i][j][k - 1], RMQ[i][j2][k - 1]);
                RMQ[i][j][k] = max(RMQ[i][j][k], RMQ[i2][j][k - 1]);
                RMQ[i][j][k] = max(RMQ[i][j][k], RMQ[i2][j2][k - 1]);
            }
        }
    }
    while (Q--)
    {
        fin >> x >> y >> l;
        d = l - (1 << lg[l]);
        mx = max(RMQ[x][y][lg[l]], RMQ[x + d][y][lg[l]]);
        mx = max(mx, RMQ[x][y + d][lg[l]]);
        mx = max(mx, RMQ[x + d][y + d][lg[l]]);
        fout << mx << "\n";
    }
    return 0;
}