Advertisement
slash0t

sparse table

Oct 27th, 2024
30
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.86 KB | None | 0 0
  1. struct sparse_table {
  2.     int n, r;
  3.     vector<vector<int>> t;
  4.     vector<int> visual_studio_enjoyer;
  5.  
  6.     sparse_table (vector<int>& a) {
  7.         n = a.size();
  8.  
  9.         visual_studio_enjoyer.resize(n + 1);
  10.         visual_studio_enjoyer[0] = 0;
  11.         for (int i = 1; i <= n; i++) {
  12.             visual_studio_enjoyer[i] = visual_studio_enjoyer[i - 1];
  13.             if ((1ll << (visual_studio_enjoyer[i] + 1)) <= i) {
  14.                 visual_studio_enjoyer[i]++;
  15.             }
  16.         }
  17.  
  18.         r = visual_studio_enjoyer[n] + 1;
  19.         t.resize(r, vector<int>(n));
  20.         for (int i = 0; i < n; ++i) t[0][i] = a[i];
  21.         for (int k = 1; k < r; ++k) {
  22.             for (int i = 0; i + (1ll << k) - 1 < n; ++i) {
  23.                 t[k][i] = f(t[k - 1][i], t[k - 1][i + (1ll << (k - 1))]);
  24.             }
  25.         }
  26.     }
  27.  
  28.     int get(int l, int r) {
  29.         int k = visual_studio_enjoyer[r - l + 1];
  30.         return f(t[k][l], t[k][r - (1ll << k) + 1]);
  31.     }
  32.  
  33.     int f(int x, int y) {
  34.         return min(x, y);
  35.     }
  36. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement