Cod sursa(job #2751671)

Utilizator oporanu.alexAlex Oporanu oporanu.alex Data 15 mai 2021 15:45:35
Problema Plantatie Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.13 kb
#include <bits/stdc++.h>

using namespace std;

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

int main(){
    int N, M, r2d[50][50][12], p[50][50], log2[50];
    int T;
    f >> N >> T;
    for (int i = 1; i < N; ++i)
        for (int j = 1; j < N; ++j)
            f >> p[i][j];
    log2[0] = 0;

    for (int i = 1; i < N; ++i)
        log2[i] = 1 + log2[i/2];

    for(int i = 1; i < N; ++i)
        for (int j = 1; j < N; ++j)
            r2d[i][j][0] = p[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++)
                r2d[i][j][k] = max(max(r2d[i + (1 << (k - 1))][j][k - 1], r2d[i + (1 << (k - 1))][j + (1 << (k - 1))][k - 1]), max(r2d[i][j][k - 1], r2d[i][j + (1 << (k - 1))][k - 1]));


    for(int i = 0; i < T; ++i) {
        int x, y, k;
        f >> x >> y >> k;

        int pw = log2[k];
        g << max(max(r2d[x][y][pw], r2d[x][y + k - (1 << pw)][pw]), max(r2d[x + k - (1 << pw)][y][pw], r2d[x + k - (1 << pw)][y + k - (1 << pw)][pw]));
        g << "\n";
    }

    return 0;
}