Advertisement
keverman

Sparse table

Feb 9th, 2020
131
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.60 KB | None | 0 0
  1. int h;
  2. vector<int> logs;
  3. vector<vector<int>> st;
  4.  
  5. void build_st(vector<int>& data)
  6. {
  7.     int N = data.size();
  8.     h = ceil(log2(data.size()));
  9.     st.resize(N, vector<int>(h));
  10.     logs.resize(N, 0);
  11.  
  12.     for(int i = 2; i <= N; i++)
  13.         logs[i] = logs[i / 2] + 1;
  14.  
  15.     for(int i = 0; i < N; i++)
  16.         st[i][0] = data[i];
  17.     for(int j = 1; j < h; j++)
  18.         for(int i = 0; i + (1 << j) <= N; i++)
  19.             st[i][j] = min(st[i][j - 1], st[i + (1 << (j - 1))][j - 1]);
  20. }
  21.  
  22. int query_st(int l, int r)
  23. {
  24.     int j = logs[r - l + 1];
  25.     return min(st[l][j], st[r - (1 << j) + 1][j]);
  26. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement