Alex_tz307

RMQ 2D

Sep 12th, 2020
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.94 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #define log(x) 31-__builtin_clz(x)
  3.  
  4. using namespace std;
  5.  
  6. ifstream fin ("plantatie.in");
  7. ofstream fout ("plantatie.out");
  8.  
  9. int N, M, rmq[10][512][512];
  10.  
  11. int main () {
  12.   fin >> N >> M;
  13.   for (int i = 0; i < N; i ++)
  14.     for (int j = 0; j < N; j ++)
  15.       fin >> rmq[0][i][j];
  16.   for (int k = 1; (1 << k) <= N; k ++)
  17.     for (int i = 0; i + (1 << k) <= N; i ++)
  18.       for (int j = 0; j + (1 << k) <= N; j ++)
  19.         rmq[k][i][j] = max (max (rmq[k - 1][i][j], rmq[k - 1][i][j + (1 << (k - 1))]),
  20.                             max (rmq[k - 1][i + (1 << (k - 1))][j], rmq[k - 1][i + (1 << (k - 1))][j + (1 << (k - 1))]));
  21.   while (M --) {
  22.     int i, j, k;
  23.     fin >> i >> j >> k;
  24.     i --, j --;
  25.     int lg = log(k);
  26.     fout << max (max (rmq[lg][i][j], rmq[lg][i][j - (1 << lg) + k]),
  27.                  max (rmq[lg][i - (1 << lg) + k][j], rmq[lg][i - (1 << lg) + k][j - (1 << lg) + k])) << '\n';
  28.   }
  29.   return 0;
  30. }
  31.  
Add Comment
Please, Sign In to add comment