Alex_tz307

RMQ 1

Sep 12th, 2020
115
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.50 KB | None | 0 0
  1. int Minim (int x, int y) {
  2.     int k = lg[y - x + 1];
  3.     int dif = (y - x + 1) - (1 << k);
  4.     return min (M[k][x], M[k][x + dif]);
  5. }
  6. fin >> n;
  7. for (int i = 1; i <= n; i ++) {
  8.         fin >> v[i];
  9.         M[0][i] = v[i];
  10. }
  11. lg[1] = 0;
  12. for (int i = 2; i <= n; i ++)
  13.     lg[i] = lg[i / 2] + 1;
  14. for (int j = 1; (1 << j) <= n; j ++)
  15.     for (int i = 1; i + (1 << j) - 1 <= n; i ++)
  16.         if (M[j - 1][i] < M[j - 1][i + (1 << (j - 1))])
  17.             M[j][i] = M[j - 1][i];
  18.         else
  19.             M[j][i] = M[j - 1][i + (1 << (j - 1))];
Advertisement
Add Comment
Please, Sign In to add comment