Cod sursa(job #2777478)

Utilizator Emilia23Dobra Emilia Emilia23 Data 23 septembrie 2021 14:59:59
Problema Plantatie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.99 kb
//rmq 2D

#include <bits/stdc++.h>

using namespace std;

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

int a[10][505][505],n,m,l,c,k;

void init()
{
    f>>n>>m;

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

void precalculare()
{
    int x=2,y=1;
    while(x<=n)
    {
        for(int i=1; i<=n-x+1; i++)
            for(int j=1; j<=n-x+1; j++)
            {
               a[y][i][j]=max(a[y-1][i][j],max(a[y-1][i+x/2][j+x/2],max(a[y-1][i][j+x/2],a[y-1][i+x/2][j])));
            }
        x*=2;
        y++;
    }
}

void calcul()
{
    precalculare();

    for(int i=1;i<=m;i++)
    {
        f>>l>>c>>k;

        int x=1,y=0,sol;

        while(x<=k)
        {
            x*=2;
            y++;
        }
        x/=2;
        y--;

        sol=max(a[y][l][c],max(a[y][l+k-x][c+k-x],max(a[y][l+k-x][c],a[y][l][c+k-x])));
        g<<sol<<'\n';
    }
}

int main()
{
    init();
    calcul();
}