Cod sursa(job #2766787)

Utilizator Botnaru_VictorBotnaru Victor Botnaru_Victor Data 3 august 2021 12:30:35
Problema Plantatie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.25 kb
#include <bits/stdc++.h>
#define nmax 502
using namespace std;

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

int rmq[nmax][nmax][10],n,lg[nmax],m;

void runLog()
{
    lg[1]=0;
    for(int i=2;i<nmax;i++)
    {
        lg[i]=lg[i/2]+1;
    }
}

void runRmq()
{

    for(int k=1;(1<<k)<=n;k++)
    {
        for(int i=1;i<=n-(1<<k)+1;i++)
        {
            for(int j=1;j<=n-(1<<k)+1;j++)
            {
                int dif=1<<(k-1);
                rmq[i][j][k]=max(max(rmq[i][j][k-1],rmq[i][j+dif][k-1]),
                                 max(rmq[i+dif][j][k-1],rmq[i+dif][j+dif][k-1]));
                //out<<rmq[i][j][k]<<' ';
            }
            //out<<'\n';
        }
        //out<<'\n';
    }

}

int getMax(int a,int b,int k)
{
    int l=lg[k];
    int dif=k-(1<<l);
    return max(max(rmq[a][b][l],rmq[a][b+dif][l]),
               max(rmq[a+dif][b][l],rmq[a+dif][b+dif][l]));
}

int main()
{
    in>>n>>m;
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=n;j++)
        {
            in>>rmq[i][j][0];
        }
    }
    runLog();
    runRmq();
    for(int i=0;i<m;i++)
    {
        int a,b,k;
        in>>a>>b>>k;
        out<<getMax(a,b,k)<<'\n';
    }
    return 0;
}