Documentation for c26eea874d

This commit is contained in:
realstealthninja
2025-05-19 11:38:33 +00:00
parent c7a9a42397
commit 14583a2f33
2829 changed files with 30266 additions and 21669 deletions

View File

@@ -4,7 +4,7 @@
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.12.0"/>
<meta name="generator" content="Doxygen 1.13.2"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>TheAlgorithms/C++: range_queries/heavy_light_decomposition.cpp Source File</title>
<link rel="icon" href="../../favicon.svg" type="image/x-icon" />
@@ -60,7 +60,7 @@ window.MathJax = {
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.12.0 -->
<!-- Generated by Doxygen 1.13.2 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "../../search/",'.html');
@@ -124,7 +124,8 @@ $(function(){initNavTree('d2/de9/heavy__light__decomposition_8cpp_source.html','
<div class="headertitle"><div class="title">heavy_light_decomposition.cpp</div></div>
</div><!--header-->
<div class="contents">
<a href="../../d2/de9/heavy__light__decomposition_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span> </div>
<a href="../../d2/de9/heavy__light__decomposition_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span></div>
<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span> </div>
<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span><span class="preprocessor">#include &lt;algorithm&gt;</span></div>
<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span><span class="preprocessor">#include &lt;cassert&gt;</span></div>
<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span><span class="preprocessor">#include &lt;cmath&gt;</span></div>
@@ -134,11 +135,11 @@ $(function(){initNavTree('d2/de9/heavy__light__decomposition_8cpp_source.html','
<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span><span class="preprocessor">#include &lt;numeric&gt;</span></div>
<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span><span class="preprocessor">#include &lt;string&gt;</span></div>
<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span><span class="preprocessor">#include &lt;vector&gt;</span></div>
<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span> </div>
<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span></div>
<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span><span class="keyword">namespace </span><a class="code hl_namespace" href="../../dd/d69/namespacerange__queries.html">range_queries</a> {</div>
<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span><span class="keyword">namespace </span><a class="code hl_namespace" href="../../db/d6f/namespaceheavy__light__decomposition.html">heavy_light_decomposition</a> {</div>
<div class="foldopen" id="foldopen00078" data-start="{" data-end="};">
<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"><a class="line" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html"> 78</a></span><span class="keyword">template</span> &lt;<span class="keyword">typename</span> X&gt; <span class="keyword">class </span><a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">Tree</a> {</div>
<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"><a class="line" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html"> 78</a></span><span class="keyword">template</span> &lt;<span class="keyword">typename</span> X&gt; <span class="keyword">class </span><a class="code hl_function" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#a835fb2bbb27307b8cacad9b287968bc1">Tree</a> {</div>
<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span> <span class="comment">//</span></div>
<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span> </div>
<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span><span class="keyword">private</span>:</div>
@@ -153,8 +154,8 @@ $(function(){initNavTree('d2/de9/heavy__light__decomposition_8cpp_source.html','
<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span> </div>
<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"><a class="line" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#aa6c37e840355b9fb2105181c578694e8"> 91</a></span> <span class="keywordtype">int</span> <a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#aa6c37e840355b9fb2105181c578694e8">t_root</a>; </div>
<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"><a class="line" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#a135b7952593c9b1aae38fcaf1cc1abf7"> 92</a></span> std::vector&lt;X&gt; <a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#a135b7952593c9b1aae38fcaf1cc1abf7">t_val</a>; </div>
<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span> <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt; <span class="keyword">friend</span> <span class="keyword">class </span><a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">HLD</a>;</div>
<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span> </div>
<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span> <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt; <span class="keyword">friend</span> <span class="keyword">class </span>HLD;</div>
<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span></div>
<div class="foldopen" id="foldopen00101" data-start="{" data-end="}">
<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"><a class="line" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#aa339c31ec74cd86a4842a8b09653d460"> 101</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#aa339c31ec74cd86a4842a8b09653d460">dfs_size</a>(<span class="keywordtype">int</span> u, <span class="keywordtype">int</span> p = -1) {</div>
<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keywordtype">int</span> &amp;v : <a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#ab1aeaefa1bd97b867c652ba916fbdb43">t_adj</a>[u]) {</div>
@@ -165,7 +166,7 @@ $(function(){initNavTree('d2/de9/heavy__light__decomposition_8cpp_source.html','
<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span> }</div>
<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span> }</div>
</div>
<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span> </div>
<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span></div>
<div class="foldopen" id="foldopen00116" data-start="{" data-end="}">
<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"><a class="line" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#ae8de7aefcb6635d3dacdd174cd4890c4"> 116</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#ae8de7aefcb6635d3dacdd174cd4890c4">dfs_lca</a>(<span class="keywordtype">int</span> u, <span class="keywordtype">int</span> p = -1) {</div>
<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span> <a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#a350157a5fb79f76fceae33fc84171203">t_par</a>[u][0] = p;</div>
@@ -199,23 +200,23 @@ $(function(){initNavTree('d2/de9/heavy__light__decomposition_8cpp_source.html','
<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span> <a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#a135b7952593c9b1aae38fcaf1cc1abf7">t_val</a>.resize(<a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#ae4630fa70a80a1dc65a875488a67178a">t_nodes</a>);</div>
<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span> }</div>
</div>
<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span> </div>
<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span></div>
<div class="foldopen" id="foldopen00157" data-start="{" data-end="}">
<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"><a class="line" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#a79ab4601c4a95c0902ac04e779e5f54d"> 157</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#a79ab4601c4a95c0902ac04e779e5f54d">add_edge</a>(<span class="keyword">const</span> <span class="keywordtype">int</span> u, <span class="keyword">const</span> <span class="keywordtype">int</span> v) {</div>
<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"> 158</span> <a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#ab1aeaefa1bd97b867c652ba916fbdb43">t_adj</a>[u].push_back(v);</div>
<div class="line"><a id="l00159" name="l00159"></a><span class="lineno"> 159</span> <a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#ab1aeaefa1bd97b867c652ba916fbdb43">t_adj</a>[v].push_back(u);</div>
<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"> 160</span> }</div>
</div>
<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"> 161</span> </div>
<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"> 161</span></div>
<div class="line"><a id="l00167" name="l00167"></a><span class="lineno"><a class="line" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#ab916d554afa8ca5230b4310c2c69fae0"> 167</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#ab916d554afa8ca5230b4310c2c69fae0">change_root</a>(<span class="keywordtype">int</span> new_root) { <a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#aa6c37e840355b9fb2105181c578694e8">t_root</a> = new_root; }</div>
<div class="line"><a id="l00168" name="l00168"></a><span class="lineno"> 168</span> </div>
<div class="line"><a id="l00168" name="l00168"></a><span class="lineno"> 168</span></div>
<div class="foldopen" id="foldopen00175" data-start="{" data-end="}">
<div class="line"><a id="l00175" name="l00175"></a><span class="lineno"><a class="line" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#a04cd96efaba147b19d3afc769b90ff70"> 175</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#a04cd96efaba147b19d3afc769b90ff70">set_node_val</a>(<span class="keyword">const</span> std::vector&lt;X&gt; &amp;node_val) {</div>
<div class="line"><a id="l00176" name="l00176"></a><span class="lineno"> 176</span> assert(<span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span>(node_val.size()) == <a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#ae4630fa70a80a1dc65a875488a67178a">t_nodes</a>);</div>
<div class="line"><a id="l00177" name="l00177"></a><span class="lineno"> 177</span> <a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#a135b7952593c9b1aae38fcaf1cc1abf7">t_val</a> = node_val;</div>
<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"> 178</span> }</div>
</div>
<div class="line"><a id="l00179" name="l00179"></a><span class="lineno"> 179</span> </div>
<div class="line"><a id="l00179" name="l00179"></a><span class="lineno"> 179</span></div>
<div class="foldopen" id="foldopen00186" data-start="{" data-end="}">
<div class="line"><a id="l00186" name="l00186"></a><span class="lineno"><a class="line" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#ad22d760a5a33545a70e7ea5e1786c8dc"> 186</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#ad22d760a5a33545a70e7ea5e1786c8dc">init</a>() {</div>
<div class="line"><a id="l00187" name="l00187"></a><span class="lineno"> 187</span> assert(<a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#ae4630fa70a80a1dc65a875488a67178a">t_nodes</a> &gt; 0);</div>
@@ -223,7 +224,7 @@ $(function(){initNavTree('d2/de9/heavy__light__decomposition_8cpp_source.html','
<div class="line"><a id="l00189" name="l00189"></a><span class="lineno"> 189</span> <a class="code hl_function" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#ae8de7aefcb6635d3dacdd174cd4890c4">dfs_lca</a>(<a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#aa6c37e840355b9fb2105181c578694e8">t_root</a>);</div>
<div class="line"><a id="l00190" name="l00190"></a><span class="lineno"> 190</span> }</div>
</div>
<div class="line"><a id="l00191" name="l00191"></a><span class="lineno"> 191</span> </div>
<div class="line"><a id="l00191" name="l00191"></a><span class="lineno"> 191</span></div>
<div class="foldopen" id="foldopen00200" data-start="{" data-end="}">
<div class="line"><a id="l00200" name="l00200"></a><span class="lineno"><a class="line" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#ac7761255f2ba06b398b9aae5e4dce5f3"> 200</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#ac7761255f2ba06b398b9aae5e4dce5f3">lift</a>(<span class="keywordtype">int</span> *<span class="keyword">const</span> p, <span class="keywordtype">int</span> dist) {</div>
<div class="line"><a id="l00201" name="l00201"></a><span class="lineno"> 201</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> k = 0; k &lt; <a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#ab2ab020f798d00be2613ecf63074b7c1">t_maxlift</a>; k++) {</div>
@@ -237,14 +238,14 @@ $(function(){initNavTree('d2/de9/heavy__light__decomposition_8cpp_source.html','
<div class="line"><a id="l00209" name="l00209"></a><span class="lineno"> 209</span> }</div>
<div class="line"><a id="l00210" name="l00210"></a><span class="lineno"> 210</span> }</div>
</div>
<div class="line"><a id="l00211" name="l00211"></a><span class="lineno"> 211</span> </div>
<div class="line"><a id="l00211" name="l00211"></a><span class="lineno"> 211</span></div>
<div class="foldopen" id="foldopen00218" data-start="{" data-end="}">
<div class="line"><a id="l00218" name="l00218"></a><span class="lineno"><a class="line" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#a8f7bca1746d40f21ad832fcea59aa6c6"> 218</a></span> <span class="keywordtype">int</span> <a class="code hl_function" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#a8f7bca1746d40f21ad832fcea59aa6c6">kth_ancestor</a>(<span class="keywordtype">int</span> p, <span class="keyword">const</span> <span class="keywordtype">int</span> &amp;dist) {</div>
<div class="line"><a id="l00219" name="l00219"></a><span class="lineno"> 219</span> <a class="code hl_function" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#ac7761255f2ba06b398b9aae5e4dce5f3">lift</a>(&amp;p, dist);</div>
<div class="line"><a id="l00220" name="l00220"></a><span class="lineno"> 220</span> <span class="keywordflow">return</span> p;</div>
<div class="line"><a id="l00221" name="l00221"></a><span class="lineno"> 221</span> }</div>
</div>
<div class="line"><a id="l00222" name="l00222"></a><span class="lineno"> 222</span> </div>
<div class="line"><a id="l00222" name="l00222"></a><span class="lineno"> 222</span></div>
<div class="foldopen" id="foldopen00229" data-start="{" data-end="}">
<div class="line"><a id="l00229" name="l00229"></a><span class="lineno"><a class="line" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#ae2b407e64aaf9878fbee7ee6efe9c7d4"> 229</a></span> <span class="keywordtype">int</span> <a class="code hl_function" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#ae2b407e64aaf9878fbee7ee6efe9c7d4">lca</a>(<span class="keywordtype">int</span> a, <span class="keywordtype">int</span> b) {</div>
<div class="line"><a id="l00230" name="l00230"></a><span class="lineno"> 230</span> assert(a &gt;= 0 and b &gt;= 0 and a &lt; <a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#ae4630fa70a80a1dc65a875488a67178a">t_nodes</a> and b &lt; <a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#ae4630fa70a80a1dc65a875488a67178a">t_nodes</a>);</div>
@@ -268,24 +269,25 @@ $(function(){initNavTree('d2/de9/heavy__light__decomposition_8cpp_source.html','
</div>
<div class="line"><a id="l00248" name="l00248"></a><span class="lineno"> 248</span>};</div>
</div>
<div class="line"><a id="l00249" name="l00249"></a><span class="lineno"> 249</span> </div>
<div class="line"><a id="l00249" name="l00249"></a><span class="lineno"> 249</span></div>
<div class="foldopen" id="foldopen00254" data-start="{" data-end="};">
<div class="line"><a id="l00254" name="l00254"></a><span class="lineno"><a class="line" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html"> 254</a></span><span class="keyword">template</span> &lt;<span class="keyword">typename</span> X&gt; <span class="keyword">class </span><a class="code hl_class" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html">SG</a> {</div>
<div class="line"><a id="l00254" name="l00254"></a><span class="lineno"><a class="line" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html"> 254</a></span><span class="keyword">template</span> &lt;<span class="keyword">typename</span> X&gt; <span class="keyword">class </span><a class="code hl_function" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html#afba5c1225ba04c0025c7786c09ff28f1">SG</a> {</div>
<div class="line"><a id="l00255" name="l00255"></a><span class="lineno"> 255</span><span class="keyword">private</span>:</div>
<div class="line"><a id="l00261" name="l00261"></a><span class="lineno"> 261</span> </div>
<div class="line"><a id="l00262" name="l00262"></a><span class="lineno"><a class="line" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html#afbf8a9cb9449d5ca844f4e141a801e6a"> 262</a></span> std::vector&lt;X&gt; <a class="code hl_variable" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html#afbf8a9cb9449d5ca844f4e141a801e6a">s_tree</a>; </div>
<div class="line"><a id="l00263" name="l00263"></a><span class="lineno"><a class="line" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html#ac6d912bbfafa3a7509f66bbc1729ca25"> 263</a></span> <span class="keywordtype">int</span> <a class="code hl_variable" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html#ac6d912bbfafa3a7509f66bbc1729ca25">s_size</a>; </div>
<div class="line"><a id="l00264" name="l00264"></a><span class="lineno"><a class="line" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html#aa7f93971a9f891e0bbb7023081f379d5"> 264</a></span> X <a class="code hl_variable" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html#aa7f93971a9f891e0bbb7023081f379d5">sret_init</a> = 0; </div>
<div class="line"><a id="l00265" name="l00265"></a><span class="lineno"> 265</span> <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt; <span class="keyword">friend</span> <span class="keyword">class </span><a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">HLD</a>;</div>
<div class="line"><a id="l00266" name="l00266"></a><span class="lineno"> 266</span> </div>
<div class="line"><a id="l00265" name="l00265"></a><span class="lineno"> 265</span> <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt; <span class="keyword">friend</span> <span class="keyword">class </span>HLD;</div>
<div class="line"><a id="l00266" name="l00266"></a><span class="lineno"> 266</span></div>
<div class="line"><a id="l00274" name="l00274"></a><span class="lineno"><a class="line" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html#a41c733f5f5e262b308f7cb95c88c1e74"> 274</a></span> X <a class="code hl_function" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html#a41c733f5f5e262b308f7cb95c88c1e74">combine</a>(X lhs, X rhs) { <span class="keywordflow">return</span> lhs + rhs; }</div>
<div class="line"><a id="l00275" name="l00275"></a><span class="lineno"> 275</span> </div>
<div class="line"><a id="l00275" name="l00275"></a><span class="lineno"> 275</span></div>
<div class="foldopen" id="foldopen00282" data-start="{" data-end="}">
<div class="line"><a id="l00282" name="l00282"></a><span class="lineno"><a class="line" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html#afba5c1225ba04c0025c7786c09ff28f1"> 282</a></span> <span class="keyword">explicit</span> <a class="code hl_function" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html#afba5c1225ba04c0025c7786c09ff28f1">SG</a>(<span class="keywordtype">int</span> size) {</div>
<div class="line"><a id="l00283" name="l00283"></a><span class="lineno"> 283</span> <a class="code hl_variable" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html#ac6d912bbfafa3a7509f66bbc1729ca25">s_size</a> = size;</div>
<div class="line"><a id="l00284" name="l00284"></a><span class="lineno"> 284</span> <a class="code hl_variable" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html#afbf8a9cb9449d5ca844f4e141a801e6a">s_tree</a>.assign(2 * <a class="code hl_variable" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html#ac6d912bbfafa3a7509f66bbc1729ca25">s_size</a>, 0ll);</div>
<div class="line"><a id="l00284" name="l00284"></a><span class="lineno"> 284</span> <a class="code hl_variable" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html#afbf8a9cb9449d5ca844f4e141a801e6a">s_tree</a>.assign(2 * <a class="code hl_variable" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html#ac6d912bbfafa3a7509f66bbc1729ca25">s_size</a>, 0<a class="code hl_define" href="../../d7/d35/matrix__exponentiation_8cpp.html#ae1d1ec9482079231e898236e2b23c9ba">ll</a>);</div>
<div class="line"><a id="l00285" name="l00285"></a><span class="lineno"> 285</span> }</div>
</div>
<div class="line"><a id="l00286" name="l00286"></a><span class="lineno"> 286</span> </div>
<div class="line"><a id="l00286" name="l00286"></a><span class="lineno"> 286</span></div>
<div class="foldopen" id="foldopen00293" data-start="{" data-end="}">
<div class="line"><a id="l00293" name="l00293"></a><span class="lineno"><a class="line" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html#a3c75bf5770790f8eba8cc92227b5400c"> 293</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html#a3c75bf5770790f8eba8cc92227b5400c">update</a>(<span class="keywordtype">int</span> p, X v) {</div>
<div class="line"><a id="l00294" name="l00294"></a><span class="lineno"> 294</span> <span class="keywordflow">for</span> (p += <a class="code hl_variable" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html#ac6d912bbfafa3a7509f66bbc1729ca25">s_size</a>; p &gt; 0; p &gt;&gt;= 1) {</div>
@@ -293,7 +295,7 @@ $(function(){initNavTree('d2/de9/heavy__light__decomposition_8cpp_source.html','
<div class="line"><a id="l00296" name="l00296"></a><span class="lineno"> 296</span> }</div>
<div class="line"><a id="l00297" name="l00297"></a><span class="lineno"> 297</span> }</div>
</div>
<div class="line"><a id="l00298" name="l00298"></a><span class="lineno"> 298</span> </div>
<div class="line"><a id="l00298" name="l00298"></a><span class="lineno"> 298</span></div>
<div class="foldopen" id="foldopen00305" data-start="{" data-end="}">
<div class="line"><a id="l00305" name="l00305"></a><span class="lineno"><a class="line" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html#a1fda852e6e522707fd97f61cdb0a2591"> 305</a></span> X <a class="code hl_function" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html#a1fda852e6e522707fd97f61cdb0a2591">query</a>(<span class="keywordtype">int</span> l, <span class="keywordtype">int</span> r) {</div>
<div class="line"><a id="l00306" name="l00306"></a><span class="lineno"> 306</span> X lhs = <a class="code hl_variable" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html#aa7f93971a9f891e0bbb7023081f379d5">sret_init</a>, rhs = <a class="code hl_variable" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html#aa7f93971a9f891e0bbb7023081f379d5">sret_init</a>;</div>
@@ -308,27 +310,27 @@ $(function(){initNavTree('d2/de9/heavy__light__decomposition_8cpp_source.html','
<div class="line"><a id="l00315" name="l00315"></a><span class="lineno"> 315</span> <span class="keywordflow">return</span> <a class="code hl_function" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html#a41c733f5f5e262b308f7cb95c88c1e74">combine</a>(lhs, rhs);</div>
<div class="line"><a id="l00316" name="l00316"></a><span class="lineno"> 316</span> }</div>
</div>
<div class="line"><a id="l00317" name="l00317"></a><span class="lineno"> 317</span> </div>
<div class="line"><a id="l00317" name="l00317"></a><span class="lineno"> 317</span></div>
<div class="line"><a id="l00329" name="l00329"></a><span class="lineno"><a class="line" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html#ad3b942be27a1b0fe3cff6cb6edf01294"> 329</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html#ad3b942be27a1b0fe3cff6cb6edf01294">set_sret_init</a>(X new_sret_init) { <a class="code hl_variable" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html#aa7f93971a9f891e0bbb7023081f379d5">sret_init</a> = new_sret_init; }</div>
<div class="line"><a id="l00330" name="l00330"></a><span class="lineno"> 330</span>};</div>
</div>
<div class="line"><a id="l00331" name="l00331"></a><span class="lineno"> 331</span> </div>
<div class="line"><a id="l00331" name="l00331"></a><span class="lineno"> 331</span></div>
<div class="foldopen" id="foldopen00336" data-start="{" data-end="};">
<div class="line"><a id="l00336" name="l00336"></a><span class="lineno"><a class="line" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html"> 336</a></span><span class="keyword">template</span> &lt;<span class="keyword">typename</span> X&gt; <span class="keyword">class </span><a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">HLD</a> : <span class="keyword">public</span> <a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">Tree</a>&lt;X&gt;, <span class="keyword">public</span> <a class="code hl_class" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html">SG</a>&lt;X&gt; {</div>
<div class="line"><a id="l00336" name="l00336"></a><span class="lineno"><a class="line" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html"> 336</a></span><span class="keyword">template</span> &lt;<span class="keyword">typename</span> X&gt; <span class="keyword">class </span><a class="code hl_function" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html#a6e486767434e44076c1ac374a22da726">HLD</a> : <span class="keyword">public</span> <a class="code hl_function" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#a835fb2bbb27307b8cacad9b287968bc1">Tree</a>&lt;X&gt;, <span class="keyword">public</span> <a class="code hl_function" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html#afba5c1225ba04c0025c7786c09ff28f1">SG</a>&lt;X&gt; {</div>
<div class="line"><a id="l00337" name="l00337"></a><span class="lineno"> 337</span><span class="keyword">private</span>:</div>
<div class="line"><a id="l00338" name="l00338"></a><span class="lineno"><a class="line" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html#a722cc7cf2c3e4d15583601a48b09776f"> 338</a></span> <span class="keywordtype">int</span> <a class="code hl_variable" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html#a722cc7cf2c3e4d15583601a48b09776f">label</a>; </div>
<div class="line"><a id="l00339" name="l00339"></a><span class="lineno"><a class="line" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html#aa86a91ae0cd7898990a8170a2f2c9cda"> 339</a></span> std::vector&lt;int&gt; <a class="code hl_variable" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html#aa86a91ae0cd7898990a8170a2f2c9cda">h_label</a>, </div>
<div class="line"><a id="l00340" name="l00340"></a><span class="lineno"><a class="line" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html#a84424f180f12b514eaab57a6aa20b104"> 340</a></span> <a class="code hl_variable" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html#a84424f180f12b514eaab57a6aa20b104">h_heavychlid</a>, </div>
<div class="line"><a id="l00341" name="l00341"></a><span class="lineno"><a class="line" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html#a1b336474d17eff1aa4be73d4068dc725"> 341</a></span> <a class="code hl_variable" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html#a1b336474d17eff1aa4be73d4068dc725">h_parent</a>; </div>
<div class="line"><a id="l00342" name="l00342"></a><span class="lineno"> 342</span> </div>
<div class="line"><a id="l00342" name="l00342"></a><span class="lineno"> 342</span></div>
<div class="foldopen" id="foldopen00350" data-start="{" data-end="}">
<div class="line"><a id="l00350" name="l00350"></a><span class="lineno"><a class="line" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html#af64848d6630c39d0f09ce2359cc7c4f8"> 350</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html#af64848d6630c39d0f09ce2359cc7c4f8">dfs_hc</a>(<span class="keywordtype">int</span> u, <span class="keywordtype">int</span> p = -1) {</div>
<div class="line"><a id="l00351" name="l00351"></a><span class="lineno"> 351</span> <span class="keywordtype">int</span> hc_size = -1, hc_id = -1;</div>
<div class="line"><a id="l00352" name="l00352"></a><span class="lineno"> 352</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keywordtype">int</span> &amp;v : <a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">Tree&lt;X&gt;::t_adj</a>[u]) {</div>
<div class="line"><a id="l00352" name="l00352"></a><span class="lineno"> 352</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keywordtype">int</span> &amp;v : <a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#ab1aeaefa1bd97b867c652ba916fbdb43">Tree&lt;X&gt;::t_adj</a>[u]) {</div>
<div class="line"><a id="l00353" name="l00353"></a><span class="lineno"> 353</span> <span class="keywordflow">if</span> (v ^ p) {</div>
<div class="line"><a id="l00354" name="l00354"></a><span class="lineno"> 354</span> <a class="code hl_function" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html#af64848d6630c39d0f09ce2359cc7c4f8">dfs_hc</a>(v, u);</div>
<div class="line"><a id="l00355" name="l00355"></a><span class="lineno"> 355</span> <span class="keywordflow">if</span> (<a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">Tree&lt;X&gt;::t_size</a>[v] &gt; hc_size) {</div>
<div class="line"><a id="l00356" name="l00356"></a><span class="lineno"> 356</span> hc_size = <a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">Tree&lt;X&gt;::t_size</a>[v];</div>
<div class="line"><a id="l00355" name="l00355"></a><span class="lineno"> 355</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#ada1494fccbc7f1f07b2f9be9f7e07ad5">Tree&lt;X&gt;::t_size</a>[v] &gt; hc_size) {</div>
<div class="line"><a id="l00356" name="l00356"></a><span class="lineno"> 356</span> hc_size = <a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#ada1494fccbc7f1f07b2f9be9f7e07ad5">Tree&lt;X&gt;::t_size</a>[v];</div>
<div class="line"><a id="l00357" name="l00357"></a><span class="lineno"> 357</span> hc_id = v;</div>
<div class="line"><a id="l00358" name="l00358"></a><span class="lineno"> 358</span> }</div>
<div class="line"><a id="l00359" name="l00359"></a><span class="lineno"> 359</span> }</div>
@@ -336,49 +338,49 @@ $(function(){initNavTree('d2/de9/heavy__light__decomposition_8cpp_source.html','
<div class="line"><a id="l00361" name="l00361"></a><span class="lineno"> 361</span> <a class="code hl_variable" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html#a84424f180f12b514eaab57a6aa20b104">h_heavychlid</a>[u] = hc_id;</div>
<div class="line"><a id="l00362" name="l00362"></a><span class="lineno"> 362</span> }</div>
</div>
<div class="line"><a id="l00363" name="l00363"></a><span class="lineno"> 363</span> </div>
<div class="line"><a id="l00363" name="l00363"></a><span class="lineno"> 363</span></div>
<div class="foldopen" id="foldopen00371" data-start="{" data-end="}">
<div class="line"><a id="l00371" name="l00371"></a><span class="lineno"><a class="line" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html#a2dfbda148aad0bfaba2ebfda9ebc915a"> 371</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html#a2dfbda148aad0bfaba2ebfda9ebc915a">dfs_par</a>(<span class="keywordtype">int</span> u, <span class="keywordtype">int</span> p = -1) {</div>
<div class="line"><a id="l00372" name="l00372"></a><span class="lineno"> 372</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html#a84424f180f12b514eaab57a6aa20b104">h_heavychlid</a>[u] != -1) {</div>
<div class="line"><a id="l00373" name="l00373"></a><span class="lineno"> 373</span> <a class="code hl_variable" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html#a1b336474d17eff1aa4be73d4068dc725">h_parent</a>[<a class="code hl_variable" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html#a84424f180f12b514eaab57a6aa20b104">h_heavychlid</a>[u]] = <a class="code hl_variable" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html#a1b336474d17eff1aa4be73d4068dc725">h_parent</a>[u];</div>
<div class="line"><a id="l00374" name="l00374"></a><span class="lineno"> 374</span> <a class="code hl_function" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html#a2dfbda148aad0bfaba2ebfda9ebc915a">dfs_par</a>(<a class="code hl_variable" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html#a84424f180f12b514eaab57a6aa20b104">h_heavychlid</a>[u], u);</div>
<div class="line"><a id="l00375" name="l00375"></a><span class="lineno"> 375</span> }</div>
<div class="line"><a id="l00376" name="l00376"></a><span class="lineno"> 376</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keywordtype">int</span> &amp;v : <a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">Tree&lt;X&gt;::t_adj</a>[u]) {</div>
<div class="line"><a id="l00376" name="l00376"></a><span class="lineno"> 376</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keywordtype">int</span> &amp;v : <a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#ab1aeaefa1bd97b867c652ba916fbdb43">Tree&lt;X&gt;::t_adj</a>[u]) {</div>
<div class="line"><a id="l00377" name="l00377"></a><span class="lineno"> 377</span> <span class="keywordflow">if</span> (v ^ p and v ^ <a class="code hl_variable" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html#a84424f180f12b514eaab57a6aa20b104">h_heavychlid</a>[u]) {</div>
<div class="line"><a id="l00378" name="l00378"></a><span class="lineno"> 378</span> <a class="code hl_function" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html#a2dfbda148aad0bfaba2ebfda9ebc915a">dfs_par</a>(v, u);</div>
<div class="line"><a id="l00379" name="l00379"></a><span class="lineno"> 379</span> }</div>
<div class="line"><a id="l00380" name="l00380"></a><span class="lineno"> 380</span> }</div>
<div class="line"><a id="l00381" name="l00381"></a><span class="lineno"> 381</span> }</div>
</div>
<div class="line"><a id="l00382" name="l00382"></a><span class="lineno"> 382</span> </div>
<div class="line"><a id="l00382" name="l00382"></a><span class="lineno"> 382</span></div>
<div class="foldopen" id="foldopen00390" data-start="{" data-end="}">
<div class="line"><a id="l00390" name="l00390"></a><span class="lineno"><a class="line" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html#a0579062b384e54b611b80c6337c7f2c8"> 390</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html#a0579062b384e54b611b80c6337c7f2c8">dfs_labels</a>(<span class="keywordtype">int</span> u, <span class="keywordtype">int</span> p = -1) {</div>
<div class="line"><a id="l00391" name="l00391"></a><span class="lineno"> 391</span> <a class="code hl_variable" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html#aa86a91ae0cd7898990a8170a2f2c9cda">h_label</a>[u] = <a class="code hl_variable" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html#a722cc7cf2c3e4d15583601a48b09776f">label</a>++;</div>
<div class="line"><a id="l00392" name="l00392"></a><span class="lineno"> 392</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html#a84424f180f12b514eaab57a6aa20b104">h_heavychlid</a>[u] != -1) {</div>
<div class="line"><a id="l00393" name="l00393"></a><span class="lineno"> 393</span> <a class="code hl_function" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html#a0579062b384e54b611b80c6337c7f2c8">dfs_labels</a>(<a class="code hl_variable" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html#a84424f180f12b514eaab57a6aa20b104">h_heavychlid</a>[u], u);</div>
<div class="line"><a id="l00394" name="l00394"></a><span class="lineno"> 394</span> }</div>
<div class="line"><a id="l00395" name="l00395"></a><span class="lineno"> 395</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keywordtype">int</span> &amp;v : <a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">Tree&lt;X&gt;::t_adj</a>[u]) {</div>
<div class="line"><a id="l00395" name="l00395"></a><span class="lineno"> 395</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keywordtype">int</span> &amp;v : <a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#ab1aeaefa1bd97b867c652ba916fbdb43">Tree&lt;X&gt;::t_adj</a>[u]) {</div>
<div class="line"><a id="l00396" name="l00396"></a><span class="lineno"> 396</span> <span class="keywordflow">if</span> (v ^ p and v ^ <a class="code hl_variable" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html#a84424f180f12b514eaab57a6aa20b104">h_heavychlid</a>[u]) {</div>
<div class="line"><a id="l00397" name="l00397"></a><span class="lineno"> 397</span> <a class="code hl_function" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html#a0579062b384e54b611b80c6337c7f2c8">dfs_labels</a>(v, u);</div>
<div class="line"><a id="l00398" name="l00398"></a><span class="lineno"> 398</span> }</div>
<div class="line"><a id="l00399" name="l00399"></a><span class="lineno"> 399</span> }</div>
<div class="line"><a id="l00400" name="l00400"></a><span class="lineno"> 400</span> }</div>
</div>
<div class="line"><a id="l00401" name="l00401"></a><span class="lineno"> 401</span> </div>
<div class="line"><a id="l00401" name="l00401"></a><span class="lineno"> 401</span></div>
<div class="foldopen" id="foldopen00409" data-start="{" data-end="}">
<div class="line"><a id="l00409" name="l00409"></a><span class="lineno"><a class="line" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html#a7d5b40c076347a6aabfb37a0590f2f24"> 409</a></span> X <a class="code hl_function" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html#a7d5b40c076347a6aabfb37a0590f2f24">chain_query</a>(<span class="keywordtype">int</span> a, <span class="keywordtype">int</span> b) {</div>
<div class="line"><a id="l00410" name="l00410"></a><span class="lineno"> 410</span> X ret = <a class="code hl_class" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html">SG&lt;X&gt;::sret_init</a>;</div>
<div class="line"><a id="l00411" name="l00411"></a><span class="lineno"> 411</span> <span class="keywordflow">if</span> (<a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">Tree&lt;X&gt;::t_depth</a>[a] &lt; <a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">Tree&lt;X&gt;::t_depth</a>[b]) {</div>
<div class="line"><a id="l00410" name="l00410"></a><span class="lineno"> 410</span> X ret = <a class="code hl_variable" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html#aa7f93971a9f891e0bbb7023081f379d5">SG&lt;X&gt;::sret_init</a>;</div>
<div class="line"><a id="l00411" name="l00411"></a><span class="lineno"> 411</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#a0efd0b9c564092f443ca97030d866ef1">Tree&lt;X&gt;::t_depth</a>[a] &lt; <a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#a0efd0b9c564092f443ca97030d866ef1">Tree&lt;X&gt;::t_depth</a>[b]) {</div>
<div class="line"><a id="l00412" name="l00412"></a><span class="lineno"> 412</span> std::swap(a, b);</div>
<div class="line"><a id="l00413" name="l00413"></a><span class="lineno"> 413</span> }</div>
<div class="line"><a id="l00414" name="l00414"></a><span class="lineno"> 414</span> <span class="keywordflow">while</span> (<a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">Tree&lt;X&gt;::t_depth</a>[a] &gt;= <a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">Tree&lt;X&gt;::t_depth</a>[b]) {</div>
<div class="line"><a id="l00414" name="l00414"></a><span class="lineno"> 414</span> <span class="keywordflow">while</span> (<a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#a0efd0b9c564092f443ca97030d866ef1">Tree&lt;X&gt;::t_depth</a>[a] &gt;= <a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#a0efd0b9c564092f443ca97030d866ef1">Tree&lt;X&gt;::t_depth</a>[b]) {</div>
<div class="line"><a id="l00415" name="l00415"></a><span class="lineno"> 415</span> <span class="keywordtype">int</span> l = <a class="code hl_variable" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html#aa86a91ae0cd7898990a8170a2f2c9cda">h_label</a>[<a class="code hl_variable" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html#a1b336474d17eff1aa4be73d4068dc725">h_parent</a>[a]];</div>
<div class="line"><a id="l00416" name="l00416"></a><span class="lineno"> 416</span> <span class="keywordtype">int</span> r = <a class="code hl_variable" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html#aa86a91ae0cd7898990a8170a2f2c9cda">h_label</a>[a];</div>
<div class="line"><a id="l00417" name="l00417"></a><span class="lineno"> 417</span> <span class="keywordflow">if</span> (<a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">Tree&lt;X&gt;::t_depth</a>[<a class="code hl_variable" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html#a1b336474d17eff1aa4be73d4068dc725">h_parent</a>[a]] &lt; <a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">Tree&lt;X&gt;::t_depth</a>[b]) {</div>
<div class="line"><a id="l00418" name="l00418"></a><span class="lineno"> 418</span> l += <a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">Tree&lt;X&gt;::t_depth</a>[b] - <a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">Tree&lt;X&gt;::t_depth</a>[<a class="code hl_variable" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html#a1b336474d17eff1aa4be73d4068dc725">h_parent</a>[a]];</div>
<div class="line"><a id="l00417" name="l00417"></a><span class="lineno"> 417</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#a0efd0b9c564092f443ca97030d866ef1">Tree&lt;X&gt;::t_depth</a>[<a class="code hl_variable" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html#a1b336474d17eff1aa4be73d4068dc725">h_parent</a>[a]] &lt; <a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#a0efd0b9c564092f443ca97030d866ef1">Tree&lt;X&gt;::t_depth</a>[b]) {</div>
<div class="line"><a id="l00418" name="l00418"></a><span class="lineno"> 418</span> l += <a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#a0efd0b9c564092f443ca97030d866ef1">Tree&lt;X&gt;::t_depth</a>[b] - <a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#a0efd0b9c564092f443ca97030d866ef1">Tree&lt;X&gt;::t_depth</a>[<a class="code hl_variable" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html#a1b336474d17eff1aa4be73d4068dc725">h_parent</a>[a]];</div>
<div class="line"><a id="l00419" name="l00419"></a><span class="lineno"> 419</span> }</div>
<div class="line"><a id="l00420" name="l00420"></a><span class="lineno"> 420</span> ret = <a class="code hl_function" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html#a41c733f5f5e262b308f7cb95c88c1e74">SG&lt;X&gt;::combine</a>(ret, <a class="code hl_class" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html">SG&lt;X&gt;::query</a>(l, r));</div>
<div class="line"><a id="l00421" name="l00421"></a><span class="lineno"> 421</span> a = <a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">Tree&lt;X&gt;::t_par</a>[<a class="code hl_variable" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html#a1b336474d17eff1aa4be73d4068dc725">h_parent</a>[a]][0];</div>
<div class="line"><a id="l00420" name="l00420"></a><span class="lineno"> 420</span> ret = <a class="code hl_function" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html#a41c733f5f5e262b308f7cb95c88c1e74">SG&lt;X&gt;::combine</a>(ret, <a class="code hl_function" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html#a1fda852e6e522707fd97f61cdb0a2591">SG&lt;X&gt;::query</a>(l, r));</div>
<div class="line"><a id="l00421" name="l00421"></a><span class="lineno"> 421</span> a = <a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#a350157a5fb79f76fceae33fc84171203">Tree&lt;X&gt;::t_par</a>[<a class="code hl_variable" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html#a1b336474d17eff1aa4be73d4068dc725">h_parent</a>[a]][0];</div>
<div class="line"><a id="l00422" name="l00422"></a><span class="lineno"> 422</span> <span class="keywordflow">if</span> (a == -1) {</div>
<div class="line"><a id="l00423" name="l00423"></a><span class="lineno"> 423</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l00424" name="l00424"></a><span class="lineno"> 424</span> }</div>
@@ -391,56 +393,56 @@ $(function(){initNavTree('d2/de9/heavy__light__decomposition_8cpp_source.html','
<div class="line"><a id="l00435" name="l00435"></a><span class="lineno"> 435</span> <span class="keyword">explicit</span> <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">HLD&lt;X&gt;</a>(<span class="keywordtype">int</span> nodes) : <a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">Tree</a>&lt;X&gt;(nodes), <a class="code hl_class" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html">SG</a>&lt;X&gt;(nodes) {</div>
<div class="line"><a id="l00436" name="l00436"></a><span class="lineno"> 436</span> <span class="comment">/* Initialization and resize vectors */</span></div>
<div class="line"><a id="l00437" name="l00437"></a><span class="lineno"> 437</span> <a class="code hl_variable" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html#a722cc7cf2c3e4d15583601a48b09776f">label</a> = 0;</div>
<div class="line"><a id="l00438" name="l00438"></a><span class="lineno"> 438</span> <a class="code hl_variable" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html#aa86a91ae0cd7898990a8170a2f2c9cda">h_label</a>.assign(<a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">Tree&lt;X&gt;::t_nodes</a>, -1);</div>
<div class="line"><a id="l00439" name="l00439"></a><span class="lineno"> 439</span> <a class="code hl_variable" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html#a84424f180f12b514eaab57a6aa20b104">h_heavychlid</a>.assign(<a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">Tree&lt;X&gt;::t_nodes</a>, -1);</div>
<div class="line"><a id="l00440" name="l00440"></a><span class="lineno"> 440</span> <a class="code hl_variable" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html#a1b336474d17eff1aa4be73d4068dc725">h_parent</a>.resize(<a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">Tree&lt;X&gt;::t_nodes</a>);</div>
<div class="line"><a id="l00438" name="l00438"></a><span class="lineno"> 438</span> <a class="code hl_variable" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html#aa86a91ae0cd7898990a8170a2f2c9cda">h_label</a>.assign(<a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#ae4630fa70a80a1dc65a875488a67178a">Tree&lt;X&gt;::t_nodes</a>, -1);</div>
<div class="line"><a id="l00439" name="l00439"></a><span class="lineno"> 439</span> <a class="code hl_variable" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html#a84424f180f12b514eaab57a6aa20b104">h_heavychlid</a>.assign(<a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#ae4630fa70a80a1dc65a875488a67178a">Tree&lt;X&gt;::t_nodes</a>, -1);</div>
<div class="line"><a id="l00440" name="l00440"></a><span class="lineno"> 440</span> <a class="code hl_variable" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html#a1b336474d17eff1aa4be73d4068dc725">h_parent</a>.resize(<a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#ae4630fa70a80a1dc65a875488a67178a">Tree&lt;X&gt;::t_nodes</a>);</div>
<div class="line"><a id="l00441" name="l00441"></a><span class="lineno"> 441</span> iota(<a class="code hl_variable" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html#a1b336474d17eff1aa4be73d4068dc725">h_parent</a>.begin(), <a class="code hl_variable" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html#a1b336474d17eff1aa4be73d4068dc725">h_parent</a>.end(), 0);</div>
<div class="line"><a id="l00442" name="l00442"></a><span class="lineno"> 442</span> }</div>
<div class="line"><a id="l00443" name="l00443"></a><span class="lineno"> 443</span> </div>
<div class="line"><a id="l00443" name="l00443"></a><span class="lineno"> 443</span></div>
<div class="foldopen" id="foldopen00450" data-start="{" data-end="}">
<div class="line"><a id="l00450" name="l00450"></a><span class="lineno"><a class="line" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html#ae9e979edd69678b85665c01e2ee97828"> 450</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html#ae9e979edd69678b85665c01e2ee97828">init</a>() {</div>
<div class="line"><a id="l00451" name="l00451"></a><span class="lineno"> 451</span> <a class="code hl_function" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#ad22d760a5a33545a70e7ea5e1786c8dc">Tree&lt;X&gt;::init</a>();</div>
<div class="line"><a id="l00452" name="l00452"></a><span class="lineno"> 452</span> </div>
<div class="line"><a id="l00453" name="l00453"></a><span class="lineno"> 453</span> <span class="comment">// Fill the heavy child, greatest parent, and labels</span></div>
<div class="line"><a id="l00454" name="l00454"></a><span class="lineno"> 454</span> <a class="code hl_variable" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html#a722cc7cf2c3e4d15583601a48b09776f">label</a> = 0;</div>
<div class="line"><a id="l00455" name="l00455"></a><span class="lineno"> 455</span> <a class="code hl_function" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html#af64848d6630c39d0f09ce2359cc7c4f8">dfs_hc</a>(<a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">Tree&lt;X&gt;::t_root</a>);</div>
<div class="line"><a id="l00456" name="l00456"></a><span class="lineno"> 456</span> <a class="code hl_function" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html#a2dfbda148aad0bfaba2ebfda9ebc915a">dfs_par</a>(<a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">Tree&lt;X&gt;::t_root</a>);</div>
<div class="line"><a id="l00457" name="l00457"></a><span class="lineno"> 457</span> <a class="code hl_function" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html#a0579062b384e54b611b80c6337c7f2c8">dfs_labels</a>(<a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">Tree&lt;X&gt;::t_root</a>);</div>
<div class="line"><a id="l00455" name="l00455"></a><span class="lineno"> 455</span> <a class="code hl_function" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html#af64848d6630c39d0f09ce2359cc7c4f8">dfs_hc</a>(<a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#aa6c37e840355b9fb2105181c578694e8">Tree&lt;X&gt;::t_root</a>);</div>
<div class="line"><a id="l00456" name="l00456"></a><span class="lineno"> 456</span> <a class="code hl_function" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html#a2dfbda148aad0bfaba2ebfda9ebc915a">dfs_par</a>(<a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#aa6c37e840355b9fb2105181c578694e8">Tree&lt;X&gt;::t_root</a>);</div>
<div class="line"><a id="l00457" name="l00457"></a><span class="lineno"> 457</span> <a class="code hl_function" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html#a0579062b384e54b611b80c6337c7f2c8">dfs_labels</a>(<a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#aa6c37e840355b9fb2105181c578694e8">Tree&lt;X&gt;::t_root</a>);</div>
<div class="line"><a id="l00458" name="l00458"></a><span class="lineno"> 458</span> </div>
<div class="line"><a id="l00459" name="l00459"></a><span class="lineno"> 459</span> <span class="comment">// Segment Tree Initialization</span></div>
<div class="line"><a id="l00460" name="l00460"></a><span class="lineno"> 460</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; Tree&lt;X&gt;::t_nodes; i++) {</div>
<div class="line"><a id="l00461" name="l00461"></a><span class="lineno"> 461</span> <a class="code hl_class" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html">SG&lt;X&gt;::s_tree</a>[<a class="code hl_variable" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html#aa86a91ae0cd7898990a8170a2f2c9cda">h_label</a>[i] + <a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">Tree&lt;X&gt;::t_nodes</a>] = <a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">Tree&lt;X&gt;::t_val</a>[i];</div>
<div class="line"><a id="l00461" name="l00461"></a><span class="lineno"> 461</span> <a class="code hl_variable" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html#afbf8a9cb9449d5ca844f4e141a801e6a">SG&lt;X&gt;::s_tree</a>[<a class="code hl_variable" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html#aa86a91ae0cd7898990a8170a2f2c9cda">h_label</a>[i] + <a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#ae4630fa70a80a1dc65a875488a67178a">Tree&lt;X&gt;::t_nodes</a>] = <a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#a135b7952593c9b1aae38fcaf1cc1abf7">Tree&lt;X&gt;::t_val</a>[i];</div>
<div class="line"><a id="l00462" name="l00462"></a><span class="lineno"> 462</span> }</div>
<div class="line"><a id="l00463" name="l00463"></a><span class="lineno"> 463</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = <a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">Tree&lt;X&gt;::t_nodes</a> - 1; i &gt; 0; i--) {</div>
<div class="line"><a id="l00464" name="l00464"></a><span class="lineno"> 464</span> <a class="code hl_class" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html">SG&lt;X&gt;::s_tree</a>[i] =</div>
<div class="line"><a id="l00465" name="l00465"></a><span class="lineno"> 465</span> <a class="code hl_function" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html#a41c733f5f5e262b308f7cb95c88c1e74">SG&lt;X&gt;::combine</a>(<a class="code hl_class" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html">SG&lt;X&gt;::s_tree</a>[i &lt;&lt; 1], <a class="code hl_class" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html">SG&lt;X&gt;::s_tree</a>[i &lt;&lt; 1 | 1]);</div>
<div class="line"><a id="l00463" name="l00463"></a><span class="lineno"> 463</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = <a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#ae4630fa70a80a1dc65a875488a67178a">Tree&lt;X&gt;::t_nodes</a> - 1; i &gt; 0; i--) {</div>
<div class="line"><a id="l00464" name="l00464"></a><span class="lineno"> 464</span> <a class="code hl_variable" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html#afbf8a9cb9449d5ca844f4e141a801e6a">SG&lt;X&gt;::s_tree</a>[i] =</div>
<div class="line"><a id="l00465" name="l00465"></a><span class="lineno"> 465</span> <a class="code hl_function" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html#a41c733f5f5e262b308f7cb95c88c1e74">SG&lt;X&gt;::combine</a>(<a class="code hl_variable" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html#afbf8a9cb9449d5ca844f4e141a801e6a">SG&lt;X&gt;::s_tree</a>[i &lt;&lt; 1], <a class="code hl_variable" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html#afbf8a9cb9449d5ca844f4e141a801e6a">SG&lt;X&gt;::s_tree</a>[i &lt;&lt; 1 | 1]);</div>
<div class="line"><a id="l00466" name="l00466"></a><span class="lineno"> 466</span> }</div>
<div class="line"><a id="l00467" name="l00467"></a><span class="lineno"> 467</span> }</div>
</div>
<div class="line"><a id="l00468" name="l00468"></a><span class="lineno"> 468</span> </div>
<div class="line"><a id="l00468" name="l00468"></a><span class="lineno"> 468</span></div>
<div class="foldopen" id="foldopen00475" data-start="{" data-end="}">
<div class="line"><a id="l00475" name="l00475"></a><span class="lineno"><a class="line" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html#a9f1cb54ed09fde931bf3220d75ee4c57"> 475</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html#a9f1cb54ed09fde931bf3220d75ee4c57">update</a>(<span class="keywordtype">int</span> <a class="code hl_class" href="../../d5/da1/structnode.html">node</a>, X val) {</div>
<div class="line"><a id="l00476" name="l00476"></a><span class="lineno"> 476</span> X diff = val - <a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">Tree&lt;X&gt;::t_val</a>[<a class="code hl_typedef" href="../../d8/dee/avltree_8cpp.html#a74f0cf18a0e5b832d9994e2f2d022287">node</a>];</div>
<div class="line"><a id="l00476" name="l00476"></a><span class="lineno"> 476</span> X diff = val - <a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#a135b7952593c9b1aae38fcaf1cc1abf7">Tree&lt;X&gt;::t_val</a>[<a class="code hl_class" href="../../d5/da1/structnode.html">node</a>];</div>
<div class="line"><a id="l00477" name="l00477"></a><span class="lineno"> 477</span> <a class="code hl_function" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html#a3c75bf5770790f8eba8cc92227b5400c">SG&lt;X&gt;::update</a>(<a class="code hl_variable" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html#aa86a91ae0cd7898990a8170a2f2c9cda">h_label</a>[<a class="code hl_class" href="../../d5/da1/structnode.html">node</a>], diff);</div>
<div class="line"><a id="l00478" name="l00478"></a><span class="lineno"> 478</span> <a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">Tree&lt;X&gt;::t_val</a>[<a class="code hl_typedef" href="../../d8/dee/avltree_8cpp.html#a74f0cf18a0e5b832d9994e2f2d022287">node</a>] = val;</div>
<div class="line"><a id="l00478" name="l00478"></a><span class="lineno"> 478</span> <a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#a135b7952593c9b1aae38fcaf1cc1abf7">Tree&lt;X&gt;::t_val</a>[<a class="code hl_class" href="../../d5/da1/structnode.html">node</a>] = val;</div>
<div class="line"><a id="l00479" name="l00479"></a><span class="lineno"> 479</span> }</div>
</div>
<div class="line"><a id="l00480" name="l00480"></a><span class="lineno"> 480</span> </div>
<div class="line"><a id="l00480" name="l00480"></a><span class="lineno"> 480</span></div>
<div class="foldopen" id="foldopen00489" data-start="{" data-end="}">
<div class="line"><a id="l00489" name="l00489"></a><span class="lineno"><a class="line" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html#a4dfbf5d9df825eeb63b294c6849bdcab"> 489</a></span> X <a class="code hl_function" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html#a4dfbf5d9df825eeb63b294c6849bdcab">query</a>(<span class="keywordtype">int</span> a, <span class="keywordtype">int</span> b) {</div>
<div class="line"><a id="l00490" name="l00490"></a><span class="lineno"> 490</span> <span class="keywordtype">int</span> lc = <a class="code hl_function" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#ae2b407e64aaf9878fbee7ee6efe9c7d4">Tree&lt;X&gt;::lca</a>(a, b);</div>
<div class="line"><a id="l00491" name="l00491"></a><span class="lineno"> 491</span> X ret = <a class="code hl_class" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html">SG&lt;X&gt;::sret_init</a>;</div>
<div class="line"><a id="l00491" name="l00491"></a><span class="lineno"> 491</span> X ret = <a class="code hl_variable" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html#aa7f93971a9f891e0bbb7023081f379d5">SG&lt;X&gt;::sret_init</a>;</div>
<div class="line"><a id="l00492" name="l00492"></a><span class="lineno"> 492</span> assert(lc != -1);</div>
<div class="line"><a id="l00493" name="l00493"></a><span class="lineno"> 493</span> ret += <a class="code hl_function" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html#a7d5b40c076347a6aabfb37a0590f2f24">chain_query</a>(a, lc);</div>
<div class="line"><a id="l00494" name="l00494"></a><span class="lineno"> 494</span> ret += <a class="code hl_function" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html#a7d5b40c076347a6aabfb37a0590f2f24">chain_query</a>(b, lc);</div>
<div class="line"><a id="l00495" name="l00495"></a><span class="lineno"> 495</span> <span class="keywordflow">return</span> ret - <a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">Tree&lt;X&gt;::t_val</a>[lc];</div>
<div class="line"><a id="l00495" name="l00495"></a><span class="lineno"> 495</span> <span class="keywordflow">return</span> ret - <a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#a135b7952593c9b1aae38fcaf1cc1abf7">Tree&lt;X&gt;::t_val</a>[lc];</div>
<div class="line"><a id="l00496" name="l00496"></a><span class="lineno"> 496</span> }</div>
</div>
<div class="line"><a id="l00497" name="l00497"></a><span class="lineno"> 497</span>};</div>
</div>
<div class="line"><a id="l00498" name="l00498"></a><span class="lineno"> 498</span>} <span class="comment">// namespace heavy_light_decomposition</span></div>
<div class="line"><a id="l00499" name="l00499"></a><span class="lineno"> 499</span>} <span class="comment">// namespace range_queries</span></div>
<div class="line"><a id="l00500" name="l00500"></a><span class="lineno"> 500</span> </div>
<div class="line"><a id="l00500" name="l00500"></a><span class="lineno"> 500</span></div>
<div class="foldopen" id="foldopen00505" data-start="{" data-end="}">
<div class="line"><a id="l00505" name="l00505"></a><span class="lineno"><a class="line" href="../../d2/de9/heavy__light__decomposition_8cpp.html#a34b8683a2b429de5cce57e6d733ec817"> 505</a></span><span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code hl_function" href="../../d2/de9/heavy__light__decomposition_8cpp.html#a34b8683a2b429de5cce57e6d733ec817">test_1</a>() {</div>
<div class="line"><a id="l00506" name="l00506"></a><span class="lineno"> 506</span> std::cout &lt;&lt; <span class="stringliteral">&quot;Test 1:\n&quot;</span>;</div>
@@ -482,7 +484,7 @@ $(function(){initNavTree('d2/de9/heavy__light__decomposition_8cpp_source.html','
<div class="line"><a id="l00542" name="l00542"></a><span class="lineno"> 542</span> std::cout &lt;&lt; <span class="stringliteral">&quot;\nTest 1 passed!\n&quot;</span>;</div>
<div class="line"><a id="l00543" name="l00543"></a><span class="lineno"> 543</span>}</div>
</div>
<div class="line"><a id="l00544" name="l00544"></a><span class="lineno"> 544</span> </div>
<div class="line"><a id="l00544" name="l00544"></a><span class="lineno"> 544</span></div>
<div class="foldopen" id="foldopen00549" data-start="{" data-end="}">
<div class="line"><a id="l00549" name="l00549"></a><span class="lineno"><a class="line" href="../../d2/de9/heavy__light__decomposition_8cpp.html#a458410412185a5f09199deaff7157a8d"> 549</a></span><span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code hl_function" href="../../d2/de9/heavy__light__decomposition_8cpp.html#a458410412185a5f09199deaff7157a8d">test_2</a>() {</div>
<div class="line"><a id="l00550" name="l00550"></a><span class="lineno"> 550</span> std::cout &lt;&lt; <span class="stringliteral">&quot;Test 2:\n&quot;</span>;</div>
@@ -523,7 +525,7 @@ $(function(){initNavTree('d2/de9/heavy__light__decomposition_8cpp_source.html','
<div class="line"><a id="l00585" name="l00585"></a><span class="lineno"> 585</span> std::cout &lt;&lt; <span class="stringliteral">&quot;\nTest2 passed!\n&quot;</span>;</div>
<div class="line"><a id="l00586" name="l00586"></a><span class="lineno"> 586</span>}</div>
</div>
<div class="line"><a id="l00587" name="l00587"></a><span class="lineno"> 587</span> </div>
<div class="line"><a id="l00587" name="l00587"></a><span class="lineno"> 587</span></div>
<div class="foldopen" id="foldopen00592" data-start="{" data-end="}">
<div class="line"><a id="l00592" name="l00592"></a><span class="lineno"><a class="line" href="../../d2/de9/heavy__light__decomposition_8cpp.html#af31ec5409537703d9c8a47350386b32a"> 592</a></span><span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code hl_function" href="../../d2/de9/heavy__light__decomposition_8cpp.html#af31ec5409537703d9c8a47350386b32a">test_3</a>() {</div>
<div class="line"><a id="l00593" name="l00593"></a><span class="lineno"> 593</span> std::cout &lt;&lt; <span class="stringliteral">&quot;Test 3:\n&quot;</span>;</div>
@@ -564,7 +566,7 @@ $(function(){initNavTree('d2/de9/heavy__light__decomposition_8cpp_source.html','
<div class="line"><a id="l00628" name="l00628"></a><span class="lineno"> 628</span> std::cout &lt;&lt; <span class="stringliteral">&quot;\nTest3 passed!\n&quot;</span>;</div>
<div class="line"><a id="l00629" name="l00629"></a><span class="lineno"> 629</span>}</div>
</div>
<div class="line"><a id="l00630" name="l00630"></a><span class="lineno"> 630</span> </div>
<div class="line"><a id="l00630" name="l00630"></a><span class="lineno"> 630</span></div>
<div class="foldopen" id="foldopen00634" data-start="{" data-end="}">
<div class="line"><a id="l00634" name="l00634"></a><span class="lineno"><a class="line" href="../../d2/de9/heavy__light__decomposition_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4"> 634</a></span><span class="keywordtype">int</span> <a class="code hl_function" href="../../d2/de9/heavy__light__decomposition_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4">main</a>() {</div>
<div class="line"><a id="l00635" name="l00635"></a><span class="lineno"> 635</span> <a class="code hl_function" href="../../d2/de9/heavy__light__decomposition_8cpp.html#a34b8683a2b429de5cce57e6d733ec817">test_1</a>();</div>
@@ -573,12 +575,12 @@ $(function(){initNavTree('d2/de9/heavy__light__decomposition_8cpp_source.html','
<div class="line"><a id="l00638" name="l00638"></a><span class="lineno"> 638</span> <span class="keywordflow">return</span> 0;</div>
<div class="line"><a id="l00639" name="l00639"></a><span class="lineno"> 639</span>}</div>
</div>
<div class="ttc" id="aavltree_8cpp_html_a74f0cf18a0e5b832d9994e2f2d022287"><div class="ttname"><a href="../../d8/dee/avltree_8cpp.html#a74f0cf18a0e5b832d9994e2f2d022287">node</a></div><div class="ttdeci">struct node { int data; int height; struct node *left; struct node *right;} node</div><div class="ttdoc">for std::queue</div><div class="ttdef"><b>Definition</b> <a href="../../d8/dee/avltree_8cpp_source.html#l00013">avltree.cpp:13</a></div></div>
<div class="ttc" id="aclassrange__queries_1_1heavy__light__decomposition_1_1_h_l_d_html"><div class="ttname"><a href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">range_queries::heavy_light_decomposition::HLD</a></div><div class="ttdoc">The Heavy-Light Decomposition class.</div><div class="ttdef"><b>Definition</b> <a href="#l00336">heavy_light_decomposition.cpp:336</a></div></div>
<div class="ttc" id="aclassrange__queries_1_1heavy__light__decomposition_1_1_h_l_d_html_a0579062b384e54b611b80c6337c7f2c8"><div class="ttname"><a href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html#a0579062b384e54b611b80c6337c7f2c8">range_queries::heavy_light_decomposition::HLD::dfs_labels</a></div><div class="ttdeci">void dfs_labels(int u, int p=-1)</div><div class="ttdoc">Utility function to lable the nodes so that heavy chains have a contigous lable.</div><div class="ttdef"><b>Definition</b> <a href="#l00390">heavy_light_decomposition.cpp:390</a></div></div>
<div class="ttc" id="aclassrange__queries_1_1heavy__light__decomposition_1_1_h_l_d_html_a1b336474d17eff1aa4be73d4068dc725"><div class="ttname"><a href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html#a1b336474d17eff1aa4be73d4068dc725">range_queries::heavy_light_decomposition::HLD::h_parent</a></div><div class="ttdeci">std::vector&lt; int &gt; h_parent</div><div class="ttdoc">stores the top of the heavy chain from a node</div><div class="ttdef"><b>Definition</b> <a href="#l00341">heavy_light_decomposition.cpp:341</a></div></div>
<div class="ttc" id="aclassrange__queries_1_1heavy__light__decomposition_1_1_h_l_d_html_a2dfbda148aad0bfaba2ebfda9ebc915a"><div class="ttname"><a href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html#a2dfbda148aad0bfaba2ebfda9ebc915a">range_queries::heavy_light_decomposition::HLD::dfs_par</a></div><div class="ttdeci">void dfs_par(int u, int p=-1)</div><div class="ttdoc">Utility function to assign highest parent that can be reached though heavy chains.</div><div class="ttdef"><b>Definition</b> <a href="#l00371">heavy_light_decomposition.cpp:371</a></div></div>
<div class="ttc" id="aclassrange__queries_1_1heavy__light__decomposition_1_1_h_l_d_html_a4dfbf5d9df825eeb63b294c6849bdcab"><div class="ttname"><a href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html#a4dfbf5d9df825eeb63b294c6849bdcab">range_queries::heavy_light_decomposition::HLD::query</a></div><div class="ttdeci">X query(int a, int b)</div><div class="ttdoc">This function returns the sum of node values in the simple path from from node_1 to node_2.</div><div class="ttdef"><b>Definition</b> <a href="#l00489">heavy_light_decomposition.cpp:489</a></div></div>
<div class="ttc" id="aclassrange__queries_1_1heavy__light__decomposition_1_1_h_l_d_html_a6e486767434e44076c1ac374a22da726"><div class="ttname"><a href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html#a6e486767434e44076c1ac374a22da726">range_queries::heavy_light_decomposition::HLD::HLD</a></div><div class="ttdeci">HLD(int nodes)</div><div class="ttdoc">Class parameterized constructor. Resizes the and initilizes the data members.</div><div class="ttdef"><b>Definition</b> <a href="#l00409">heavy_light_decomposition.cpp:435</a></div></div>
<div class="ttc" id="aclassrange__queries_1_1heavy__light__decomposition_1_1_h_l_d_html_a722cc7cf2c3e4d15583601a48b09776f"><div class="ttname"><a href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html#a722cc7cf2c3e4d15583601a48b09776f">range_queries::heavy_light_decomposition::HLD::label</a></div><div class="ttdeci">int label</div><div class="ttdoc">utility member to assign labels in dfs_labels()</div><div class="ttdef"><b>Definition</b> <a href="#l00338">heavy_light_decomposition.cpp:338</a></div></div>
<div class="ttc" id="aclassrange__queries_1_1heavy__light__decomposition_1_1_h_l_d_html_a7d5b40c076347a6aabfb37a0590f2f24"><div class="ttname"><a href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html#a7d5b40c076347a6aabfb37a0590f2f24">range_queries::heavy_light_decomposition::HLD::chain_query</a></div><div class="ttdeci">X chain_query(int a, int b)</div><div class="ttdoc">Utility function to break down a path query into two chain queries.</div><div class="ttdef"><b>Definition</b> <a href="#l00409">heavy_light_decomposition.cpp:409</a></div></div>
<div class="ttc" id="aclassrange__queries_1_1heavy__light__decomposition_1_1_h_l_d_html_a84424f180f12b514eaab57a6aa20b104"><div class="ttname"><a href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html#a84424f180f12b514eaab57a6aa20b104">range_queries::heavy_light_decomposition::HLD::h_heavychlid</a></div><div class="ttdeci">std::vector&lt; int &gt; h_heavychlid</div><div class="ttdoc">stores the heavy child of a node</div><div class="ttdef"><b>Definition</b> <a href="#l00340">heavy_light_decomposition.cpp:340</a></div></div>
@@ -599,7 +601,7 @@ $(function(){initNavTree('d2/de9/heavy__light__decomposition_8cpp_source.html','
<div class="ttc" id="aclassrange__queries_1_1heavy__light__decomposition_1_1_tree_html_a04cd96efaba147b19d3afc769b90ff70"><div class="ttname"><a href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#a04cd96efaba147b19d3afc769b90ff70">range_queries::heavy_light_decomposition::Tree::set_node_val</a></div><div class="ttdeci">void set_node_val(const std::vector&lt; X &gt; &amp;node_val)</div><div class="ttdoc">Set the values for all the nodes.</div><div class="ttdef"><b>Definition</b> <a href="#l00175">heavy_light_decomposition.cpp:175</a></div></div>
<div class="ttc" id="aclassrange__queries_1_1heavy__light__decomposition_1_1_tree_html_a0efd0b9c564092f443ca97030d866ef1"><div class="ttname"><a href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#a0efd0b9c564092f443ca97030d866ef1">range_queries::heavy_light_decomposition::Tree::t_depth</a></div><div class="ttdeci">std::vector&lt; int &gt; t_depth</div><div class="ttdoc">a vector to store the depth of a node,</div><div class="ttdef"><b>Definition</b> <a href="#l00088">heavy_light_decomposition.cpp:88</a></div></div>
<div class="ttc" id="aclassrange__queries_1_1heavy__light__decomposition_1_1_tree_html_a135b7952593c9b1aae38fcaf1cc1abf7"><div class="ttname"><a href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#a135b7952593c9b1aae38fcaf1cc1abf7">range_queries::heavy_light_decomposition::Tree::t_val</a></div><div class="ttdeci">std::vector&lt; X &gt; t_val</div><div class="ttdoc">values of nodes</div><div class="ttdef"><b>Definition</b> <a href="#l00092">heavy_light_decomposition.cpp:92</a></div></div>
<div class="ttc" id="aclassrange__queries_1_1heavy__light__decomposition_1_1_tree_html_a350157a5fb79f76fceae33fc84171203"><div class="ttname"><a href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#a350157a5fb79f76fceae33fc84171203">range_queries::heavy_light_decomposition::Tree::t_par</a></div><div class="ttdeci">std::vector&lt; std::vector&lt; int &gt; &gt; t_par</div><div class="ttdoc">a matrix to store every node's 2^kth parent</div><div class="ttdef"><b>Definition</b> <a href="#l00087">heavy_light_decomposition.cpp:87</a></div></div>
<div class="ttc" id="aclassrange__queries_1_1heavy__light__decomposition_1_1_tree_html_a350157a5fb79f76fceae33fc84171203"><div class="ttname"><a href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#a350157a5fb79f76fceae33fc84171203">range_queries::heavy_light_decomposition::Tree::t_par</a></div><div class="ttdeci">std::vector&lt; std::vector&lt; int &gt; &gt; t_par</div><div class="ttdoc">a matrix to store every node&#39;s 2^kth parent</div><div class="ttdef"><b>Definition</b> <a href="#l00087">heavy_light_decomposition.cpp:87</a></div></div>
<div class="ttc" id="aclassrange__queries_1_1heavy__light__decomposition_1_1_tree_html_a79ab4601c4a95c0902ac04e779e5f54d"><div class="ttname"><a href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#a79ab4601c4a95c0902ac04e779e5f54d">range_queries::heavy_light_decomposition::Tree::add_edge</a></div><div class="ttdeci">void add_edge(const int u, const int v)</div><div class="ttdoc">Adds an undirected edge from node u to node v in the tree.</div><div class="ttdef"><b>Definition</b> <a href="#l00157">heavy_light_decomposition.cpp:157</a></div></div>
<div class="ttc" id="aclassrange__queries_1_1heavy__light__decomposition_1_1_tree_html_a835fb2bbb27307b8cacad9b287968bc1"><div class="ttname"><a href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#a835fb2bbb27307b8cacad9b287968bc1">range_queries::heavy_light_decomposition::Tree::Tree</a></div><div class="ttdeci">Tree(int nodes)</div><div class="ttdoc">Class parameterized constructor, resizes the and initializes the data members.</div><div class="ttdef"><b>Definition</b> <a href="#l00140">heavy_light_decomposition.cpp:140</a></div></div>
<div class="ttc" id="aclassrange__queries_1_1heavy__light__decomposition_1_1_tree_html_a8f7bca1746d40f21ad832fcea59aa6c6"><div class="ttname"><a href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#a8f7bca1746d40f21ad832fcea59aa6c6">range_queries::heavy_light_decomposition::Tree::kth_ancestor</a></div><div class="ttdeci">int kth_ancestor(int p, const int &amp;dist)</div><div class="ttdoc">The function returns the kth ancestor of a node.</div><div class="ttdef"><b>Definition</b> <a href="#l00218">heavy_light_decomposition.cpp:218</a></div></div>
@@ -618,6 +620,7 @@ $(function(){initNavTree('d2/de9/heavy__light__decomposition_8cpp_source.html','
<div class="ttc" id="aheavy__light__decomposition_8cpp_html_a458410412185a5f09199deaff7157a8d"><div class="ttname"><a href="../../d2/de9/heavy__light__decomposition_8cpp.html#a458410412185a5f09199deaff7157a8d">test_2</a></div><div class="ttdeci">static void test_2()</div><div class="ttdef"><b>Definition</b> <a href="#l00549">heavy_light_decomposition.cpp:549</a></div></div>
<div class="ttc" id="aheavy__light__decomposition_8cpp_html_ae66f6b31b5ad750f1fe042a706a4e3d4"><div class="ttname"><a href="../../d2/de9/heavy__light__decomposition_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4">main</a></div><div class="ttdeci">int main()</div><div class="ttdef"><b>Definition</b> <a href="#l00634">heavy_light_decomposition.cpp:634</a></div></div>
<div class="ttc" id="aheavy__light__decomposition_8cpp_html_af31ec5409537703d9c8a47350386b32a"><div class="ttname"><a href="../../d2/de9/heavy__light__decomposition_8cpp.html#af31ec5409537703d9c8a47350386b32a">test_3</a></div><div class="ttdeci">static void test_3()</div><div class="ttdef"><b>Definition</b> <a href="#l00592">heavy_light_decomposition.cpp:592</a></div></div>
<div class="ttc" id="amatrix__exponentiation_8cpp_html_ae1d1ec9482079231e898236e2b23c9ba"><div class="ttname"><a href="../../d7/d35/matrix__exponentiation_8cpp.html#ae1d1ec9482079231e898236e2b23c9ba">ll</a></div><div class="ttdeci">#define ll</div><div class="ttdef"><b>Definition</b> <a href="../../d7/d35/matrix__exponentiation_8cpp_source.html#l00033">matrix_exponentiation.cpp:33</a></div></div>
<div class="ttc" id="anamespaceheavy__light__decomposition_html"><div class="ttname"><a href="../../db/d6f/namespaceheavy__light__decomposition.html">heavy_light_decomposition</a></div><div class="ttdoc">Heavy light decomposition algorithm.</div></div>
<div class="ttc" id="anamespacerange__queries_html"><div class="ttname"><a href="../../dd/d69/namespacerange__queries.html">range_queries</a></div><div class="ttdoc">for std::vector</div><div class="ttdef"><b>Definition</b> <a href="../../d6/d2e/fenwick__tree_8cpp_source.html#l00028">fenwick_tree.cpp:28</a></div></div>
<div class="ttc" id="astructnode_html"><div class="ttname"><a href="../../d5/da1/structnode.html">node</a></div><div class="ttdef"><b>Definition</b> <a href="../../d3/d26/binary__search__tree_8cpp_source.html#l00011">binary_search_tree.cpp:11</a></div></div>
@@ -627,7 +630,7 @@ $(function(){initNavTree('d2/de9/heavy__light__decomposition_8cpp_source.html','
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="../../dir_074119ce3a874b57120c49a0cc4bb5ad.html">range_queries</a></li><li class="navelem"><a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp.html">heavy_light_decomposition.cpp</a></li>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="../../doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 </li>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="../../doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.13.2 </li>
</ul>
</div>
</body>