Cod sursa(job #3158594)

Utilizator Deleanu_LucaDeleanu Luca Deleanu_Luca Data 19 octombrie 2023 10:16:07
Problema Plantatie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.27 kb
#include <bits/stdc++.h>
#define NMAX 512
#define LMAX 10

using namespace std;

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

int rmq[LMAX][NMAX][NMAX],n,m,x,y,lat;

void build_RMQ();

int main()
{
    int i,j,k,lg;

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

    build_RMQ();

    for(k=1; k<=m; k++)
    {
        fin>>x>>y>>lat;
        int xf=x+lat-1,
            yf=y+lat-1;

        lg=1;
        i=0;

        while(lg<=lat)
        {
            lg*=2;
            i++;
        }
        lg/=2;
        i--;
        int r=max(max(rmq[i][x][y],
                      rmq[i][x][yf-lg+1]),
                  max(rmq[i][xf-lg+1][y],
                  rmq[i][xf-lg+1][yf-lg+1]));

        fout<<r<<'\n';
    }

    return 0;
}

void build_RMQ()
{
    int i,j,k,lg;
    for(k=1,lg=2; lg<=n; k++,lg*=2)
        for(i=1; i+lg-1<=n; i++)
            for(j=1; j+lg-1<=n; j++)
            {
                int i1=i+lg/2, j1=j+lg/2;
                rmq[k][i][j]=max(max(rmq[k-1][i][j],
                                     rmq[k-1][i][j1]),
                                 max(rmq[k-1][i1][j],
                                     rmq[k-1][i1][j1]));
            }
}