@@ -75321,7 +75321,7 @@ <h3 id="solution-1-binary-indexed-tree">Solution 1: Binary Indexed Tree</h3>
75321
75321
<p>We can use a Binary Indexed Tree (also known as a Fenwick Tree) to maintain the count of numbers that are less than or equal to the current number among the added numbers.</p>
75322
75322
<p>We create a Binary Indexed Tree with a length of $50010$. For the <code>track</code> method, we increment the current number and add it to the Binary Indexed Tree. For the <code>getRankOfNumber</code> method, we directly query the count of numbers that are less than or equal to $x + 1$ in the Binary Indexed Tree.</p>
75323
75323
<p>In terms of time complexity, both the update and query operations of the Binary Indexed Tree have a time complexity of $O(\log n)$, where $n$ is the length of the Binary Indexed Tree.</p>
75324
- <div class="tabbed-set tabbed-alternate" data-tabs="1:5 "><input checked="checked" id="__tabbed_1_1" name="__tabbed_1" type="radio" /><input id="__tabbed_1_2" name="__tabbed_1" type="radio" /><input id="__tabbed_1_3" name="__tabbed_1" type="radio" /><input id="__tabbed_1_4" name="__tabbed_1" type="radio" /><input id="__tabbed_1_5" name="__tabbed_1" type="radio" /><div class="tabbed-labels"><label for="__tabbed_1_1">Python3</label><label for="__tabbed_1_2">Java</label><label for="__tabbed_1_3">C++</label><label for="__tabbed_1_4">Go</label><label for="__tabbed_1_5">TypeScript</label></div>
75324
+ <div class="tabbed-set tabbed-alternate" data-tabs="1:6 "><input checked="checked" id="__tabbed_1_1" name="__tabbed_1" type="radio" /><input id="__tabbed_1_2" name="__tabbed_1" type="radio" /><input id="__tabbed_1_3" name="__tabbed_1" type="radio" /><input id="__tabbed_1_4" name="__tabbed_1" type="radio" /><input id="__tabbed_1_5" name="__tabbed_1" type="radio" /><input id="__tabbed_1_6" name="__tabbed_1" type="radio" />< div class="tabbed-labels"><label for="__tabbed_1_1">Python3</label><label for="__tabbed_1_2">Java</label><label for="__tabbed_1_3">C++</label><label for="__tabbed_1_4">Go</label><label for="__tabbed_1_5">TypeScript</label><label for="__tabbed_1_6">Swift </label></div>
75325
75325
<div class="tabbed-content">
75326
75326
<div class="tabbed-block">
75327
75327
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"> 1</span>
@@ -75771,6 +75771,94 @@ <h3 id="solution-1-binary-indexed-tree">Solution 1: Binary Indexed Tree</h3>
75771
75771
<span class="cm"> */</span>
75772
75772
</code></pre></div></td></tr></table></div>
75773
75773
</div>
75774
+ <div class="tabbed-block">
75775
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"> 1</span>
75776
+ <span class="normal"> 2</span>
75777
+ <span class="normal"> 3</span>
75778
+ <span class="normal"> 4</span>
75779
+ <span class="normal"> 5</span>
75780
+ <span class="normal"> 6</span>
75781
+ <span class="normal"> 7</span>
75782
+ <span class="normal"> 8</span>
75783
+ <span class="normal"> 9</span>
75784
+ <span class="normal">10</span>
75785
+ <span class="normal">11</span>
75786
+ <span class="normal">12</span>
75787
+ <span class="normal">13</span>
75788
+ <span class="normal">14</span>
75789
+ <span class="normal">15</span>
75790
+ <span class="normal">16</span>
75791
+ <span class="normal">17</span>
75792
+ <span class="normal">18</span>
75793
+ <span class="normal">19</span>
75794
+ <span class="normal">20</span>
75795
+ <span class="normal">21</span>
75796
+ <span class="normal">22</span>
75797
+ <span class="normal">23</span>
75798
+ <span class="normal">24</span>
75799
+ <span class="normal">25</span>
75800
+ <span class="normal">26</span>
75801
+ <span class="normal">27</span>
75802
+ <span class="normal">28</span>
75803
+ <span class="normal">29</span>
75804
+ <span class="normal">30</span>
75805
+ <span class="normal">31</span>
75806
+ <span class="normal">32</span>
75807
+ <span class="normal">33</span>
75808
+ <span class="normal">34</span>
75809
+ <span class="normal">35</span>
75810
+ <span class="normal">36</span>
75811
+ <span class="normal">37</span>
75812
+ <span class="normal">38</span>
75813
+ <span class="normal">39</span>
75814
+ <span class="normal">40</span>
75815
+ <span class="normal">41</span>
75816
+ <span class="normal">42</span>
75817
+ <span class="normal">43</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="kd">class</span> <span class="nc">BinaryIndexedTree</span> <span class="p">{</span>
75818
+ <span class="kd">private</span> <span class="kd">var</span> <span class="nv">n</span><span class="p">:</span> <span class="nb">Int</span>
75819
+ <span class="kd">private</span> <span class="kd">var</span> <span class="nv">c</span><span class="p">:</span> <span class="p">[</span><span class="nb">Int</span><span class="p">]</span>
75820
+
75821
+ <span class="kd">init</span><span class="p">(</span><span class="kc">_</span> <span class="n">n</span><span class="p">:</span> <span class="nb">Int</span><span class="p">)</span> <span class="p">{</span>
75822
+ <span class="kc">self</span><span class="p">.</span><span class="n">n</span> <span class="p">=</span> <span class="n">n</span>
75823
+ <span class="kc">self</span><span class="p">.</span><span class="n">c</span> <span class="p">=</span> <span class="nb">Array</span><span class="p">(</span><span class="n">repeating</span><span class="p">:</span> <span class="mi">0</span><span class="p">,</span> <span class="bp">count</span><span class="p">:</span> <span class="n">n</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span>
75824
+ <span class="p">}</span>
75825
+
75826
+ <span class="kd">func</span> <span class="nf">update</span><span class="p">(</span><span class="kc">_</span> <span class="n">x</span><span class="p">:</span> <span class="nb">Int</span><span class="p">,</span> <span class="kc">_</span> <span class="n">delta</span><span class="p">:</span> <span class="nb">Int</span><span class="p">)</span> <span class="p">{</span>
75827
+ <span class="kd">var</span> <span class="nv">idx</span> <span class="p">=</span> <span class="n">x</span>
75828
+ <span class="k">while</span> <span class="n">idx</span> <span class="o"><=</span> <span class="n">n</span> <span class="p">{</span>
75829
+ <span class="n">c</span><span class="p">[</span><span class="n">idx</span><span class="p">]</span> <span class="o">+=</span> <span class="n">delta</span>
75830
+ <span class="n">idx</span> <span class="o">+=</span> <span class="p">(</span><span class="n">idx</span> <span class="o">&</span> <span class="o">-</span><span class="n">idx</span><span class="p">)</span>
75831
+ <span class="p">}</span>
75832
+ <span class="p">}</span>
75833
+
75834
+ <span class="kd">func</span> <span class="nf">query</span><span class="p">(</span><span class="kc">_</span> <span class="n">x</span><span class="p">:</span> <span class="nb">Int</span><span class="p">)</span> <span class="p">-></span> <span class="nb">Int</span> <span class="p">{</span>
75835
+ <span class="kd">var</span> <span class="nv">sum</span> <span class="p">=</span> <span class="mi">0</span>
75836
+ <span class="kd">var</span> <span class="nv">idx</span> <span class="p">=</span> <span class="n">x</span>
75837
+ <span class="k">while</span> <span class="n">idx</span> <span class="o">></span> <span class="mi">0</span> <span class="p">{</span>
75838
+ <span class="n">sum</span> <span class="o">+=</span> <span class="n">c</span><span class="p">[</span><span class="n">idx</span><span class="p">]</span>
75839
+ <span class="n">idx</span> <span class="o">-=</span> <span class="p">(</span><span class="n">idx</span> <span class="o">&</span> <span class="o">-</span><span class="n">idx</span><span class="p">)</span>
75840
+ <span class="p">}</span>
75841
+ <span class="k">return</span> <span class="n">sum</span>
75842
+ <span class="p">}</span>
75843
+ <span class="p">}</span>
75844
+
75845
+ <span class="kd">class</span> <span class="nc">StreamRank</span> <span class="p">{</span>
75846
+ <span class="kd">private</span> <span class="kd">var</span> <span class="nv">tree</span><span class="p">:</span> <span class="n">BinaryIndexedTree</span>
75847
+
75848
+ <span class="kd">init</span><span class="p">()</span> <span class="p">{</span>
75849
+ <span class="n">tree</span> <span class="p">=</span> <span class="n">BinaryIndexedTree</span><span class="p">(</span><span class="mi">50010</span><span class="p">)</span>
75850
+ <span class="p">}</span>
75851
+
75852
+ <span class="kd">func</span> <span class="nf">track</span><span class="p">(</span><span class="kc">_</span> <span class="n">x</span><span class="p">:</span> <span class="nb">Int</span><span class="p">)</span> <span class="p">{</span>
75853
+ <span class="n">tree</span><span class="p">.</span><span class="n">update</span><span class="p">(</span><span class="n">x</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
75854
+ <span class="p">}</span>
75855
+
75856
+ <span class="kd">func</span> <span class="nf">getRankOfNumber</span><span class="p">(</span><span class="kc">_</span> <span class="n">x</span><span class="p">:</span> <span class="nb">Int</span><span class="p">)</span> <span class="p">-></span> <span class="nb">Int</span> <span class="p">{</span>
75857
+ <span class="k">return</span> <span class="n">tree</span><span class="p">.</span><span class="n">query</span><span class="p">(</span><span class="n">x</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span>
75858
+ <span class="p">}</span>
75859
+ <span class="p">}</span>
75860
+ </code></pre></div></td></tr></table></div>
75861
+ </div>
75774
75862
</div>
75775
75863
</div>
75776
75864
<!-- end -->
@@ -75802,6 +75890,11 @@ <h3 id="solution-1-binary-indexed-tree">Solution 1: Binary Indexed Tree</h3>
75802
75890
75803
75891
<nav>
75804
75892
75893
+ <a href="https://github.com/klever34" class="md-author" title="@klever34">
75894
+
75895
+ <img src="https://avatars.githubusercontent.com/u/12745225?v=4&size=72" alt="klever34">
75896
+ </a>
75897
+
75805
75898
<a href="https://github.com/yanglbme" class="md-author" title="@yanglbme">
75806
75899
75807
75900
<img src="https://avatars.githubusercontent.com/u/21008209?v=4&size=72" alt="yanglbme">
0 commit comments