Cod sursa(job #2841573)

Utilizator vlad2009Vlad Tutunaru vlad2009 Data 29 ianuarie 2022 22:13:31
Problema Plantatie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.19 kb
#include <fstream>

const int MAX_N = 500;
int rmq[10][1 + MAX_N][1 + MAX_N], log[1 + MAX_N];

int main() {
  std::ifstream fin("plantatie.in");
  std::ofstream fout("plantatie.out");
  int n, q;
  fin >> n >> q;
  for (int i = 2; i <= MAX_N; i++) {
    log[i] = log[i >> 1] + 1;
  }
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= n; j++) {
      fin >> rmq[0][i][j];
    }
  }
  for (int p = 1; (1 << p) <= n; p++) {
    for (int i = 1; i <= n; i++) {
      for (int j = 1; j + (1 << p) - 1 <= n; j++) {
        rmq[p][i][j] = std::max(std::max(rmq[p - 1][i][j], rmq[p - 1][i][j + (1 << (p - 1))]), std::max(rmq[p - 1][i + (1 << (p - 1))][j],
                                                                                      rmq[p - 1][i + (1 << (p - 1))][j + (1 << (p - 1))]));
      }
    }
  }
  for (int i = 1; i <= q; i++) {
    int l, c, lat;
    fin >> l >> c >> lat;
    int p = log[lat];
    fout << std::max(std::max(rmq[p][l][c], rmq[p][l][c + lat - (1 << p)]), std::max(rmq[p][l + lat - (1 << p)][c],
                                                                                rmq[p][l + lat - (1 << p)][c + lat - (1 << p)])) << "\n";
  }
  return 0;
}