Cod sursa(job #3355971)

Utilizator matei__bBenchea Matei matei__b Data 28 mai 2026 04:13:13
Problema Plantatie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.33 kb
/*


*/

#include <fstream>
#include <cmath>

const int NMAX=508;

int n,q;
int rmq[20][NMAX][NMAX];
int lg[NMAX];

int query(int x,int y,int k) {
    int sh=k-(1<<lg[k]);
    int ans=rmq[lg[k]][x][y];
    ans=std::max(ans,rmq[lg[k]][x+sh][y]);
    ans=std::max(ans,rmq[lg[k]][x+sh][y+sh]);
    ans=std::max(ans,rmq[lg[k]][x][y+sh]);
    return ans;
}   

int main() {

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

    std::ios_base::sync_with_stdio(false);
    fin.tie(nullptr);
    fout.tie(nullptr);

    fin >> n >> q;
    for(int i=1; i<=n; i++) {
        if(i>1) {
            lg[i]=1+lg[i/2];
        }
        for(int j=1; j<=n; j++) {
            fin >> rmq[0][i][j];
        }
    } 

    for(int put=1; (1<<put)<=n; put++) {
        for(int i=1; i<=n-(1<<put)+1; i++) {
            for(int j=1; j<=n-(1<<put)+1; j++) {
                int l(1<<(put-1));
                int ans=rmq[put-1][i][j];
                ans=std::max(ans,rmq[put-1][i+l][j]);
                ans=std::max(ans,rmq[put-1][i+l][j+l]);
                ans=std::max(ans,rmq[put-1][i][j+l]);
                rmq[put][i][j]=ans;
            }
        }
    }

    while(q--) {
        int x,y,k;
        fin >> x >> y >> k;
        fout << query(x,y,k) << '\n';
    }

    return 0;
}