Cod sursa(job #2626382)

Utilizator andreea.vasilescuAndreea Vasilescu andreea.vasilescu Data 6 iunie 2020 14:03:51
Problema Plantatie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.07 kb
	
#include <bits/stdc++.h>
using namespace std;
#define N 503
ifstream fin ("plantatie.in");
ofstream fout ("plantatie.out");
int rmq [N][N][13], v [N][N];
int n, m, k, l, x, y, L;
int main (){
    fin >> n >> m;
    for (int i = 1; i <= n; i ++)
        for (int j = 1; j <= n; j ++)
            fin >> v [i][j];
    for (int i = 1; i <= n; i ++)
        for (int j = 1; j <= n; j ++)
            rmq [i][j][0] = v [i][j];
    for (int k = 1; (1 << k) <= n; k ++)
        for (int i = n - (1 << k) + 1; i >= 1; i --)
            for (int j = n - (1 << k) + 1; j >= 1; j --)
                rmq [i][j][k] = max (max (rmq [i][j][k - 1], rmq [i + (1 << (k - 1))][j][k - 1]),
                                     max (rmq [i][j + (1 << (k - 1))][k - 1], rmq [i + (1 << (k - 1))][j + (1 << (k - 1))][k - 1]));
    for (int i = 0; i < m; i ++){
        fin >> x >> y >> L;
        l = log2 (L);
        fout << max (max (rmq [x][y][l], rmq [x + L - (1 << l)][y][l]), max (rmq [x][y + L - (1 << l)][l], rmq [x + L - (1 << l)][y + L - (1 << l)][l])) << '\n';
    }
    return 0;
}