🌐 AI搜索 & 代理 主页
Skip to content

Commit e6d07df

Browse files
1 parent 8d3f029 commit e6d07df

File tree

9 files changed

+49
-23
lines changed

9 files changed

+49
-23
lines changed

1563/algebra/binary-exp.html

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7975,6 +7975,14 @@
79757975

79767976

79777977

7978+
7979+
7980+
7981+
7982+
7983+
7984+
7985+
79787986

79797987

79807988

1563/data_structures/fenwick.html

Lines changed: 13 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -8328,7 +8328,7 @@
83288328
<ul class="metadata page-metadata" data-bi-name="page info" lang="en-us" dir="ltr">
83298329

83308330
Last update:
8331-
<span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-date" title="December 6, 2025 07:27:49 UTC">December 6, 2025</span>&emsp;
8331+
<span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-date" title="December 6, 2025 09:38:49 UTC">December 6, 2025</span>&emsp;
83328332

83338333
<!-- Tags -->
83348334

@@ -8483,11 +8483,9 @@ <h3 id="finding-sum-in-one-dimensional-array">Finding sum in one-dimensional arr
84838483
This is handled in the <code>sum(int l, int r)</code> method.</p>
84848484
<p>Also this implementation supports two constructors.
84858485
You can create a Fenwick tree initialized with zeros, or you can convert an existing array into the Fenwick form.</p>
8486-
<div class="tabbed-set tabbed-alternate" data-tabs="2:1"><input checked="checked" id="__tabbed_2_1" name="__tabbed_2" type="radio" /><div class="tabbed-labels"><label for="__tabbed_2_1">C++</label></div>
8486+
<div class="tabbed-set tabbed-alternate" data-tabs="2:2"><input checked="checked" id="__tabbed_2_1" name="__tabbed_2" type="radio" /><input id="__tabbed_2_2" name="__tabbed_2" type="radio" /><div class="tabbed-labels"><label for="__tabbed_2_1">C++</label><label for="__tabbed_2_2">Python</label></div>
84878487
<div class="tabbed-content">
8488-
<div class="tabbed-block"></div>
8489-
</div>
8490-
</div>
8488+
<div class="tabbed-block">
84918489
<div class="highlight"><pre><span></span><code><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">FenwickTree</span><span class="w"> </span><span class="p">{</span>
84928490
<span class="w"> </span><span class="n">vector</span><span class="o">&lt;</span><span class="kt">int</span><span class="o">&gt;</span><span class="w"> </span><span class="n">bit</span><span class="p">;</span><span class="w"> </span><span class="c1">// binary indexed tree</span>
84938491
<span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">n</span><span class="p">;</span>
@@ -8519,8 +8517,7 @@ <h3 id="finding-sum-in-one-dimensional-array">Finding sum in one-dimensional arr
85198517
<span class="w"> </span><span class="p">}</span>
85208518
<span class="w"> </span><span class="p">};</span>
85218519
</code></pre></div>
8522-
<div class="tabbed-set tabbed-alternate" data-tabs="3:1"><input checked="checked" id="__tabbed_3_1" name="__tabbed_3" type="radio" /><div class="tabbed-labels"><label for="__tabbed_3_1">Python</label></div>
8523-
<div class="tabbed-content">
8520+
</div>
85248521
<div class="tabbed-block">
85258522
<div class="highlight"><pre><span></span><code><span class="k">class</span><span class="w"> </span><span class="nc">FenwickTree</span><span class="p">:</span>
85268523

@@ -8570,11 +8567,9 @@ <h3 id="finding-minimum-of-0-r-in-one-dimensional-array">Finding minimum of <spa
85708567
<p>It is obvious that there is no easy way of finding minimum of range <span class="arithmatex">$[l, r]$</span> using Fenwick tree, as Fenwick tree can only answer queries of type <span class="arithmatex">$[0, r]$</span>.
85718568
Additionally, each time a value is <code>update</code>'d, the new value has to be smaller than the current value.
85728569
Both significant limitations are because the <span class="arithmatex">$min$</span> operation together with the set of integers doesn't form a group, as there are no inverse elements.</p>
8573-
<div class="tabbed-set tabbed-alternate" data-tabs="4:1"><input checked="checked" id="__tabbed_4_1" name="__tabbed_4" type="radio" /><div class="tabbed-labels"><label for="__tabbed_4_1">C++</label></div>
8570+
<div class="tabbed-set tabbed-alternate" data-tabs="3:2"><input checked="checked" id="__tabbed_3_1" name="__tabbed_3" type="radio" /><input id="__tabbed_3_2" name="__tabbed_3" type="radio" /><div class="tabbed-labels"><label for="__tabbed_3_1">C++</label><label for="__tabbed_3_2">Python</label></div>
85748571
<div class="tabbed-content">
8575-
<div class="tabbed-block"></div>
8576-
</div>
8577-
</div>
8572+
<div class="tabbed-block">
85788573
<div class="highlight"><pre><span></span><code><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">FenwickTreeMin</span><span class="w"> </span><span class="p">{</span>
85798574
<span class="w"> </span><span class="n">vector</span><span class="o">&lt;</span><span class="kt">int</span><span class="o">&gt;</span><span class="w"> </span><span class="n">bit</span><span class="p">;</span>
85808575
<span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">n</span><span class="p">;</span>
@@ -8603,8 +8598,7 @@ <h3 id="finding-minimum-of-0-r-in-one-dimensional-array">Finding minimum of <spa
86038598
<span class="w"> </span><span class="p">}</span>
86048599
<span class="w"> </span><span class="p">};</span>
86058600
</code></pre></div>
8606-
<div class="tabbed-set tabbed-alternate" data-tabs="5:1"><input checked="checked" id="__tabbed_5_1" name="__tabbed_5" type="radio" /><div class="tabbed-labels"><label for="__tabbed_5_1">Python</label></div>
8607-
<div class="tabbed-content">
8601+
</div>
86088602
<div class="tabbed-block">
86098603
<div class="highlight"><pre><span></span><code><span class="k">class</span><span class="w"> </span><span class="nc">FenwickTreeMin</span><span class="p">:</span>
86108604

@@ -8643,7 +8637,7 @@ <h3 id="finding-minimum-of-0-r-in-one-dimensional-array">Finding minimum of <spa
86438637
The implementation is also a lot harder compared to the normal implementation for sums.</p>
86448638
<h3 id="finding-sum-in-two-dimensional-array">Finding sum in two-dimensional array<a class="headerlink" href="#finding-sum-in-two-dimensional-array" title="Permanent link">&para;</a></h3>
86458639
<p>As claimed before, it is very easy to implement Fenwick Tree for multidimensional array.</p>
8646-
<div class="tabbed-set tabbed-alternate" data-tabs="6:2"><input checked="checked" id="__tabbed_6_1" name="__tabbed_6" type="radio" /><input id="__tabbed_6_2" name="__tabbed_6" type="radio" /><div class="tabbed-labels"><label for="__tabbed_6_1">C++</label><label for="__tabbed_6_2">Python</label></div>
8640+
<div class="tabbed-set tabbed-alternate" data-tabs="4:2"><input checked="checked" id="__tabbed_4_1" name="__tabbed_4" type="radio" /><input id="__tabbed_4_2" name="__tabbed_4" type="radio" /><div class="tabbed-labels"><label for="__tabbed_4_1">C++</label><label for="__tabbed_4_2">Python</label></div>
86478641
<div class="tabbed-content">
86488642
<div class="tabbed-block">
86498643
<div class="highlight"><pre><span></span><code><span class="k">struct</span><span class="w"> </span><span class="nc">FenwickTree2D</span><span class="w"> </span><span class="p">{</span>
@@ -8703,7 +8697,7 @@ <h3 id="one-based-indexing-approach">One-based indexing approach<a class="header
87038697
<p>For this approach we change the requirements and definition for <span class="arithmatex">$T[]$</span> and <span class="arithmatex">$g()$</span> a little bit.
87048698
We want <span class="arithmatex">$T[i]$</span> to store the sum of <span class="arithmatex">$[g(i)+1; i]$</span>.
87058699
This changes the implementation a little bit, and allows for a similar nice definition for <span class="arithmatex">$g(i)$</span>:</p>
8706-
<div class="tabbed-set tabbed-alternate" data-tabs="7:2"><input checked="checked" id="__tabbed_7_1" name="__tabbed_7" type="radio" /><input id="__tabbed_7_2" name="__tabbed_7" type="radio" /><div class="tabbed-labels"><label for="__tabbed_7_1">C++</label><label for="__tabbed_7_2">Python</label></div>
8700+
<div class="tabbed-set tabbed-alternate" data-tabs="5:2"><input checked="checked" id="__tabbed_5_1" name="__tabbed_5" type="radio" /><input id="__tabbed_5_2" name="__tabbed_5" type="radio" /><div class="tabbed-labels"><label for="__tabbed_5_1">C++</label><label for="__tabbed_5_2">Python</label></div>
87078701
<div class="tabbed-content">
87088702
<div class="tabbed-block">
87098703
<div class="highlight"><pre><span></span><code><span class="kt">int</span><span class="w"> </span><span class="nf">sum</span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">r</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
@@ -8752,7 +8746,7 @@ <h3 id="one-based-indexing-approach">One-based indexing approach<a class="header
87528746
<div class="arithmatex">$$h(i) = i + (i ~\&amp;~ (-i)).$$</div>
87538747
<p>As you can see, the main benefit of this approach is that the binary operations complement each other very nicely.</p>
87548748
<p>The following implementation can be used like the other implementations, however it uses one-based indexing internally.</p>
8755-
<div class="tabbed-set tabbed-alternate" data-tabs="8:2"><input checked="checked" id="__tabbed_8_1" name="__tabbed_8" type="radio" /><input id="__tabbed_8_2" name="__tabbed_8" type="radio" /><div class="tabbed-labels"><label for="__tabbed_8_1">C++</label><label for="__tabbed_8_2">Python</label></div>
8749+
<div class="tabbed-set tabbed-alternate" data-tabs="6:2"><input checked="checked" id="__tabbed_6_1" name="__tabbed_6" type="radio" /><input id="__tabbed_6_2" name="__tabbed_6" type="radio" /><div class="tabbed-labels"><label for="__tabbed_6_1">C++</label><label for="__tabbed_6_2">Python</label></div>
87568750
<div class="tabbed-content">
87578751
<div class="tabbed-block">
87588752
<div class="highlight"><pre><span></span><code><span class="k">struct</span><span class="w"> </span><span class="nc">FenwickTreeOneBasedIndexing</span><span class="w"> </span><span class="p">{</span>
@@ -8839,7 +8833,7 @@ <h3 id="2-range-update-and-point-query">2. Range Update and Point Query<a class=
88398833
If <span class="arithmatex">$i \in [l, r]$</span>, then we get the answer <span class="arithmatex">$x$</span> because of the first update operation.
88408834
And if <span class="arithmatex">$i &gt; r$</span>, then the second update operation will cancel the effect of first one.</p>
88418835
<p>The following implementation uses one-based indexing.</p>
8842-
<div class="tabbed-set tabbed-alternate" data-tabs="9:2"><input checked="checked" id="__tabbed_9_1" name="__tabbed_9" type="radio" /><input id="__tabbed_9_2" name="__tabbed_9" type="radio" /><div class="tabbed-labels"><label for="__tabbed_9_1">C++</label><label for="__tabbed_9_2">Python</label></div>
8836+
<div class="tabbed-set tabbed-alternate" data-tabs="7:2"><input checked="checked" id="__tabbed_7_1" name="__tabbed_7" type="radio" /><input id="__tabbed_7_2" name="__tabbed_7" type="radio" /><div class="tabbed-labels"><label for="__tabbed_7_1">C++</label><label for="__tabbed_7_2">Python</label></div>
88438837
<div class="tabbed-content">
88448838
<div class="tabbed-block">
88458839
<div class="highlight"><pre><span></span><code><span class="kt">void</span><span class="w"> </span><span class="nf">add</span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">idx</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">val</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
@@ -8887,7 +8881,7 @@ <h3 id="3-range-update-and-range-query">3. Range Update and Range Query<a class=
88878881
<p>Suppose that we want to increment the interval <span class="arithmatex">$[l, r]$</span> by the value <span class="arithmatex">$x$</span>.
88888882
Similarly as in the previous method, we perform two point updates on <span class="arithmatex">$B_1$</span>: <code>add(B1, l, x)</code> and <code>add(B1, r+1, -x)</code>.
88898883
And we also update <span class="arithmatex">$B_2$</span>. The details will be explained later.</p>
8890-
<div class="tabbed-set tabbed-alternate" data-tabs="10:2"><input checked="checked" id="__tabbed_10_1" name="__tabbed_10" type="radio" /><input id="__tabbed_10_2" name="__tabbed_10" type="radio" /><div class="tabbed-labels"><label for="__tabbed_10_1">C++</label><label for="__tabbed_10_2">Python</label></div>
8884+
<div class="tabbed-set tabbed-alternate" data-tabs="8:2"><input checked="checked" id="__tabbed_8_1" name="__tabbed_8" type="radio" /><input id="__tabbed_8_2" name="__tabbed_8" type="radio" /><div class="tabbed-labels"><label for="__tabbed_8_1">C++</label><label for="__tabbed_8_2">Python</label></div>
88918885
<div class="tabbed-content">
88928886
<div class="tabbed-block">
88938887
<p>```cpp
@@ -8931,7 +8925,7 @@ <h3 id="3-range-update-and-range-query">3. Range Update and Range Query<a class=
89318925
<p>The last expression is exactly equal to the required terms.
89328926
Thus we can use <span class="arithmatex">$B_2$</span> for shaving off extra terms when we multiply <span class="arithmatex">$B_1[i]\times i$</span>.</p>
89338927
<p>We can find arbitrary range sums by computing the prefix sums for <span class="arithmatex">$l-1$</span> and <span class="arithmatex">$r$</span> and taking the difference of them again.</p>
8934-
<div class="tabbed-set tabbed-alternate" data-tabs="11:2"><input checked="checked" id="__tabbed_11_1" name="__tabbed_11" type="radio" /><input id="__tabbed_11_2" name="__tabbed_11" type="radio" /><div class="tabbed-labels"><label for="__tabbed_11_1">C++</label><label for="__tabbed_11_2">Python</label></div>
8928+
<div class="tabbed-set tabbed-alternate" data-tabs="9:2"><input checked="checked" id="__tabbed_9_1" name="__tabbed_9" type="radio" /><input id="__tabbed_9_2" name="__tabbed_9" type="radio" /><div class="tabbed-labels"><label for="__tabbed_9_1">C++</label><label for="__tabbed_9_2">Python</label></div>
89358929
<div class="tabbed-content">
89368930
<div class="tabbed-block">
89378931
<div class="highlight"><pre><span></span><code><span class="kt">void</span><span class="w"> </span><span class="nf">add</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o">&lt;</span><span class="kt">int</span><span class="o">&gt;</span><span class="w"> </span><span class="o">&amp;</span><span class="n">b</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">idx</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">x</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>

1563/data_structures/segment_tree.html

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8253,6 +8253,14 @@
82538253

82548254

82558255

8256+
8257+
8258+
8259+
8260+
8261+
8262+
8263+
82568264

82578265

82588266

0 commit comments

Comments
 (0)