Cod sursa(job #2229527)

Utilizator PetyAlexandru Peticaru Pety Data 7 august 2018 09:38:12
Problema Plantatie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.97 kb
#include <bits/stdc++.h>

using namespace std;

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

int n, q, lg[502], rmq[502][502][10], x, y, k;

int main()
{
  fin >> n >> q;
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= n; j++)
      fin >> rmq[i][j][0];
  lg[1] = 0;
  for (int i = 2; i <= n; i++)
    lg[i] = 1 + lg[i / 2];
  for (int k = 1; k <= lg[n]; k++)
    for (int i = 1; i <= n - (1 << k) + 1; i++)
      for (int j = 1; j <= n - (1 << k) + 1; j++) {
        int aux = (1 << (k - 1));
        rmq[i][j][k] = max(max(rmq[i][j][k - 1], rmq[i][j + aux][k - 1]), max(rmq[i + aux][j][k - 1], rmq[i + aux][j + aux][k - 1]));
      }
  for (int i = 1; i <= q; i++) {
    fin >> x >> y >> k;
    int q = lg[k];
    int p2 = (1 << q);
    int x1 = x + k - 1;
    int y1 = y + k - 1;
    fout << max(max(rmq[x][y][q], rmq[x][y1 - p2 + 1][q]), max(rmq[x1 - p2 + 1][y][q], rmq[x1 - p2 + 1][y1 - p2 + 1][q])) << "\n";
  }
  return 0;
}