Cod sursa(job #3230701)

Utilizator stefanpetre004Petre Stefan stefanpetre004 Data 22 mai 2024 15:25:01
Problema Plantatie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.18 kb
#include <fstream>
#include <algorithm>
#include <cmath>

using namespace std;

ifstream f("plantatie.in");
ofstream g("plantatie.out");

int a[501][501][9]; ///log(2)500 < log(2)512=9

int main()
{
    int m, n;
    f>>n>>m;
    for (int i = 0; i < n; i++)
        for (int j = 0; j < n; j++)
            f>>a[i][j][0];
    int LOG = log2(n);
    for (int k = 1; k <= LOG; k++)
    {
        int length = 1 << k;
        for (int i = 0; i + length - 1 < n; i++)
            for (int j = 0; j + length - 1 < n; j++)
        {
            int maxSus = max(a[i][j][k - 1], a[i][j + length/2][k - 1]);
            int maxJos = max(a[i + length/2][j][k - 1], a[i + length/2][j + length/2][k - 1]);
            a[i][j][k] = max(maxSus, maxJos);
        }
    }
    for (int k = 0; k < m; k++)
    {
        int i, j, l;
        f>>i>>j>>l;
        i--;
        j--;
        int LOG = log2(l);
        int subSqLength = 1 << LOG;
        int maxSus = max(a[i][j][LOG], a[i][j + l - subSqLength][LOG]);
        int maxJos = max(a[i + l - subSqLength][j][LOG], a[i + l - subSqLength][j + l - subSqLength][LOG]);
        g<<max(maxSus, maxJos)<<"\n";
    }
    return 0;
}