Cod sursa(job #3236351)

Utilizator ItsHezovPahonie George Alessio ItsHezov Data 28 iunie 2024 09:39:47
Problema Plantatie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.16 kb
#include <fstream>
using namespace std;
ifstream cin("plantatie.in");
ofstream cout("plantatie.out");
const int N = 500;
int R[10][N+1][N+1],E[N+1];
int main()
{
    int n , m ;
    cin>>n>>m;
    for(int i = 1;i<=n;i++)
        for(int j = 1;j<=n;j++)
            cin>>R[0][i][j];
    for(int p = 1; (1<<p)<=n;p++)
    {
        for(int i = 1;i<=n;i++)
            for(int j = 1;j<=n;j++)
            {
                R[p][i][j] = R[p-1][i][j];
                int k = i + (1<<(p-1));
                int q = j + (1<<(p-1));
                if(k<=n&&R[p][i][j]<R[p-1][k][j])
                    R[p][i][j] = R[p-1][k][j];
                if(q<=n&&R[p][i][j]<R[p-1][i][q])
                    R[p][i][j] = R[p-1][i][q];
                if(k<=n&&q<=n&&R[p][i][j]<R[p-1][k][q])
                    R[p][i][j] = R[p-1][k][q];
            }
    }
    for(int i = 2;i<=n;i++)
        E[i] = E[i/2]+1;
    for(int i = 1;i<=m;i++)
    {
        int x, y,s;
        cin>>x>>y>>s;
        int e = E[s];
        int len = (1<<e);
        cout<<max(max(R[e][x][y],R[e][x+s-len][y]),max(R[e][x][y+s-len],R[e][x+s-len][y+s-len]))<<'\n';

    }
    return 0;
}