Cod sursa(job #3232928)

Utilizator TonyC205Chirilus Antonie TonyC205 Data 2 iunie 2024 00:16:42
Problema Plantatie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.11 kb
#include <fstream>
#include <algorithm>

using namespace std;

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

const int N = 501;

int n, q;
int log[N];
int A[N][N][9];

int main()
{
  ifstream fin("plantatie.in");
  ofstream fout("plantatie.out");
  for (int i = 2; i < N; i++)
  {
    log[i] = 1 + log[i / 2];
  }
  fin >> n >> q;
  for (int i = 1; i <= n; i++)
  {
    for (int j = 1; j <= n; j++)
    {
      fin >> A[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++)
      {
        A[i][j][k] = maxx(A[i][j][k - 1], A[i][j + (1 << (k - 1))][k - 1], A[i + (1 << (k - 1))][j][k - 1], A[i + (1 << (k - 1))][j + (1 << (k - 1))][k - 1]);
      }
    }
  }
  int r1, c1, r2, c2, k;
  while (q--)
  {
    fin >> r1 >> c1 >> k;
    r2 = r1 + k - 1;
    c2 = c1 + k - 1;
    k = log[k];
    fout << maxx(A[r1][c1][k], A[r1][c2 - (1 << k) + 1][k], A[r2 - (1 << k) + 1][c1][k], A[r2 - (1 << k) + 1][c2 - (1 << k) + 1][k]) << endl;
  }
  return 0;
}