Cod sursa(job #2907131)

Utilizator CristianCazacuCazacu Cristian - Gabriel CristianCazacu Data 28 mai 2022 21:03:18
Problema Plantatie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.97 kb
#include <iostream>
#include <fstream>
using namespace std;

int mat[501][501][10], lg[501];

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

    int N, M, l;
    f >> N >> M;
    for(int i = 1; i <= N; i++)
        for(int j = 1; j <= N; j++)
            f >> mat[i][j][0];

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

    for(int k = 1; (1 << k) <= N; k ++) {
        l = (1 << k);
        for(int i = 1; i <= N - l + 1; i ++)
            for(int j = 1; j <= N - l + 1; j ++)
                mat[i][j][k] = max(max (mat[i][j][k - 1], mat[i][j + l/2][k - 1]), max (mat[i + l/2][j][k - 1], mat[i + l/2][j + l/2][k - 1]));
    }

    while(M) {
        int x, y, k;
        f >> x >> y >> k;
        int p = (1 << lg[k]);
        g << max(mat[x][y][lg[k]], max(mat[x + k - p][y][lg[k]], max(mat[x][y + k - p][lg[k]], mat[x + k - p][y + k - p][lg[k]]))) << '\n';
        M--;
    }
    f.close();
    g.close();
    return 0;
}