Cod sursa(job #2898139)

Utilizator 0SiSBesliu Radu-Stefan 0SiS Data 6 mai 2022 10:23:50
Problema Plantatie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.02 kb
#include <bits/stdc++.h>

using namespace std;

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

int n, m, L, dk, lat, x;
int expo[505];
int rmq[10][505][505];
int main() {
  f >> n >> m;

  expo[1]=0;
  for(int i = 2; i <= n; ++i) {
    expo[i] = 1 + expo[i / 2];
  }

  int val;
  for (int i = 1; i <= n; ++i) {
    for(int j = 1; j <= n; ++j) {
      f >> val;
      rmq[0][i][j] = val;
    }
  }
  for(int k = 1; k <= expo[n]; ++k) {
    dk = 1 << k;
    L = 1 << (k - 1);
    for (int i = 1; i + L <= n; ++i) {
      for (int j = 1; j + L <= n; ++j) {
        rmq[k][i][j] = max({rmq[k-1][i][j], rmq[k-1][i][j+L], rmq[k-1][i+L][j], rmq[k-1][i+L][j+L]});
      }
    }
  }

  int i, j, k;
  while(m--) {
    f >> i >> j >> lat;
    if(lat == 1) {
      g << rmq[0][i][j] << '\n';
    }
    else {
      dk = 1 << expo[lat];
      k = expo[lat];
      x = max({rmq[k][i][j], rmq[k][i][j+lat-dk], rmq[k][i+lat-dk][j], rmq[k][i+lat-dk][j+lat-dk]});
      g << x << '\n';
    }
  }
}