Cod sursa(job #3164547)

Utilizator gianiferSpita Alexandru-Mihai gianifer Data 3 noiembrie 2023 16:48:32
Problema Plantatie Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.28 kb
#include <bits/stdc++.h>

using namespace std;

ifstream fin("plantatie.in");

ofstream fout("plantatie.out");

int r[10][512][512];

int E[512];

int n, m;

int x1, y1;

int main()
{
    fin >> n >> m;
    for (int i = 1; i <= n; i++)
        {for (int j = 1; j <= n; j++)
        {
            fin >> r[0][i][j];
        fout<<r[0][i][j]<<" ";
        }
        fout<<'\n';
        }
    for (int p = 1, putere = 2; putere <= n; p++, putere*=2)
        for (int i1 = 1; i1 <= n-putere+1; i1++)
            for (int j1 = 1; j1 <= n-putere+1; j1++)
            {
                int i2 = i1 + (putere>>1);
                int j2 = j1 + (putere>>1);
                r[p][i1][j1] = max(max(r[p - 1][i1][j1], r[p - 1][i1][j2]),
                                   max(r[p - 1][i2][j1], r[p - 1][i2][j2]));
            }
    E[1] = 0;
    for (int i = 2; i <= n; i++)
    {
        E[i] = 1 + E[i / 2];
    }
    for (int i = 1; i <= m; i++)
    {
        int lat;
        fin >> x1 >> y1 >> lat;
        int e = E[lat];
        int dist = (1 << e);
        int x2 = x1 + lat - dist;
        int y2 = y1 + lat - dist;
        fout << max(max(r[e][x1][y1], r[e][x1][y2]),
                    max(r[e][x2][y1], r[e][x2][y2])
                    )<<'\n';
    }
}