Cod sursa(job #2866121)

Utilizator FastmateiMatei Mocanu Fastmatei Data 9 martie 2022 13:07:01
Problema Plantatie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.09 kb
#include <bits/stdc++.h>

using namespace std;

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

int rmq[9][505][505];
int e[100005];
int n,m;
int a[505][505];

/**
rmq[i][j][k]
i-1
j,k
j+1,k+1
j+1,k
j,k+1

*/

int main()
{
    fin>>n>>m;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
            fin>>a[i][j];
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
            rmq[0][i][j]=a[i][j];
    for(int i=2;i<=n;i++)
        e[i]=e[i/2]+1;
    for(int i=1;i<=e[n];i++)
        for(int j=1;j<=n-(1<<i)+1;j++)
            for(int k=1;k<=n-(1<<i)+1;k++)
                rmq[i][j][k]=max({rmq[i-1][j][k],rmq[i-1][j][k+(1<<(i-1))],
                                  rmq[i-1][j+(1<<(i-1))][k],rmq[i-1][j+(1<<(i-1))][k+(1<<(i-1))]});
    while(m--)
    {
        int x,y,sz;
        fin>>x>>y>>sz;
        int dx=x+sz-1;
        int dy=y+sz-1;
        fout<<max({rmq[e[sz]][x][y],rmq[e[sz]][dx-(1<<e[sz])+1][y],
                   rmq[e[sz]][x][dy-(1<<e[sz])+1],rmq[e[sz]][dx-(1<<e[sz])+1][dy-(1<<e[sz])+1]})<<"\n";
    }
    return 0;
}