Cod sursa(job #2751682)

Utilizator oporanu.alexAlex Oporanu oporanu.alex Data 15 mai 2021 16:12:46
Problema Plantatie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.14 kb
#include <bits/stdc++.h>

using namespace std;

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

int main(){
    int N, M, r2d[505][505][12], p[505][505], log2[505];
    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] = -1;

    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;
}