summaryrefslogtreecommitdiff
path: root/datastructures
diff options
context:
space:
mode:
authorNoobie99 <noob999noob999@gmail.com>2023-02-28 18:41:44 +0100
committerNoobie99 <noob999noob999@gmail.com>2023-02-28 18:41:44 +0100
commit1f51a4c86787f734e82036f990b28958b188825d (patch)
treea46d0925c82cfef2c7831dbc367326dc91de550b /datastructures
parentc97d2d14c071d19f9310839b6f9b2d2bdebf363b (diff)
simplified sparse table
Diffstat (limited to 'datastructures')
-rw-r--r--datastructures/sparseTable.cpp14
1 files changed, 6 insertions, 8 deletions
diff --git a/datastructures/sparseTable.cpp b/datastructures/sparseTable.cpp
index cf21e9a..719fd73 100644
--- a/datastructures/sparseTable.cpp
+++ b/datastructures/sparseTable.cpp
@@ -2,23 +2,21 @@ struct SparseTable {
vector<vector<int>> st;
vector<ll> *a;
- bool better(int lidx, int ridx) {
- return a->at(lidx) <= a->at(ridx);
+ int better(int lidx, int ridx) {
+ return a->at(lidx) <= a->at(ridx) ? lidx : ridx;
}
void init(vector<ll> *vec) {
a = vec;
st.assign(__lg(sz(*a)) + 1, vector<int>(sz(*a)));
- for (int i = 0; i < sz(*a); i++) st[0][i] = i;
+ iota(all(st[0]), 0);
for (int j = 0; (2 << j) <= sz(*a); j++) {
for (int i = 0; i + (2 << j) <= sz(*a); i++) {
- st[j + 1][i] = better(st[j][i] , st[j][i + (1 << j)])
- ? st[j][i] : st[j][i + (1 << j)];
+ st[j + 1][i] = better(st[j][i] , st[j][i + (1 << j)]);
}}}
int queryIdempotent(int l, int r) {
int j = __lg(r - l); //31 - builtin_clz(r - l);
- return better(st[j][l] , st[j][r - (1 << j)])
- ? st[j][l] : st[j][r - (1 << j)];
+ return better(st[j][l] , st[j][r - (1 << j)]);
}
-};
+}