Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- int h;
- vector<int> logs;
- vector<vector<int>> st;
- void build_st(vector<int>& data)
- {
- int N = data.size();
- h = ceil(log2(data.size()));
- st.resize(N, vector<int>(h));
- logs.resize(N, 0);
- for(int i = 2; i <= N; i++)
- logs[i] = logs[i / 2] + 1;
- for(int i = 0; i < N; i++)
- st[i][0] = data[i];
- for(int j = 1; j < h; j++)
- for(int i = 0; i + (1 << j) <= N; i++)
- st[i][j] = min(st[i][j - 1], st[i + (1 << (j - 1))][j - 1]);
- }
- int query_st(int l, int r)
- {
- int j = logs[r - l + 1];
- return min(st[l][j], st[r - (1 << j) + 1][j]);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement