Cod sursa(job #2851096)

Utilizator _andrei4567Stan Andrei _andrei4567 Data 18 februarie 2022 09:03:19
Problema Plantatie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.22 kb
#include <fstream>
#include <algorithm>

using namespace std;

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

const int N = 505;
int r[N][N][N];
int l[N];
static inline int mx (int a, int b, int  c, int  d)
{
    return max(max(a, b), max(c, d));
}

int main()
{
    int n, m, x, y, lat1;
    cin >> n >> m;
    for (int i = 2; i <= n; ++i)
        l[i] = 1 + l[i >> 1];
    for (int i = 1; i <= n; ++i)
    {
        for (int j = 1; j <= n; ++j)
        {
            cin >> r[0][i][j];
        }
    }
    for (int  p = 1; (1 << p) <= n; ++p)
    {
        for (int i = 1; i <= n; ++i)
        {
            for (int j = 1; j <= n; ++j)
            {
                int lat = (1 << (p - 1));
                r[p][i][j] = mx(r[p - 1][i][j], r[p - 1][i - lat][j], r[p - 1][i][j - lat], r[p - 1][i - lat][j - lat]);
            }
        }
    }
    for (; m; --m)
    {
        cin >> x >> y >> lat1;
        x += lat1 - 1;
        y += lat1 - 1;
        int lat2 = l[lat1];
        int lat3 = (1 << lat2);
        cout << mx (r[lat2][x][y], r[lat2][x - lat1 + lat3][y], r[lat2][x - lat1 + lat3][y - lat1 + lat3], r[lat2][x][y - lat1 + lat3]) << '\n';

    }
    return 0;
}