Cod sursa(job #3137613)

Utilizator Radu_MocanasuMocanasu Radu Radu_Mocanasu Data 13 iunie 2023 21:56:52
Problema Plantatie Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.08 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin("plantatie.in");
ofstream fout("plantatie.out");
int t[505][505][10];
int a[505][505];
void preprocess(int n){
    for(int i = 1; i <= n; i++){
        for(int j = 1; j <= n; j++) t[i][j][0] = a[i][j];
    }
    for(int k = 1; (1 << k) <= n; k++){
        for(int i = 1; i + (1 << k) - 1 <= n; i++){
            for(int j = 1; j + (1 << k) - 1 <= n; j++)
                t[i][j][k] = max(max(t[i][j][k - 1], t[i + (1 << (k - 1))][j + (1 << (k - 1))][k - 1]), max(t[i + (1 << (k - 1))][j][k - 1], t[i][j + (1 << (k - 1))][k - 1]));
        }
    }

}
int rmq(int i, int j, int k){
    int l = log2(k);
    return max(max(t[i][j][l], t[i + k - (1 << l)][j + k - (1 << l)][l]), max(t[i + k - (1 << l)][j][l], t[i][j + k + (1 << l)][l]));
}
int main()
{
    int n,m,i,j,x,y,k;
    fin >> n >> m;
    for(i = 1; i <= n; i++){
        for(j = 1; j <= n; j++) fin >> a[i][j];
    }
    preprocess(n);
    for(i = 1; i <= m; i++){
        fin >> x >> y >> k;
        fout << rmq(x,y,k) << "\n";
    }
    return 0;
}