Cod sursa(job #3211679)

Utilizator profinfo114Prof Info profinfo114 Data 9 martie 2024 23:33:15
Problema Plantatie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.23 kb
#include <bits/stdc++.h>
using namespace std;
const int LMAX = 11;
const int NMAX = 502;
int n,q,v[NMAX][NMAX],rmq[LMAX][NMAX][NMAX];

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

int max(int a, int b, int c, int d){
    return max(a, max(b, max(c, d)));
}

int main()
{
    fin >> n >> q;
    for(int i = 1; i <= n; i++){
        for(int j = 1; j <= n; j++){
            fin >> v[i][j];
            rmq[0][i][j] = v[i][j];
        }
    }
    for(int k = 1; k < LMAX; k++){
        for(int i = 1; i+(1<<(k-1)) <= n; i++){
            for(int j = 1; j+(1<<(k-1)) <= n; j++){
                rmq[k][i][j] = max(rmq[k-1][i][j], rmq[k-1][i+(1<<(k-1))][j],
                                   rmq[k-1][i][j+(1<<(k-1))], rmq[k-1][i+(1<<(k-1))][j+(1<<(k-1))]);
            }
        }
    }
    auto query = [&](int x, int y, int lat) -> int {
        int lg = __lg(lat);
        int xf = x+lat-1;
        int yf = y+lat-1;
        return max(rmq[lg][x][y], rmq[lg][xf-(1<<lg)+1][y], rmq[lg][x][yf-(1<<lg)+1],
                   rmq[lg][xf-(1<<lg)+1][yf-(1<<lg)+1]);
    };
    while(q--){
        int x, y, lat;
        fin >> x >> y >> lat;
        fout << query(x, y, lat) << "\n";
    }
    return 0;
}