Cod sursa(job #2825014)

Utilizator Paul281881818818181991919191881818Draghici Paul Paul281881818818181991919191881818 Data 3 ianuarie 2022 20:51:02
Problema Plantatie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.95 kb
#include<fstream>
#define N 502
using namespace std;
ifstream cin("plantatie.in");
ofstream cout("plantatie.out");
int R[12][N][N], Log[N+1], n, k;
void ConstructQuery(){
    for(int lg = 1; lg<=Log[n]; lg++){
        for(int i=1; i<=n-(1<<lg)+1; i++){
            for(int j=1; j<=n-(1<<lg)+1; j++){
                int z = (1<<(lg-1));
                R[lg][i][j] = max( max( R[lg-1][i][j], R[lg-1][i+z][j]), max(R[lg-1][i+z][j+z], R[lg-1][i][j+z])); 
            }
        }
    }
}
int main(){
    cin >> n >> k;
    
    for(int i=2; i<=n; i++){
        Log[i] = Log[i/2] + 1;
    }
    for(int i=1; i<=n; i++)
        for(int j=1; j<=n; j++)
            cin >> R[0][i][j];
    ConstructQuery();
    for(int i=1; i<=k; i++){
        int lt, x, y;
        cin >> x >> y >> lt;
        int sz = (1<<Log[lt]), mx;
        mx = max( max(R[Log[lt]][x][y],R[Log[lt]][x+lt-sz][y]), max(R[Log[lt]][x][y+lt-sz], R[Log[lt]][x+lt-sz][y+lt-sz]));

        cout << mx << "\n";
    }
}