Cod sursa(job #2229535)

Utilizator lucametehauDart Monkey lucametehau Data 7 august 2018 10:49:51
Problema Plantatie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.06 kb
#include <fstream>

using namespace std;

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

const int NMAX = 500;

int n, m;
int p, x, y, z;

int v[1 + NMAX][1 + NMAX];
int rmq[1 + NMAX][1 + NMAX][10];
int log[1 + NMAX];

int main() {
  cin >> n >> m;
  for(int i = 1; i <= n; i++) {
    for(int j = 1; j <= n; j++) {
      cin >> v[i][j];
      rmq[i][j][0] = v[i][j];
    }
  }
  // rmq 2D
  for(int i = 2; i <= n; i++)
    log[i] = log[i / 2] + 1;
  for(int k = 1; k <= log[n]; k++) {
    for(int i = 1; i <= n - (1 << (k - 1)); i++) {
      for(int j = 1; j <= n - (1 << (k - 1)); j++) {
        p = (1 << (k - 1));
        rmq[i][j][k] = max(rmq[i][j][k - 1], max(rmq[i + p][j][k - 1], max(rmq[i][j + p][k - 1], rmq[i + p][j + p][k - 1])));
      }
    }
  }
  for(; m; m--) {
    cin >> x >> y >> z;
    p = (1 << (log[z]));
    int i = x + z - 1, j = y + z - 1;
    cout << max(rmq[x][y][log[z]], max(rmq[i - p + 1][y][log[z]], max(rmq[x][j - p + 1][log[z]], rmq[i - p + 1][j - p + 1][log[z]]))) << "\n";
  }
  return 0;
}