We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
There was an error while loading. Please reload this page.
1 parent 0581561 commit 03e2eecCopy full SHA for 03e2eec
4 files changed
library/data_structures_[l,r)/seg_tree_uncommon/implicit.hpp
@@ -42,7 +42,7 @@ template<int N> struct implicit_seg_tree {
42
int v) {
43
if (r <= tl || tr <= l) return;
44
if (l <= tl && tr <= r) return apply(add, v);
45
- int tm = tl + (tr - tl) / 2;
+ int tm = midpoint(tl, tr);
46
push(tl, tm, tr, v);
47
update(l, r, add, tl, tm, tree[v].lch);
48
update(l, r, add, tm, tr, tree[v].rch);
@@ -55,7 +55,7 @@ template<int N> struct implicit_seg_tree {
55
dt query(int l, int r, int tl, int tr, int v) {
56
if (r <= tl || tr <= l) return unit;
57
if (l <= tl && tr <= r) return tree[v].num;
58
59
60
return op(query(l, r, tl, tm, tree[v].lch),
61
query(l, r, tm, tr, tree[v].rch));
library/data_structures_[l,r)/seg_tree_uncommon/kth_smallest_query.hpp
@@ -25,7 +25,7 @@ struct kth_smallest {
25
}
26
int query(int k, int tl, int tr, int vl, int vr) {
27
if (tr - tl == 1) return tl;
28
29
int cnt_l = pst.tree[pst.tree[vr].lch].sum -
30
pst.tree[pst.tree[vl].lch].sum;
31
if (cnt_l >= k)
library/data_structures_[l,r)/seg_tree_uncommon/persistent.hpp
@@ -30,7 +30,7 @@ struct PST {
tree.emplace_back(tree[v].sum + change, 0, 0);
return sz(tree) - 1;
32
33
34
int lch = tree[v].lch;
35
int rch = tree[v].rch;
36
if (idx < tm) lch = update(idx, change, tl, tm, lch);
@@ -45,7 +45,7 @@ struct PST {
ll query(int l, int r, int tl, int tr, int v) {
if (v == 0 || r <= tl || tr <= l) return 0;
if (l <= tl && tr <= r) return tree[v].sum;
49
return query(l, r, tl, tm, tree[v].lch) +
50
query(l, r, tm, tr, tree[v].rch);
51
library/math/num_distinct_subsequences.hpp
@@ -9,12 +9,11 @@ int num_subsequences(const vi& a, int mod) {
9
rep(i, 0, sz(a)) {
10
int& cur = dp[i + 1] = 2 * dp[i];
11
if (cur >= mod) cur -= mod;
12
- auto it = last.find(a[i]);
13
- if (it != end(last)) {
14
- cur -= dp[it->second];
+ auto [it, ins] = last.emplace(a[i], i);
+ if (!ins) {
+ cur -= dp[exchange(it->second, i)];
15
if (cur < 0) cur += mod;
16
- it->second = i;
17
- } else last[a[i]] = i;
+ }
18
19
return dp.back();
20
0 commit comments