Create sparse_table.cpp
This commit is contained in:
parent
c9b31c10c2
commit
ab2fe10480
17
Data Structures/sparse_table.cpp
Normal file
17
Data Structures/sparse_table.cpp
Normal file
|
@ -0,0 +1,17 @@
|
|||
class sparse_table {
|
||||
private: int st[20][100000];
|
||||
public:
|
||||
int log(int x) { return 32 - __builtin_clz(x) - 1; }
|
||||
|
||||
sparse_table(int N, int A[]) {
|
||||
for (int i = 0; i < N; i++) st[i][0] = A[i];
|
||||
for (int i = 0; i <= log(N); i++) {
|
||||
for (int j = 0; j + (1 << i) < N; j++) st[i][j] = min(st[i - 1][j], st[i - 1][j + (1 << (i - 1))]);
|
||||
}
|
||||
}
|
||||
|
||||
int query(int i, int j) {
|
||||
int k = log(j - i + 1);
|
||||
return min(st[k][i], st[k][j - (1 << k) + 1]);
|
||||
}
|
||||
};
|
Loading…
Reference in a new issue