Cod sursa(job #3124940)

Utilizator francesca79Feier Francesca francesca79 Data 30 aprilie 2023 17:59:02
Problema Plantatie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.26 kb
#include <bits/stdc++.h>

using namespace std;

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

int rmq[10][501][501],n,m,l,lg[501],a[501][501];

int main()
{
    fin >> n >> m;
    for (int i=1; i<=n; i++)
    {
        for (int j=1; j<=n; j++)
        {
            fin >> a[i][j];
        }
    }
    lg[1]=0;
    for (int i=2; i<=n; i++)
    {
        lg[i]=lg[i/2]+1;
    }
    for (int i=1; i<=n; i++)
    {
        for (int j=1; j<=n; j++)
        {
            rmq[0][i][j]=a[i][j];
        }
    }
    for (int k=1; (1 << k) <=n; k++)
    {
        for (int i=1; (i + (1 << k))-1 <=n; i++)
        {
            for (int j=1; (j + (1 << k))-1 <= n ; j++)
            {
                l=1 << (k-1);
                int max1=max(rmq[k-1][i][j],rmq[k-1][i][j+l]);
                int max2=max(max1,rmq[k-1][i+l][j]);
                rmq[k][i][j]=max(max2,rmq[k-1][i+l][j+l]);
            }
        }
    }
    int x,y,z;
    for (int i=1; i<=m; i++)
    {
        fin >> x >> y >> z;
        int p=lg[z];
        int max1=max(rmq[p][x][y],rmq[p][x][y+z-(1 << p)]);
        int max2=max(max1,rmq[p][x+z-(1 << p)][y]);
        fout << max(max2,rmq[p][x+z-(1 << p)][y+z-(1 << p)]) << endl;
    }
    return 0;
}