Cod sursa(job #2166698)

Utilizator RazorBestPricop Razvan Marius RazorBest Data 13 martie 2018 18:28:31
Problema Plantatie Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.2 kb
#include <fstream>
using namespace std;

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

int n, m, a[500][500][11];
int put[64];

void pre()
{
    int k = 0, i;

    for (i = 1; i <= n; i <<= 1)
    {
        put[k++] = i;
        for (int j1 = 0; j1 + i - 1 < n; j1++)
            for (int j2 = 0; j2 + i - 1 < n; j2++)
            {
                int mx = a[j1][j2][k - 1];
                mx = max(mx, a[j1 + i][j2][k - 1]);
                mx = max(mx, a[j1][j2 + i][k - 1]);
                mx = max(mx, a[j1 + i][j2 + i][k - 1]);
                a[j1][j2][k] = mx;
            }
    }
    put[k] = i;
}

int query(int x, int y, int l)
{
    int k = 0, mx = 0, p;
    while (put[k + 1] <= l) k++;

    p = put[k];

    mx = a[x][y][k];
    mx = max(mx, a[x][y + l - p][k]);
    mx = max(mx, a[x + l - p][y][k]);
    mx = max(mx, a[x + + l - p][y + l - p][k]);

    return mx;
}

int main()
{
    int x, y, l;

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

    pre();

    while (m--)
    {
        fin >> x >> y >> l;
        fout << query(x - 1, y - 1, l) << '\n';
    }
}