Cod sursa(job #1505849)

Utilizator ancabdBadiu Anca ancabd Data 19 octombrie 2015 20:08:21
Problema Plantatie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.98 kb
#include <fstream>

using namespace std;

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

#define NMAX 501
#define LOGMAX 10

int n, m;
int a[NMAX], mat[LOGMAX][NMAX][NMAX];

int main()
{
    int q, i1, j1, k1, l, p;

    fin >> n >> m;

    for (int i = 1; i <= n; i++)
        for (int j = 1; j <= n; j++)
            fin >> mat[0][i][j];

    for (int i = 2; i <= n; i++) a[i] = 1 + a[i / 2];

    for (int k = 1; k <= a[n]; k++)
    {
        q = 1 << (k - 1);
        for (int i = 1; i <= n; i++)
            for (int j = 1; j <= n; j++)
                mat[k][i][j] = max(mat[k - 1][i][j], max(mat[k - 1][i][j + q], max(mat[k - 1][i + q][j], mat[k - 1][i + q][j + q])));
    }
    while (m)
    {
        fin >> i1 >> j1 >> k1;
        l = a[k1];
        p = (1 << l);
        fout << max(mat[l][i1][j1], max(mat[l][i1 + k1 - p][j1], max(mat[l][i1][j1 + k1 - p], mat[l][i1 + k1 - p][j1 + k1 - p]))) << '\n';
        m--;
    }
    return 0;
}