Cod sursa(job #2902009)

Utilizator a.dulumanDuluman Andrada-Georgiana a.duluman Data 15 mai 2022 02:17:38
Problema Plantatie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.26 kb
#include <iostream>
#include <fstream>
#define N 505
#define L 9

using namespace std;

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

int rmq[L][N][N];
int log_d[N];

int maxim4(int a, int b, int c, int d)
{
    return max(max(a, b), max(c, d));
}

int main()
{
    int n, m, x, i, j, k, l, log, lat;
    fin >> n >> m;
    
    log_d[1] = 0;
    for(i = 2; i <= n; i++)
        log_d[i] = 1 + log_d[i / 2];

    for(i = 1; i <= n; i++)
        for(j = 1; j <= n; j++)
            {
                fin >> x;
                rmq[0][i][j] = x;
            }
    
    for(log = 1; (1 << log) <= n; log++)
        for(i = (1 << log); i <= n; i++)
            for(j = (1 << log); j <= n; j++)
            {
                int lat = (1 << (log - 1));
                rmq[log][i][j] = maxim4(rmq[log - 1][i - lat][j - lat], rmq[log - 1][i - lat][j],
                    rmq[log - 1][i][j - lat], rmq[log - 1][i][j]);
            }
 
    for(k = 1; k <= m; k++)
    {
        fin >> i >> j >> lat;
        //mutam (i,j) in coltul dreapta jos 
        i += lat - 1;
        j += lat - 1;
        int e = log_d[lat];
        lat -= (1 << e);
        fout << maxim4(rmq[e][i - lat][j - lat], rmq[e][i - lat][j], rmq[e][i][j - lat], rmq[e][i][j]) << "\n";
    }
    return 0;
}