Cod sursa(job #3227987)

Utilizator FunnyStockyMihnea Andreescu FunnyStocky Data 4 mai 2024 17:04:46
Problema Plantatie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.19 kb
#include <cstdio>
#include <algorithm>

using namespace std;

inline int ma(int a, int b, int c, int d)
{
  return max(max(a, b), max(c, d));
}

const int N = 500 + 5;

int n, q;
int lg[N];
int ret[N][N][9];

int main()
{
  freopen("plantatie.in", "r", stdin);
  freopen("plantatie.out", "w", stdout);
  for (int i = 2; i < N; i++)
  {
    lg[i] = 1 + lg[i / 2];
  }
  scanf("%d%d", &n, &q);
  for (int i = 1; i <= n; i++)
  {
    for (int j = 1; j <= n; j++)
    {
      scanf("%d", &ret[i][j][0]);
    }
  }
  for (int k = 1; (1 << k) <= n; k++)
  {
    for (int i = 1; i + (1 << k) - 1 <= n; i++)
    {
      for (int j = 1; j + (1 << k) - 1 <= n; j++)
      {
        ret[i][j][k] = ma(ret[i][j][k - 1], ret[i][j + (1 << (k - 1))][k - 1], ret[i + (1 << (k - 1))][j][k - 1], ret[i + (1 << (k - 1))][j + (1 << (k - 1))][k - 1]);
      }
    }
  }
  int r1, c1, r2, c2, k;
  while (q--)
  {
    scanf("%d%d%d", &r1, &c1, &k);
    r2 = r1 + k - 1;
    c2 = c1 + k - 1;
    k = lg[k];
    printf("%d\n", ma(ret[r1][c1][k], ret[r1][c2 - (1 << k) + 1][k], ret[r2 - (1 << k) + 1][c1][k], ret[r2 - (1 << k) + 1][c2 - (1 << k) + 1][k]));
  }
  return 0;
}
/**

**/