Cod sursa(job #3318847)

Utilizator rrfeierFeier Raul rrfeier Data 29 octombrie 2025 13:10:30
Problema Plantatie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.14 kb
#include <bits/stdc++.h>
#include <fstream>

using namespace std;

int rmq[501][501][9];

int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);

  ifstream cin{"plantatie.in"};
  ofstream cout{"plantatie.out"};

  int N, Q;
  cin >> N >> Q;

  // vector<vector<vector<int>>> rmq(N + 1,
  //                               vector<vector<int>>(N + 1, vector<int>(9)));

  for (int i = 1; i <= N; i++) {
    for (int j = 1; j <= N; j++) {
      cin >> rmq[i][j][0];
    }
  }

  for (int k = 1; k < 9; k++) {
    for (int i = 1; i + (1 << k) - 1 <= N; i++) {
      for (int j = 1; j + (1 << k) - 1 <= N; j++) {
        rmq[i][j][k] =
            max({rmq[i][j][k - 1], rmq[i + (1 << (k - 1))][j][k - 1],
                 rmq[i][j + (1 << (k - 1))][k - 1],
                 rmq[i + (1 << (k - 1))][j + (1 << (k - 1))][k - 1]});
      }
    }
  }

  while (Q--) {
    int i, j, k;
    cin >> i >> j >> k;

    int p = 31 - __builtin_clz(k);

    int aux_i = i + k - (1 << p);
    int aux_j = j + k - (1 << p);

    cout << max({rmq[i][j][p], rmq[aux_i][j][p], rmq[i][aux_j][p],
                 rmq[aux_i][aux_j][p]})
         << '\n';
  }

  return 0;
}