We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
1 parent 9095a85 commit e79d2b8Copy full SHA for e79d2b8
1 file changed
library/data_structures/seg_tree_uncommon/wavelet_bit_vec.hpp
@@ -1,18 +1,20 @@
1
#pragma once
2
+//! @code
3
+//! vector<bool> a(n);
4
+//! bit_vec bv(a);
5
+//! bv.cnt(r); // a[0] + a[1] + ... + a[r - 1]
6
+//! @endcode
7
+//! @time O(n + q)
8
+//! @space O(n / 64)
9
#define ull uint64_t
10
struct bit_vec {
11
vector<pair<ull, int>> b;
- //! @time O(n)
- //! @space O(n / 64)
12
bit_vec(const vector<bool>& a): b(sz(a) / 64 + 1) {
13
rep(i, 0, sz(a)) b[i >> 6].first |= ull(a[i])
14
<< (i & 63);
15
rep(i, 0, sz(b) - 1) b[i + 1].second =
16
popcount(b[i].first) + b[i].second;
17
}
- //! @returns a[0] + a[1] + ... + a[r - 1]
- //! @time O(1)
- //! @space O(1)
18
int cnt(int r) {
19
auto [x, y] = b[r >> 6];
20
return y + popcount(x & ((1ULL << (r & 63)) - 1));
0 commit comments