Cod sursa(job #3161628)

Utilizator gabriel.9619Gabriel Stefan Tita gabriel.9619 Data 27 octombrie 2023 18:11:28
Problema Plantatie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.11 kb
#include <fstream>
using namespace std;
ifstream fin("plantatie.in");
ofstream fout("plantatie.out");

int rmq[11][501][501], exp[1001];

inline int maxim(int a, int b)
{
    if(a>b)
    {
        return a;
    }
    return b;
}

int main()
{
    int n, m, i, j, i2, j2, x, y, e, l, lat, p, i1;
    fin>>n>>m;
    for(i=1;i<=n;i++)
    {
        for(j=1;j<=n;j++)
        {
            fin>>rmq[0][i][j];
        }
    }
    for(p=1, lat=2;lat<=n;p++, lat*=2)
    {
        for(i=1;i<=n-lat+1;i++)
        {
            for(j=1;j<=n-lat+1;j++)
            {
                i2=i+(lat>>1);
                j2=j+(lat>>1);
                rmq[p][i][j]=maxim(maxim(rmq[p-1][i][j], rmq[p-1][i][j2]), maxim(rmq[p-1][i2][j2], rmq[p-1][i2][j]));
            }
        }
    }
    exp[1]=0;
    for(i=2;i<=n;i++)
    {
        exp[i]=1+exp[i/2];
    }
    for(i1=1;i1<=m;i1++)
    {
        fin>>x>>y>>lat;
        e=exp[lat];
        l=1<<e;
        j2=y+lat-l;
        i2=x+lat-l;
        fout<<maxim(maxim(rmq[e][x][y], rmq[e][x][j2]), maxim(rmq[e][i2][j2], rmq[e][i2][y]))<<"\n";
    }
}