Cod sursa(job #1849152)

Utilizator zdavid112zIon David-Gabriel zdavid112z Data 17 ianuarie 2017 08:31:36
Problema Plantatie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 kb
#include <cstdio>
#include <algorithm>
#define BIT(x) (1<<(x))

using namespace std;

int mat[500][500][10];
int n, m;

int main()
{
    int i, j, k, l;
    freopen("plantatie.in", "r", stdin);
    freopen("plantatie.out", "w", stdout);
    scanf("%d%d", &n, &m);
    for(i = 0; i < n; i++)
        for(j = 0; j < n; j++)
            scanf("%d", &mat[i][j][0]);

    for(i = 1; BIT(i) <= n; i++)
    {
        for(j = 0; j <= n - BIT(i); j++)
        {
            for(k = 0; k <= n - BIT(i); k++)
            {
                mat[j][k][i] = max(max(mat[j][k][i - 1], mat[j + BIT(i - 1)][k][i - 1]),
                                   max(mat[j][k + BIT(i - 1)][i - 1], mat[j + BIT(i - 1)][k + BIT(i - 1)][i - 1]));
            }
        }
    }
    while(m--)
    {
        scanf("%d%d%d", &i, &j, &k);
        i--; j--;
        for(l = 30; BIT(l) > k; l--);
        int rez = max(max(mat[i][j][l], mat[i + k - BIT(l)][j][l]),
                      max(mat[i][j + k - BIT(l)][l], mat[i + k - BIT(l)][j + k - BIT(l)][l]));
        printf("%d\n", rez);
    }
    return 0;
}