Cod sursa(job #2606682)

Utilizator andrei20003Ionescu Andrei andrei20003 Data 28 aprilie 2020 11:32:10
Problema Plantatie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.79 kb
#include <bits/stdc++.h>

using namespace std;

int rmq[9][501][501];

int main()
{
    int n,m,k,i,r,j,l,cm,rMax;
    freopen("plantatie.in","r",stdin);
    freopen("plantatie.out","w",stdout);
    scanf("%d%d", &n, &m);
    cm=m;
    for (i=1;i<=n;i++)
        for (j=1;j<=n;j++)
            scanf("%d", &rmq[0][i][j]);
    rMax=log2(n);
    for (r=1,l=1;r<=rMax;r++,l*=2)
        for (i=1;i<=n-2*l+1;i++)
            for (j=1;j<=n-2*l+1;j++)
                rmq[r][i][j]=max(max(rmq[r-1][i][j],rmq[r-1][i+l][j]),max(rmq[r-1][i][j+l],rmq[r-1][i+l][j+l]));
    for (k=1;k<=cm;k++){
        scanf("%d%d%d", &i, &j, &l);
        r=log2(l);
        m=1<<r;
        printf("%d\n", max(max(rmq[r][i][j],rmq[r][i+l-m][j+l-m]),max(rmq[r][i+l-m][j],rmq[r][i][j+l-m])));
    }
    return 0;
}