Cod sursa(job #2961597)

Utilizator LORDENVraja Luca LORDEN Data 6 ianuarie 2023 19:04:36
Problema Plantatie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.09 kb
#include "fstream"

using namespace std;

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

int n, m, rmq[502][502][9], a[502][502] ;

void preprocess()
{

    for (int i = 1 ; i <= n ; i ++)
        for (int j = 1 ; j <= n ; j ++)
            rmq[i][j][0] = a[i][j] ;
    for(int k = 1; (1 << k) <= 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],max(rmq[i + (1 << (k - 1))][j][k - 1],max(rmq[i][j+(1<<(k-1))][k-1],rmq[i+(1<<(k-1))][j+(1<<(k-1))][k-1]))) ;

}

int Query(int i,int j,int len)
{
    int k = __lg(len);
    return max(rmq[i][j][k],max(rmq[i + len - (1<<k)][j][k],max(rmq[i][j + len - (1<<k)][k],rmq[i + len - (1<<k)][j + len - (1<<k)][k])));
}

int main()
{

    int x, y, len ;

    cin >> n >> m ;

    for (int i = 1 ; i <= n ; i ++)
        for (int j = 1 ; j <= n ; j ++)
            cin >> a[i][j] ;

    preprocess() ;

    for (int i = 0; i < m; ++i) {
        cin >> x >> y >> len ;

        cout << Query (x, y, len) << '\n' ;

    }


    return 0 ;

}