Cod sursa(job #3127840)

Utilizator GFA03Gavrila Florin-Alexandru GFA03 Data 7 mai 2023 21:15:47
Problema Plantatie Scor 50
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.49 kb
#include <bits/stdc++.h>

int rmq[501][501][10], v[501][501], lg[501];

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

int main()
{
    int n, m, s, max1, max2;
    fin >> n >> m;
    for(int i = 1; i <= n; i++)
    {
        for(int j = 1; j <= n; j++)
        {
            fin >> s;
            v[i][j] = s;
            rmq[i][j][0] = v[i][j];
        }
    }
    lg[1]=0;
    for (int i=2; i<=n; i++)
    {
        lg[i]=lg[i/2]+1;
    }
    for(int length = 1; length <= (int)log2(n); ++length)
    {
        for(int i = 1; i + (int)std::pow(2, length)-1 <= n; ++i)
        {
            for(int j = 1; j + (int)std::pow(2, length)-1 <= n; ++j)
            {
                max1 = std::max(rmq[i][j][length-1], rmq[i][j + (int)std::pow(2, length-1)][length-1]);
                max2 = std::max(rmq[i+(int)std::pow(2, length-1)][j][length-1], rmq[i + (int)std::pow(2, length-1)][j + (int)std::pow(2, length-1)][length-1]);
                rmq[i][j][length] = std::max(max1, max2);
            }
        }
    }
    int x, y, z, k;
    for(int i = 1; i <= m; ++i)
    {
        fin >> x >> y >> z;
        k = (int)log2(z);
        max1 = std::max(rmq[x][y][k], rmq[x][y + z - (int)std::pow(2, k)][k]);
        max2 = std::max(rmq[x + z - (int)std::pow(2, k)][y][k], rmq[x + z - (int)std::pow(2, k)][y + z - (int)std::pow(2, k)][k]);
        // fout << std::max(max2, rmq[x + z - (int)std::pow(2, k)][y + z - (int)std::pow(2, k)][k]) << '\n';
        fout << std::max(max1, max2) << '\n';
    }
}