Cod sursa(job #2847075)

Utilizator BlueLuca888Girbovan Robert Luca BlueLuca888 Data 10 februarie 2022 10:22:41
Problema Plantatie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.26 kb
#define boostIO ios_base::sync_with_stdio(false); fin.tie(nullptr); fout.tie(nullptr);
#pragma GCC optimize ("Ofast")
#include <bits/stdc++.h>

using namespace std;

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

const int MAX_N = 505;

int lg2[MAX_N];
int rmq[MAX_N][MAX_N][10];
int n;
int q, x, y, xx, yy, l;

int main (){
    boostIO

    lg2[0] = lg2[1] = 0;
    for(int i=2; i<=500; i++)
        lg2[i] = lg2[(i>>1)] + 1;

    fin>>n>>q;
    for(int i=1; i<=n; i++)
        for(int j=1; j<=n; j++)
            fin>>rmq[i][j][0];

    for(int k=1; k<=lg2[n]; k++)
        for(int i=1; i+(1<<k)-1 <= n; i++)
            for(int j=1; j+(1<<k)-1 <= n; j++)
                rmq[i][j][k] = max({
                    rmq[i][j][k-1],
                    rmq[i][j+(1<<(k-1))][k-1],
                    rmq[i+(1<<(k-1))][j][k-1],
                    rmq[i+(1<<(k-1))][j+(1<<(k-1))][k-1]
                });

    while(q--){
        fin>>x>>y>>l;
        xx = x + l - (1 << lg2[l]);
        yy = y + l - (1 << lg2[l]);
        fout<<max({
            rmq[x][y][ lg2[l] ],
            rmq[x][yy][ lg2[l] ],
            rmq[xx][y][ lg2[l] ],
            rmq[xx][yy][ lg2[l] ]
        });
        fout<<"\n";
    }
    return 0;
}