Cod sursa(job #3233879)

Utilizator Bubu_OrangeAlin Lupau Bubu_Orange Data 5 iunie 2024 12:13:15
Problema Plantatie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.13 kb
#include<bits/stdc++.h>

using namespace std;

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

int n, m, x, y, len;
int r[10][505][505];
int lg[505];

int main(){
    lg[1]=0;
    for(int i=2; i<=500; i++){
        lg[i]=lg[i/2]+1;
    }
    in>>n>>m;
    for(int i=1; i<=n; i++){
        for(int j=1; j<=n; j++){
            in>>r[0][i][j];
        }
    }
    int lat=1;
    for(int k=1; k<=lg[n]; k++){
        lat*=2;
        for(int i=1; i<=n-lat+1; i++){
            for(int j=1; j<=n-lat+1; j++){
                int i2=i+lat/2;
                int j2=j+lat/2;
                r[k][i][j]=max(r[k-1][i][j],
                            max(r[k-1][i][j2],
                            max(r[k-1][i2][j],
                            r[k-1][i2][j2])));
            }
        }
    }
    for(int i=1; i<=m; i++){
        in>>x>>y>>len;
        int k=lg[len];
        int x2=x+len-(1<<k);
        int y2=y+len-(1<<k);
        int mx=max(r[k][x][y],
                max(r[k][x][y2],
                max(r[k][x2][y],
                r[k][x2][y2])));
        out<<mx<<'\n';
    }
    return 0;
}