Cod sursa(job #2849799)

Utilizator davidenko22Stancu David-Andrei davidenko22 Data 15 februarie 2022 19:55:42
Problema Plantatie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.19 kb
#include <fstream>

using namespace std;

const int N = 501, L = 9;

int r[L][N][N], log2[N];

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

int max(int a, int b, int c, int d)
{
    return max(max(a, b), max(c, d));
}

int main()
{
    int n, q;
    in >> n >> q;
    for (int i = 1; i <= n; i++)  {
      for (int j = 1; j <= n; j++) {
        int a;
        in >> a;
        r[0][i][j] = a;
      }
    }
    for (int l = 1; (1 << l) <= n; l++) {
      for (int i = (1 << l); i <= n; i++) {
        for (int j = (1 << l); j <= n; j++) {
          int lat = (1 << (l-1));
          r[l][i][j] = max(r[l-1][i-lat][j-lat], r[l-1][i-lat][j],
                          r[l-1][i][j-lat], r[l-1][i][j]);
        }
      }
    }

    log2[1] = 0;
    for (int i = 2; i <= n; i++) {
      log2[i] = 1 + log2[i/2];
    }
    for (int i = 0; i < q; i++) {
      int l, c, lat;
      in >> l >> c >> lat;
      l += lat - 1;
      c += lat - 1;
      int e = log2[lat];
      lat -= (1 << e);
      out << max(r[e][l - lat][c - lat], r[e][l - lat][c],
                r[e][l][c - lat], r[e][l][c]) << "\n";
    }
    in.close();
    out.close();
    return 0;
}