Cod sursa(job #3358755)

Utilizator RZV139fjDragomir Ioan Razvan RZV139fj Data 19 iunie 2026 22:49:18
Problema Plantatie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.18 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin("plantatie.in");
ofstream fout("plantatie.out");
int rmq[35][505][505];
int a[505][505];

int getMin(int x, int y, int l)
{
    int p=31- __builtin_clz(l);
    //return max(rmq[p][x],rmq[p][y-(1<<p)+1]);
    int minim = max(rmq[p][x][y],rmq[p][x+l-(1<<p)][y]);
    minim=max(minim,rmq[p][x][y+l-(1<<p)]);
    return max(minim,rmq[p][x+l-(1<<p)][y+l-(1<<p)]);
}

int main()
{
    int n,m;
    fin>>n>>m;
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=n;j++)
        {
            fin>>a[i][j];
            rmq[0][i][j]=a[i][j];
        }
    }

    for(int p=1; (1<<p) <=n ;p++)
    {
        for(int i=1;i+  (1 << p) - 1<=n;i++)
        {
            for(int j=1;j+(1<<p)-1<=n;j++)
            {
                rmq[p][i][j]=max(rmq[p-1][i][j],rmq[p-1][i+(1<<(p-1))][j]);
                rmq[p][i][j]=max(rmq[p][i][j],rmq[p-1][i][j+(1<<(p-1))]);
                rmq[p][i][j]=max(rmq[p][i][j],rmq[p-1][i+(1<<(p-1))][j+(1<<(p-1))]);
            }
        }
    }
    for(int i=1;i<=m;i++)
    {
        int x,y,l;
        fin>>x>>y>>l;
        fout<<getMin(x,y,l)<<endl;

    }

    return 0;
}