Cod sursa(job #3219771)

Utilizator ililogIlinca ililog Data 1 aprilie 2024 10:06:46
Problema Plantatie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.23 kb
using namespace std;
#include<iostream>
#include<fstream>
#include<vector>
#include<queue>

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

int n, Q;
int rmq[10][501][501];
int i1, j1, i2, j2;
int L;
int exp[501];

int main() {
    
    fin >> n >> Q;
    for (int i = 1; i<=n; i++) {
        for (int j = 1; j<=n; j++) {
            fin >> rmq[0][i][j];
        }
    }
    
    for (int p = 1, lat = 2; lat <= n; p++, lat*= 2) {
        for (i1 = 1; i1<=n-lat+1; i1++) {
            for (j1 = 1; j1<=n-lat+1; j1++) {
                i2 = i1 + lat/2;
                j2 = j1 + lat/2;
                rmq[p][i1][j1] = max(max(rmq[p-1][i1][j1], rmq[p-1][i2][j1]), 
                                     max(rmq[p-1][i1][j2], rmq[p-1][i2][j2]));
            }
        }
    }
    
    exp[1] = 0;
    for (int i = 2; i<=n; i++) {
        exp[i] = 1 + exp[i/2];
    }
    
    while (Q--) {
        fin >> i1 >> j1 >> L;
        int e = exp[L];
        int p = (1 << e);
        
        i2 = i1 + L - p;
        j2 = j1 + L - p;
        
        fout << max(max(rmq[e][i1][j1], rmq[e][i1][j2]), 
                    max(rmq[e][i2][j1], rmq[e][i2][j2])) << '\n';
    }
    
    return 0;
}