Cod sursa(job #2675146)

Utilizator Cosmin2004_InfoMoldoveanu Cosmin Cosmin2004_Info Data 21 noiembrie 2020 10:38:24
Problema Plantatie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.04 kb
#include <cstdio>
#include <cmath>
#include <algorithm>

using namespace std;
const int NMAX = 505;
const int LOGNMAX = 11;
int n;
int a[LOGNMAX][NMAX][NMAX];

int main()
{
    freopen("plantatie.in", "r", stdin);
    freopen("plantatie.out", "w", stdout);
    int m, x, y, k, dist;
    scanf("%d%d", &n, &m);
    for(int i = 1; i <= n; i++)
        for(int j = 1; j <= n; j++)
            scanf("%d", &a[0][i][j]);
    for(int i = 1; i <= (int)log2(n); i++)
        for(int j = 1; j <= n - (1 << i) + 1; j++)
            for(int k = 1; k <= n - (1 << i) + 1; ++k)
                a[i][j][k] = max(a[i - 1][j][k], max(a[i - 1][j + (1 << (i - 1))][k], max(a[i - 1][j][k + (1 << (i - 1))], a[i - 1][j + (1 << (i - 1))][k + (1 << (i - 1))])));
    for(int i = 1; i <= m; i++)
    {
        scanf("%d%d%d", &x, &y, &k);
        dist = (int)log2(k);
        printf("%d\n", max(a[dist][x][y], max(a[dist][x + k - (1 << dist)][y], max(a[dist][x][y + k - (1 << dist)], a[dist][x + k - (1 << dist)][y + k - (1 << dist)]))));
    }
    return 0;
}