Cod sursa(job #3277634)

Utilizator Victor5539Tanase Victor Victor5539 Data 16 februarie 2025 23:21:51
Problema Plantatie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.31 kb
#include <iostream>
#include <fstream>

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



const int MAX=500;
int n,r[10][MAX+5][MAX+5],v[MAX+5][MAX+5],i,j,E[MAX+5],lat,q;

void rmq2d()
{
    int p;
    E[1]=0;
    for (i=2; i<=n; i++)
        E[i]=1+E[i/2];

    for (i=1; i<=n; i++)
    for (j=1; j<=n; j++)
    r[0][i][j]=v[i][j];

    for (p=1; (1<<p)<=n; p++)
    {
        for (i=1; i<=n; i++)
            for (j=1; j<=n; j++)
            {
                r[p][i][j]=r[p-1][i][j];

                if (j+(1<<(p-1))<=n && i+(1<<(p-1))<=n)
                {
                    r[p][i][j]=max(r[p][i][j],r[p-1][i+(1<<(p-1))][j+(1<<(p-1))]);
                    r[p][i][j]=max(r[p][i][j],r[p-1][i][j+(1<<(p-1))]);
                    r[p][i][j]=max(r[p][i][j],r[p-1][i+(1<<(p-1))][j]);
                }

            }
    }
}

void query(int i, int j, int lat)
{
    int e=E[lat],len=(1<<e);

    fout<<max( max(r[e][i][j],r[e][i+lat-len][j]), max(r[e][i+lat-len][j+lat-len], r[e][i][j+lat-len]) )<<"\n";
}

int main()
{
    fin>>n>>q;

    for (i=1; i<=n; i++)
        for (j=1; j<=n; j++)
        fin>>v[i][j];

    rmq2d();


    while (q)
    {
        fin>>i>>j>>lat;
        query(i,j,lat);
        q--;
    }
    return 0;
}