Cod sursa(job #3249436)

Utilizator Luca_CristianZamfir Luca-Cristian Luca_Cristian Data 16 octombrie 2024 12:37:25
Problema Plantatie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.16 kb
#include <fstream>
#include <vector>

using namespace std;


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

const int NMAX = 502, LOGMAX = 9;
int rmq[LOGMAX][NMAX][NMAX];
int log2[NMAX];

int main()
{
    int n, m, i, j, k;

    fin >> n >> m;
    log2[1] = 0;
    for(i = 2; i <= n; i++)
        log2[i] = log2[i / 2] + 1;

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

    for(k = 1; k <= log2[n]; k++)
    {
        int lat = (1 << k);
        for(i = 1; i <= n - lat + 1; i++)
        {
            for(j = 1; j <= n - lat + 1; j++)
            {
                int i2 = i + lat / 2, j2 = j + lat / 2;
                rmq[k][i][j] = max(rmq[k - 1][i][j], max(rmq[k - 1][i2][j], max(rmq[k - 1][i][j2], rmq[k - 1][i2][j2])));
            }
        }
    }

    for(k = 1; k <= m; k++)
    {
        int lat;
        fin >> i >> j >> lat;
        int put = log2[lat], i2 = (i + lat - 1) - (1 << put) + 1, j2 = (j + lat - 1) - (1 << put) + 1;
        fout << max(rmq[put][i][j], max(rmq[put][i2][j2], max(rmq[put][i][j2], rmq[put][i2][j]))) << '\n';
    }


    return 0;
}