Cod sursa(job #3224112)

Utilizator aeru1Ianos Alex-Marian aeru1 Data 14 aprilie 2024 19:07:45
Problema Plantatie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.25 kb
#include <bits/stdc++.h>

using namespace std;

#define TITLE "plantatie"
#define ll long long
#define MOD 1000000000

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

int r[11][503][503];

void solve()
{
    int n,q;
    f>>n>>q;
    for(int i=1; i<=n; i++)
    {
        for(int j=1; j<=n; j++)
            f>>r[0][i][j];
    }
    int help=31-__builtin_clz(n);
    for(int k=1; k<=help; k++)
    {
        int pow2=(1<<(k-1));
        int temp=(1<<k);
        for(int i=n-temp+1; i>0; i--)
        {
            for(int j=n-temp+1; j>0; j--)
            {
                r[k][i][j]=r[k-1][i][j];
                r[k][i][j]=max(r[k][i][j],r[k-1][i+pow2][j]);
                r[k][i][j]=max(r[k][i][j],r[k-1][i][j+pow2]);
                r[k][i][j]=max(r[k][i][j],r[k-1][i+pow2][j+pow2]);
            }
        }
    }

    while(q--)
    {
        int i,j,k;
        f>>i>>j>>k;
        int lg=31-__builtin_clz(k);
        int pow2=(1<<lg);
        pow2=k-pow2;
        int answer=r[lg][i][j];
        answer=max(answer,r[lg][i+pow2][j]);
        answer=max(answer,r[lg][i+pow2][j+pow2]);
        answer=max(answer,r[lg][i][j+pow2]);
        g<<answer<<'\n';
    }
}


int main()
{
    solve();
    return 0;
}