Cod sursa(job #2631275)

Utilizator Alex_tz307Lorintz Alexandru Alex_tz307 Data 29 iunie 2020 17:18:55
Problema Plantatie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.96 kb
#include <bits/stdc++.h>
#define log(x) 31-__builtin_clz(x)

using namespace std;

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

int N, M, rmq[10][512][512];

int main () {
  fin >> N >> M;
  for (int i = 0; i < N; i ++)
    for (int j = 0; j < N; j ++)
      fin >> rmq[0][i][j];
  for (int k = 1; (1 << k) <= N; k ++)
    for (int i = 0; i + (1 << k) <= N; i ++)
      for (int j = 0; j + (1 << k) <= N; j ++)
        rmq[k][i][j] = max (max (rmq[k - 1][i][j], rmq[k - 1][i][j + (1 << k - 1)]),
                            max (rmq[k - 1][i + (1 << k - 1)][j], rmq[k - 1][i + (1 << k - 1)][j + (1 << k - 1)]));
  while (M --) {
    int i, j, k;
    fin >> i >> j >> k;
    i --, j --;
    int lg = log(k);
    fout << max (max (rmq[lg][i][j], rmq[lg][i][j - (1 << lg) + k]),
                 max (rmq[lg][i - (1 << lg) + k][j], rmq[lg][i - (1 << lg) + k][j - (1 << lg) + k])) << '\n';
  }
  fin.close();
  fout.close();
  return 0;
}