Documentation for 79aeaa9b52
@@ -150,7 +150,7 @@ Static Private Attributes</h2></td></tr>
|
||||
<a name="details" id="details"></a><h2 id="header-details" class="groupheader">Detailed Description</h2>
|
||||
<div class="textblock"><p><a href="https://en.wikipedia.org/wiki/Trie" target="_blank">Trie</a> implementation for small-case English alphabets <span class="tt">a-z</span> </p>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d7/d83/trie__tree_8cpp_source.html#l00024">24</a> of file <a class="el" href="../../d7/d83/trie__tree_8cpp_source.html">trie_tree.cpp</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="../../d7/d83/trie__tree_8cpp_source.html#l00025">25</a> of file <a class="el" href="../../d7/d83/trie__tree_8cpp_source.html">trie_tree.cpp</a>.</p>
|
||||
</div><a name="doc-func-members" id="doc-func-members"></a><h2 id="header-doc-func-members" class="groupheader">Member Function Documentation</h2>
|
||||
<a id="aab373beb3f618b90922528c68797d988" name="aab373beb3f618b90922528c68797d988"></a>
|
||||
<h2 class="memtitle"><span class="permalink"><a href="#aab373beb3f618b90922528c68797d988">◆ </a></span>char_to_int()</h2>
|
||||
@@ -184,19 +184,19 @@ Static Private Attributes</h2></td></tr>
|
||||
</dl>
|
||||
<dl class="section return"><dt>Returns</dt><dd>unsigned integer index </dd></dl>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d7/d83/trie__tree_8cpp_source.html#l00037">37</a> of file <a class="el" href="../../d7/d83/trie__tree_8cpp_source.html">trie_tree.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 37</span> {</div>
|
||||
<div class="line"><span class="lineno"> 38</span> <span class="keywordflow">if</span> (ch >= <span class="charliteral">'A'</span> && ch <= <span class="charliteral">'Z'</span>) {</div>
|
||||
<div class="line"><span class="lineno"> 39</span> <span class="keywordflow">return</span> ch - <span class="charliteral">'A'</span>;</div>
|
||||
<div class="line"><span class="lineno"> 40</span> } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (ch >= <span class="charliteral">'a'</span> && ch <= <span class="charliteral">'z'</span>) {</div>
|
||||
<div class="line"><span class="lineno"> 41</span> <span class="keywordflow">return</span> ch - <span class="charliteral">'a'</span> + <a class="code hl_variable" href="#a4bfac4be6ed1a34c7159eddb42469191">NUM_CHARS</a>;</div>
|
||||
<div class="line"><span class="lineno"> 42</span> }</div>
|
||||
<div class="line"><span class="lineno"> 43</span> </div>
|
||||
<div class="line"><span class="lineno"> 44</span> std::cerr << <span class="stringliteral">"Invalid character present. Exiting..."</span>;</div>
|
||||
<div class="line"><span class="lineno"> 45</span> std::exit(EXIT_FAILURE);</div>
|
||||
<div class="line"><span class="lineno"> 46</span> <span class="keywordflow">return</span> 0;</div>
|
||||
<div class="line"><span class="lineno"> 47</span> }</div>
|
||||
<div class="ttc" id="aclassdata__structures_1_1trie_html_a4bfac4be6ed1a34c7159eddb42469191"><div class="ttname"><a href="#a4bfac4be6ed1a34c7159eddb42469191">data_structures::trie::NUM_CHARS</a></div><div class="ttdeci">static constexpr uint8_t NUM_CHARS</div><div class="ttdoc">Number of alphabets.</div><div class="ttdef"><b>Definition</b> <a href="../../d7/d83/trie__tree_8cpp_source.html#l00026">trie_tree.cpp:26</a></div></div>
|
||||
<p class="definition">Definition at line <a class="el" href="../../d7/d83/trie__tree_8cpp_source.html#l00038">38</a> of file <a class="el" href="../../d7/d83/trie__tree_8cpp_source.html">trie_tree.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 38</span> {</div>
|
||||
<div class="line"><span class="lineno"> 39</span> <span class="keywordflow">if</span> (ch >= <span class="charliteral">'A'</span> && ch <= <span class="charliteral">'Z'</span>) {</div>
|
||||
<div class="line"><span class="lineno"> 40</span> <span class="keywordflow">return</span> ch - <span class="charliteral">'A'</span>;</div>
|
||||
<div class="line"><span class="lineno"> 41</span> } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (ch >= <span class="charliteral">'a'</span> && ch <= <span class="charliteral">'z'</span>) {</div>
|
||||
<div class="line"><span class="lineno"> 42</span> <span class="keywordflow">return</span> ch - <span class="charliteral">'a'</span> + <a class="code hl_variable" href="#a4bfac4be6ed1a34c7159eddb42469191">NUM_CHARS</a>;</div>
|
||||
<div class="line"><span class="lineno"> 43</span> }</div>
|
||||
<div class="line"><span class="lineno"> 44</span> </div>
|
||||
<div class="line"><span class="lineno"> 45</span> std::cerr << <span class="stringliteral">"Invalid character present. Exiting..."</span>;</div>
|
||||
<div class="line"><span class="lineno"> 46</span> std::exit(EXIT_FAILURE);</div>
|
||||
<div class="line"><span class="lineno"> 47</span> <span class="keywordflow">return</span> 0;</div>
|
||||
<div class="line"><span class="lineno"> 48</span> }</div>
|
||||
<div class="ttc" id="aclassdata__structures_1_1trie_html_a4bfac4be6ed1a34c7159eddb42469191"><div class="ttname"><a href="#a4bfac4be6ed1a34c7159eddb42469191">data_structures::trie::NUM_CHARS</a></div><div class="ttdeci">static constexpr uint8_t NUM_CHARS</div><div class="ttdoc">Number of alphabets.</div><div class="ttdef"><b>Definition</b> <a href="../../d7/d83/trie__tree_8cpp_source.html#l00027">trie_tree.cpp:27</a></div></div>
|
||||
</div><!-- fragment -->
|
||||
</div>
|
||||
</div>
|
||||
@@ -239,48 +239,48 @@ Static Private Attributes</h2></td></tr>
|
||||
<dd>
|
||||
<span class="tt">false</span> if unsuccessful </dd></dl>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d7/d83/trie__tree_8cpp_source.html#l00133">133</a> of file <a class="el" href="../../d7/d83/trie__tree_8cpp_source.html">trie_tree.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 133</span> {</div>
|
||||
<div class="line"><span class="lineno"> 134</span> <span class="keywordflow">if</span> (index == str.length()) {</div>
|
||||
<div class="line"><span class="lineno"> 135</span> <span class="keywordflow">if</span> (!<a class="code hl_variable" href="#a4cb0f775b5a4bc14a6d39b5c93883eb6">isEndofWord</a>) {</div>
|
||||
<div class="line"><span class="lineno"> 136</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
|
||||
<div class="line"><span class="lineno"> 137</span> }</div>
|
||||
<div class="line"><span class="lineno"> 138</span> <a class="code hl_variable" href="#a4cb0f775b5a4bc14a6d39b5c93883eb6">isEndofWord</a> = <span class="keyword">false</span>;</div>
|
||||
<div class="line"><span class="lineno"> 139</span> <span class="comment">// following lines - possible source of error?</span></div>
|
||||
<div class="line"><span class="lineno"> 140</span> <span class="comment">// for (int i = 0; i < NUM_CHARS; i++)</span></div>
|
||||
<div class="line"><span class="lineno"> 141</span> <span class="comment">// if (!arr[i])</span></div>
|
||||
<div class="line"><span class="lineno"> 142</span> <span class="comment">// return false;</span></div>
|
||||
<div class="line"><span class="lineno"> 143</span> <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
|
||||
<div class="line"><span class="lineno"> 144</span> }</div>
|
||||
<div class="line"><span class="lineno"> 145</span> <span class="keywordtype">int</span> j = <a class="code hl_function" href="#aab373beb3f618b90922528c68797d988">char_to_int</a>(str[index]);</div>
|
||||
<div class="line"><span class="lineno"> 146</span> <span class="keywordflow">if</span> (!<a class="code hl_variable" href="#a362dd78748a1f01ab019e55fd6098a8b">arr</a>[j]) {</div>
|
||||
<div class="line"><span class="lineno"> 147</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
|
||||
<div class="line"><span class="lineno"> 148</span> }</div>
|
||||
<div class="line"><span class="lineno"> 149</span> <span class="keywordtype">bool</span> var = <a class="code hl_function" href="#aeac27cfd397d2dd3f2f519efffafeeab">deleteString</a>(str, index + 1);</div>
|
||||
<div class="line"><span class="lineno"> 150</span> <span class="keywordflow">if</span> (var) {</div>
|
||||
<div class="line"><span class="lineno"> 151</span> <a class="code hl_variable" href="#a362dd78748a1f01ab019e55fd6098a8b">arr</a>[j].reset();</div>
|
||||
<div class="line"><span class="lineno"> 152</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="#a4cb0f775b5a4bc14a6d39b5c93883eb6">isEndofWord</a>) {</div>
|
||||
<div class="line"><span class="lineno"> 153</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
|
||||
<div class="line"><span class="lineno"> 154</span> } <span class="keywordflow">else</span> {</div>
|
||||
<div class="line"><span class="lineno"> 155</span> <span class="keywordtype">int</span> i = 0;</div>
|
||||
<div class="line"><span class="lineno"> 156</span> <span class="keywordflow">for</span> (i = 0; i < <a class="code hl_variable" href="#a4bfac4be6ed1a34c7159eddb42469191">NUM_CHARS</a>; i++) {</div>
|
||||
<div class="line"><span class="lineno"> 157</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="#a362dd78748a1f01ab019e55fd6098a8b">arr</a>[i]) {</div>
|
||||
<div class="line"><span class="lineno"> 158</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
|
||||
<div class="line"><span class="lineno"> 159</span> }</div>
|
||||
<div class="line"><span class="lineno"> 160</span> }</div>
|
||||
<div class="line"><span class="lineno"> 161</span> <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
|
||||
<div class="line"><span class="lineno"> 162</span> }</div>
|
||||
<div class="line"><span class="lineno"> 163</span> }</div>
|
||||
<div class="line"><span class="lineno"> 164</span> </div>
|
||||
<div class="line"><span class="lineno"> 165</span> <span class="comment">/* should not return here */</span></div>
|
||||
<div class="line"><span class="lineno"> 166</span> std::cout << __func__ << <span class="stringliteral">":"</span> << __LINE__</div>
|
||||
<div class="line"><span class="lineno"> 167</span> << <span class="stringliteral">"Should not reach this line\n"</span>;</div>
|
||||
<div class="line"><span class="lineno"> 168</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
|
||||
<div class="line"><span class="lineno"> 169</span> }</div>
|
||||
<div class="ttc" id="aclassdata__structures_1_1trie_html_a362dd78748a1f01ab019e55fd6098a8b"><div class="ttname"><a href="#a362dd78748a1f01ab019e55fd6098a8b">data_structures::trie::arr</a></div><div class="ttdeci">std::array< std::shared_ptr< trie >, NUM_CHARS<< 1 > arr</div><div class="ttdoc">Recursive tree nodes as an array of shared-pointers.</div><div class="ttdef"><b>Definition</b> <a href="../../d7/d83/trie__tree_8cpp_source.html#l00028">trie_tree.cpp:28</a></div></div>
|
||||
<div class="ttc" id="aclassdata__structures_1_1trie_html_a4cb0f775b5a4bc14a6d39b5c93883eb6"><div class="ttname"><a href="#a4cb0f775b5a4bc14a6d39b5c93883eb6">data_structures::trie::isEndofWord</a></div><div class="ttdeci">bool isEndofWord</div><div class="ttdoc">identifier if a node is terminal node</div><div class="ttdef"><b>Definition</b> <a href="../../d7/d83/trie__tree_8cpp_source.html#l00029">trie_tree.cpp:29</a></div></div>
|
||||
<div class="ttc" id="aclassdata__structures_1_1trie_html_aab373beb3f618b90922528c68797d988"><div class="ttname"><a href="#aab373beb3f618b90922528c68797d988">data_structures::trie::char_to_int</a></div><div class="ttdeci">uint8_t char_to_int(const char &ch) const</div><div class="ttdoc">Convert a character to integer for indexing.</div><div class="ttdef"><b>Definition</b> <a href="../../d7/d83/trie__tree_8cpp_source.html#l00037">trie_tree.cpp:37</a></div></div>
|
||||
<div class="ttc" id="aclassdata__structures_1_1trie_html_aeac27cfd397d2dd3f2f519efffafeeab"><div class="ttname"><a href="#aeac27cfd397d2dd3f2f519efffafeeab">data_structures::trie::deleteString</a></div><div class="ttdeci">bool deleteString(const std::string &str, int index)</div><div class="ttdef"><b>Definition</b> <a href="../../d7/d83/trie__tree_8cpp_source.html#l00133">trie_tree.cpp:133</a></div></div>
|
||||
<p class="definition">Definition at line <a class="el" href="../../d7/d83/trie__tree_8cpp_source.html#l00134">134</a> of file <a class="el" href="../../d7/d83/trie__tree_8cpp_source.html">trie_tree.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 134</span> {</div>
|
||||
<div class="line"><span class="lineno"> 135</span> <span class="keywordflow">if</span> (index == str.length()) {</div>
|
||||
<div class="line"><span class="lineno"> 136</span> <span class="keywordflow">if</span> (!<a class="code hl_variable" href="#a4cb0f775b5a4bc14a6d39b5c93883eb6">isEndofWord</a>) {</div>
|
||||
<div class="line"><span class="lineno"> 137</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
|
||||
<div class="line"><span class="lineno"> 138</span> }</div>
|
||||
<div class="line"><span class="lineno"> 139</span> <a class="code hl_variable" href="#a4cb0f775b5a4bc14a6d39b5c93883eb6">isEndofWord</a> = <span class="keyword">false</span>;</div>
|
||||
<div class="line"><span class="lineno"> 140</span> <span class="comment">// following lines - possible source of error?</span></div>
|
||||
<div class="line"><span class="lineno"> 141</span> <span class="comment">// for (int i = 0; i < NUM_CHARS; i++)</span></div>
|
||||
<div class="line"><span class="lineno"> 142</span> <span class="comment">// if (!arr[i])</span></div>
|
||||
<div class="line"><span class="lineno"> 143</span> <span class="comment">// return false;</span></div>
|
||||
<div class="line"><span class="lineno"> 144</span> <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
|
||||
<div class="line"><span class="lineno"> 145</span> }</div>
|
||||
<div class="line"><span class="lineno"> 146</span> <span class="keywordtype">int</span> j = <a class="code hl_function" href="#aab373beb3f618b90922528c68797d988">char_to_int</a>(str[index]);</div>
|
||||
<div class="line"><span class="lineno"> 147</span> <span class="keywordflow">if</span> (!<a class="code hl_variable" href="#a362dd78748a1f01ab019e55fd6098a8b">arr</a>[j]) {</div>
|
||||
<div class="line"><span class="lineno"> 148</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
|
||||
<div class="line"><span class="lineno"> 149</span> }</div>
|
||||
<div class="line"><span class="lineno"> 150</span> <span class="keywordtype">bool</span> var = <a class="code hl_function" href="#aeac27cfd397d2dd3f2f519efffafeeab">deleteString</a>(str, index + 1);</div>
|
||||
<div class="line"><span class="lineno"> 151</span> <span class="keywordflow">if</span> (var) {</div>
|
||||
<div class="line"><span class="lineno"> 152</span> <a class="code hl_variable" href="#a362dd78748a1f01ab019e55fd6098a8b">arr</a>[j].reset();</div>
|
||||
<div class="line"><span class="lineno"> 153</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="#a4cb0f775b5a4bc14a6d39b5c93883eb6">isEndofWord</a>) {</div>
|
||||
<div class="line"><span class="lineno"> 154</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
|
||||
<div class="line"><span class="lineno"> 155</span> } <span class="keywordflow">else</span> {</div>
|
||||
<div class="line"><span class="lineno"> 156</span> <span class="keywordtype">int</span> i = 0;</div>
|
||||
<div class="line"><span class="lineno"> 157</span> <span class="keywordflow">for</span> (i = 0; i < <a class="code hl_variable" href="#a4bfac4be6ed1a34c7159eddb42469191">NUM_CHARS</a>; i++) {</div>
|
||||
<div class="line"><span class="lineno"> 158</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="#a362dd78748a1f01ab019e55fd6098a8b">arr</a>[i]) {</div>
|
||||
<div class="line"><span class="lineno"> 159</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
|
||||
<div class="line"><span class="lineno"> 160</span> }</div>
|
||||
<div class="line"><span class="lineno"> 161</span> }</div>
|
||||
<div class="line"><span class="lineno"> 162</span> <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
|
||||
<div class="line"><span class="lineno"> 163</span> }</div>
|
||||
<div class="line"><span class="lineno"> 164</span> }</div>
|
||||
<div class="line"><span class="lineno"> 165</span> </div>
|
||||
<div class="line"><span class="lineno"> 166</span> <span class="comment">/* should not return here */</span></div>
|
||||
<div class="line"><span class="lineno"> 167</span> std::cout << __func__ << <span class="stringliteral">":"</span> << __LINE__</div>
|
||||
<div class="line"><span class="lineno"> 168</span> << <span class="stringliteral">"Should not reach this line\n"</span>;</div>
|
||||
<div class="line"><span class="lineno"> 169</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
|
||||
<div class="line"><span class="lineno"> 170</span> }</div>
|
||||
<div class="ttc" id="aclassdata__structures_1_1trie_html_a362dd78748a1f01ab019e55fd6098a8b"><div class="ttname"><a href="#a362dd78748a1f01ab019e55fd6098a8b">data_structures::trie::arr</a></div><div class="ttdeci">std::array< std::shared_ptr< trie >, NUM_CHARS<< 1 > arr</div><div class="ttdoc">Recursive tree nodes as an array of shared-pointers.</div><div class="ttdef"><b>Definition</b> <a href="../../d7/d83/trie__tree_8cpp_source.html#l00029">trie_tree.cpp:29</a></div></div>
|
||||
<div class="ttc" id="aclassdata__structures_1_1trie_html_a4cb0f775b5a4bc14a6d39b5c93883eb6"><div class="ttname"><a href="#a4cb0f775b5a4bc14a6d39b5c93883eb6">data_structures::trie::isEndofWord</a></div><div class="ttdeci">bool isEndofWord</div><div class="ttdoc">identifier if a node is terminal node</div><div class="ttdef"><b>Definition</b> <a href="../../d7/d83/trie__tree_8cpp_source.html#l00030">trie_tree.cpp:30</a></div></div>
|
||||
<div class="ttc" id="aclassdata__structures_1_1trie_html_aab373beb3f618b90922528c68797d988"><div class="ttname"><a href="#aab373beb3f618b90922528c68797d988">data_structures::trie::char_to_int</a></div><div class="ttdeci">uint8_t char_to_int(const char &ch) const</div><div class="ttdoc">Convert a character to integer for indexing.</div><div class="ttdef"><b>Definition</b> <a href="../../d7/d83/trie__tree_8cpp_source.html#l00038">trie_tree.cpp:38</a></div></div>
|
||||
<div class="ttc" id="aclassdata__structures_1_1trie_html_aeac27cfd397d2dd3f2f519efffafeeab"><div class="ttname"><a href="#aeac27cfd397d2dd3f2f519efffafeeab">data_structures::trie::deleteString</a></div><div class="ttdeci">bool deleteString(const std::string &str, int index)</div><div class="ttdef"><b>Definition</b> <a href="../../d7/d83/trie__tree_8cpp_source.html#l00134">trie_tree.cpp:134</a></div></div>
|
||||
</div><!-- fragment -->
|
||||
</div>
|
||||
</div>
|
||||
@@ -313,30 +313,30 @@ Static Private Attributes</h2></td></tr>
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d7/d83/trie__tree_8cpp_source.html#l00076">76</a> of file <a class="el" href="../../d7/d83/trie__tree_8cpp_source.html">trie_tree.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 76</span> {</div>
|
||||
<div class="line"><span class="lineno"> 77</span> std::shared_ptr<trie> root(<span class="keyword">nullptr</span>);</div>
|
||||
<div class="line"><span class="lineno"> 78</span> </div>
|
||||
<div class="line"><span class="lineno"> 79</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keywordtype">char</span>& ch : str) {</div>
|
||||
<div class="line"><span class="lineno"> 80</span> <span class="keywordtype">int</span> j = <a class="code hl_function" href="#aab373beb3f618b90922528c68797d988">char_to_int</a>(ch);</div>
|
||||
<div class="line"><span class="lineno"> 81</span> <span class="keywordflow">if</span> (root) {</div>
|
||||
<div class="line"><span class="lineno"> 82</span> <span class="keywordflow">if</span> (root->arr[j]) {</div>
|
||||
<div class="line"><span class="lineno"> 83</span> root = root->arr[j];</div>
|
||||
<div class="line"><span class="lineno"> 84</span> } <span class="keywordflow">else</span> {</div>
|
||||
<div class="line"><span class="lineno"> 85</span> std::shared_ptr<trie> temp(<span class="keyword">new</span> <a class="code hl_function" href="#a87d8bf99aea936f9381141753f1e90a8">trie</a>());</div>
|
||||
<div class="line"><span class="lineno"> 86</span> root->arr[j] = temp;</div>
|
||||
<div class="line"><span class="lineno"> 87</span> root = temp;</div>
|
||||
<div class="line"><span class="lineno"> 88</span> }</div>
|
||||
<div class="line"><span class="lineno"> 89</span> } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="#a362dd78748a1f01ab019e55fd6098a8b">arr</a>[j]) {</div>
|
||||
<div class="line"><span class="lineno"> 90</span> root = <a class="code hl_variable" href="#a362dd78748a1f01ab019e55fd6098a8b">arr</a>[j];</div>
|
||||
<div class="line"><span class="lineno"> 91</span> } <span class="keywordflow">else</span> {</div>
|
||||
<div class="line"><span class="lineno"> 92</span> std::shared_ptr<trie> temp(<span class="keyword">new</span> <a class="code hl_function" href="#a87d8bf99aea936f9381141753f1e90a8">trie</a>());</div>
|
||||
<div class="line"><span class="lineno"> 93</span> <a class="code hl_variable" href="#a362dd78748a1f01ab019e55fd6098a8b">arr</a>[j] = temp;</div>
|
||||
<div class="line"><span class="lineno"> 94</span> root = temp;</div>
|
||||
<div class="line"><span class="lineno"> 95</span> }</div>
|
||||
<div class="line"><span class="lineno"> 96</span> }</div>
|
||||
<div class="line"><span class="lineno"> 97</span> root->isEndofWord = <span class="keyword">true</span>;</div>
|
||||
<div class="line"><span class="lineno"> 98</span> }</div>
|
||||
<p class="definition">Definition at line <a class="el" href="../../d7/d83/trie__tree_8cpp_source.html#l00077">77</a> of file <a class="el" href="../../d7/d83/trie__tree_8cpp_source.html">trie_tree.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 77</span> {</div>
|
||||
<div class="line"><span class="lineno"> 78</span> std::shared_ptr<trie> root(<span class="keyword">nullptr</span>);</div>
|
||||
<div class="line"><span class="lineno"> 79</span> </div>
|
||||
<div class="line"><span class="lineno"> 80</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keywordtype">char</span>& ch : str) {</div>
|
||||
<div class="line"><span class="lineno"> 81</span> <span class="keywordtype">int</span> j = <a class="code hl_function" href="#aab373beb3f618b90922528c68797d988">char_to_int</a>(ch);</div>
|
||||
<div class="line"><span class="lineno"> 82</span> <span class="keywordflow">if</span> (root) {</div>
|
||||
<div class="line"><span class="lineno"> 83</span> <span class="keywordflow">if</span> (root->arr[j]) {</div>
|
||||
<div class="line"><span class="lineno"> 84</span> root = root->arr[j];</div>
|
||||
<div class="line"><span class="lineno"> 85</span> } <span class="keywordflow">else</span> {</div>
|
||||
<div class="line"><span class="lineno"> 86</span> std::shared_ptr<trie> temp(<span class="keyword">new</span> <a class="code hl_function" href="#a87d8bf99aea936f9381141753f1e90a8">trie</a>());</div>
|
||||
<div class="line"><span class="lineno"> 87</span> root->arr[j] = temp;</div>
|
||||
<div class="line"><span class="lineno"> 88</span> root = temp;</div>
|
||||
<div class="line"><span class="lineno"> 89</span> }</div>
|
||||
<div class="line"><span class="lineno"> 90</span> } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="#a362dd78748a1f01ab019e55fd6098a8b">arr</a>[j]) {</div>
|
||||
<div class="line"><span class="lineno"> 91</span> root = <a class="code hl_variable" href="#a362dd78748a1f01ab019e55fd6098a8b">arr</a>[j];</div>
|
||||
<div class="line"><span class="lineno"> 92</span> } <span class="keywordflow">else</span> {</div>
|
||||
<div class="line"><span class="lineno"> 93</span> std::shared_ptr<trie> temp(<span class="keyword">new</span> <a class="code hl_function" href="#a87d8bf99aea936f9381141753f1e90a8">trie</a>());</div>
|
||||
<div class="line"><span class="lineno"> 94</span> <a class="code hl_variable" href="#a362dd78748a1f01ab019e55fd6098a8b">arr</a>[j] = temp;</div>
|
||||
<div class="line"><span class="lineno"> 95</span> root = temp;</div>
|
||||
<div class="line"><span class="lineno"> 96</span> }</div>
|
||||
<div class="line"><span class="lineno"> 97</span> }</div>
|
||||
<div class="line"><span class="lineno"> 98</span> root->isEndofWord = <span class="keyword">true</span>;</div>
|
||||
<div class="line"><span class="lineno"> 99</span> }</div>
|
||||
<div class="ttc" id="aclassdata__structures_1_1trie_html_a87d8bf99aea936f9381141753f1e90a8"><div class="ttname"><a href="#a87d8bf99aea936f9381141753f1e90a8">data_structures::trie::trie</a></div><div class="ttdeci">trie()=default</div><div class="ttdoc">Class default constructor.</div></div>
|
||||
</div><!-- fragment -->
|
||||
</div>
|
||||
@@ -383,21 +383,21 @@ Static Private Attributes</h2></td></tr>
|
||||
<dd>
|
||||
<span class="tt">false</span> if not found </dd></dl>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d7/d83/trie__tree_8cpp_source.html#l00055">55</a> of file <a class="el" href="../../d7/d83/trie__tree_8cpp_source.html">trie_tree.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 56</span> {</div>
|
||||
<div class="line"><span class="lineno"> 57</span> <span class="keywordflow">if</span> (index == str.length()) {</div>
|
||||
<div class="line"><span class="lineno"> 58</span> <span class="keywordflow">if</span> (!root->isEndofWord) {</div>
|
||||
<div class="line"><span class="lineno"> 59</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
|
||||
<div class="line"><span class="lineno"> 60</span> }</div>
|
||||
<div class="line"><span class="lineno"> 61</span> <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
|
||||
<div class="line"><span class="lineno"> 62</span> }</div>
|
||||
<div class="line"><span class="lineno"> 63</span> <span class="keywordtype">int</span> j = <a class="code hl_function" href="#aab373beb3f618b90922528c68797d988">char_to_int</a>(str[index]);</div>
|
||||
<div class="line"><span class="lineno"> 64</span> <span class="keywordflow">if</span> (!root->arr[j]) {</div>
|
||||
<div class="line"><span class="lineno"> 65</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
|
||||
<div class="line"><span class="lineno"> 66</span> }</div>
|
||||
<div class="line"><span class="lineno"> 67</span> <span class="keywordflow">return</span> <a class="code hl_function" href="#a961eb5d576d2420f2036009154397c63">search</a>(root->arr[j], str, index + 1);</div>
|
||||
<div class="line"><span class="lineno"> 68</span> }</div>
|
||||
<div class="ttc" id="aclassdata__structures_1_1trie_html_a961eb5d576d2420f2036009154397c63"><div class="ttname"><a href="#a961eb5d576d2420f2036009154397c63">data_structures::trie::search</a></div><div class="ttdeci">bool search(const std::shared_ptr< trie > &root, const std::string &str, int index)</div><div class="ttdef"><b>Definition</b> <a href="../../d7/d83/trie__tree_8cpp_source.html#l00055">trie_tree.cpp:55</a></div></div>
|
||||
<p class="definition">Definition at line <a class="el" href="../../d7/d83/trie__tree_8cpp_source.html#l00056">56</a> of file <a class="el" href="../../d7/d83/trie__tree_8cpp_source.html">trie_tree.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 57</span> {</div>
|
||||
<div class="line"><span class="lineno"> 58</span> <span class="keywordflow">if</span> (index == str.length()) {</div>
|
||||
<div class="line"><span class="lineno"> 59</span> <span class="keywordflow">if</span> (!root->isEndofWord) {</div>
|
||||
<div class="line"><span class="lineno"> 60</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
|
||||
<div class="line"><span class="lineno"> 61</span> }</div>
|
||||
<div class="line"><span class="lineno"> 62</span> <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
|
||||
<div class="line"><span class="lineno"> 63</span> }</div>
|
||||
<div class="line"><span class="lineno"> 64</span> <span class="keywordtype">int</span> j = <a class="code hl_function" href="#aab373beb3f618b90922528c68797d988">char_to_int</a>(str[index]);</div>
|
||||
<div class="line"><span class="lineno"> 65</span> <span class="keywordflow">if</span> (!root->arr[j]) {</div>
|
||||
<div class="line"><span class="lineno"> 66</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
|
||||
<div class="line"><span class="lineno"> 67</span> }</div>
|
||||
<div class="line"><span class="lineno"> 68</span> <span class="keywordflow">return</span> <a class="code hl_function" href="#a961eb5d576d2420f2036009154397c63">search</a>(root->arr[j], str, index + 1);</div>
|
||||
<div class="line"><span class="lineno"> 69</span> }</div>
|
||||
<div class="ttc" id="aclassdata__structures_1_1trie_html_a961eb5d576d2420f2036009154397c63"><div class="ttname"><a href="#a961eb5d576d2420f2036009154397c63">data_structures::trie::search</a></div><div class="ttdeci">bool search(const std::shared_ptr< trie > &root, const std::string &str, int index)</div><div class="ttdef"><b>Definition</b> <a href="../../d7/d83/trie__tree_8cpp_source.html#l00056">trie_tree.cpp:56</a></div></div>
|
||||
</div><!-- fragment -->
|
||||
</div>
|
||||
</div>
|
||||
@@ -438,20 +438,20 @@ Static Private Attributes</h2></td></tr>
|
||||
<dd>
|
||||
<span class="tt">false</span> if not found </dd></dl>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d7/d83/trie__tree_8cpp_source.html#l00106">106</a> of file <a class="el" href="../../d7/d83/trie__tree_8cpp_source.html">trie_tree.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 106</span> {</div>
|
||||
<div class="line"><span class="lineno"> 107</span> <span class="keywordflow">if</span> (index == str.length()) {</div>
|
||||
<div class="line"><span class="lineno"> 108</span> <span class="keywordflow">if</span> (!<a class="code hl_variable" href="#a4cb0f775b5a4bc14a6d39b5c93883eb6">isEndofWord</a>) {</div>
|
||||
<div class="line"><span class="lineno"> 109</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
|
||||
<div class="line"><span class="lineno"> 110</span> }</div>
|
||||
<div class="line"><span class="lineno"> 111</span> <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
|
||||
<div class="line"><span class="lineno"> 112</span> }</div>
|
||||
<div class="line"><span class="lineno"> 113</span> <span class="keywordtype">int</span> j = <a class="code hl_function" href="#aab373beb3f618b90922528c68797d988">char_to_int</a>(str[index]);</div>
|
||||
<div class="line"><span class="lineno"> 114</span> <span class="keywordflow">if</span> (!<a class="code hl_variable" href="#a362dd78748a1f01ab019e55fd6098a8b">arr</a>[j]) {</div>
|
||||
<div class="line"><span class="lineno"> 115</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
|
||||
<div class="line"><span class="lineno"> 116</span> }</div>
|
||||
<div class="line"><span class="lineno"> 117</span> <span class="keywordflow">return</span> <a class="code hl_function" href="#a961eb5d576d2420f2036009154397c63">search</a>(<a class="code hl_variable" href="#a362dd78748a1f01ab019e55fd6098a8b">arr</a>[j], str, index + 1);</div>
|
||||
<div class="line"><span class="lineno"> 118</span> }</div>
|
||||
<p class="definition">Definition at line <a class="el" href="../../d7/d83/trie__tree_8cpp_source.html#l00107">107</a> of file <a class="el" href="../../d7/d83/trie__tree_8cpp_source.html">trie_tree.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 107</span> {</div>
|
||||
<div class="line"><span class="lineno"> 108</span> <span class="keywordflow">if</span> (index == str.length()) {</div>
|
||||
<div class="line"><span class="lineno"> 109</span> <span class="keywordflow">if</span> (!<a class="code hl_variable" href="#a4cb0f775b5a4bc14a6d39b5c93883eb6">isEndofWord</a>) {</div>
|
||||
<div class="line"><span class="lineno"> 110</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
|
||||
<div class="line"><span class="lineno"> 111</span> }</div>
|
||||
<div class="line"><span class="lineno"> 112</span> <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
|
||||
<div class="line"><span class="lineno"> 113</span> }</div>
|
||||
<div class="line"><span class="lineno"> 114</span> <span class="keywordtype">int</span> j = <a class="code hl_function" href="#aab373beb3f618b90922528c68797d988">char_to_int</a>(str[index]);</div>
|
||||
<div class="line"><span class="lineno"> 115</span> <span class="keywordflow">if</span> (!<a class="code hl_variable" href="#a362dd78748a1f01ab019e55fd6098a8b">arr</a>[j]) {</div>
|
||||
<div class="line"><span class="lineno"> 116</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
|
||||
<div class="line"><span class="lineno"> 117</span> }</div>
|
||||
<div class="line"><span class="lineno"> 118</span> <span class="keywordflow">return</span> <a class="code hl_function" href="#a961eb5d576d2420f2036009154397c63">search</a>(<a class="code hl_variable" href="#a362dd78748a1f01ab019e55fd6098a8b">arr</a>[j], str, index + 1);</div>
|
||||
<div class="line"><span class="lineno"> 119</span> }</div>
|
||||
</div><!-- fragment -->
|
||||
</div>
|
||||
</div>
|
||||
@@ -478,7 +478,7 @@ Static Private Attributes</h2></td></tr>
|
||||
|
||||
<p>Recursive tree nodes as an array of shared-pointers. </p>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d7/d83/trie__tree_8cpp_source.html#l00028">28</a> of file <a class="el" href="../../d7/d83/trie__tree_8cpp_source.html">trie_tree.cpp</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="../../d7/d83/trie__tree_8cpp_source.html#l00029">29</a> of file <a class="el" href="../../d7/d83/trie__tree_8cpp_source.html">trie_tree.cpp</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@@ -504,7 +504,7 @@ Static Private Attributes</h2></td></tr>
|
||||
|
||||
<p>identifier if a node is terminal node </p>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d7/d83/trie__tree_8cpp_source.html#l00029">29</a> of file <a class="el" href="../../d7/d83/trie__tree_8cpp_source.html">trie_tree.cpp</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="../../d7/d83/trie__tree_8cpp_source.html#l00030">30</a> of file <a class="el" href="../../d7/d83/trie__tree_8cpp_source.html">trie_tree.cpp</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@@ -530,7 +530,7 @@ Static Private Attributes</h2></td></tr>
|
||||
|
||||
<p>Number of alphabets. </p>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d7/d83/trie__tree_8cpp_source.html#l00026">26</a> of file <a class="el" href="../../d7/d83/trie__tree_8cpp_source.html">trie_tree.cpp</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="../../d7/d83/trie__tree_8cpp_source.html#l00027">27</a> of file <a class="el" href="../../d7/d83/trie__tree_8cpp_source.html">trie_tree.cpp</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -191,7 +191,7 @@ class range_queries::heavy_light_decomposition::Tree< X ></div><p>A Basic
|
||||
</dl>
|
||||
<p>Deleting the default constructor An instance can only be created with the number of nodes Defaults: t_node indexing are zero based t_root is 0 depth of root_node is 0 Supports: lift :- lift a node k units up the tree kth_ancestor :- returns the kth ancestor lca :- returns the least common ancestor </p>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00078">78</a> of file <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html">heavy_light_decomposition.cpp</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00079">79</a> of file <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html">heavy_light_decomposition.cpp</a>.</p>
|
||||
</div><a name="doc-constructors" id="doc-constructors"></a><h2 id="header-doc-constructors" class="groupheader">Constructor & Destructor Documentation</h2>
|
||||
<a id="a835fb2bbb27307b8cacad9b287968bc1" name="a835fb2bbb27307b8cacad9b287968bc1"></a>
|
||||
<h2 class="memtitle"><span class="permalink"><a href="#a835fb2bbb27307b8cacad9b287968bc1">◆ </a></span>Tree()</h2>
|
||||
@@ -226,25 +226,25 @@ template<typename X> </div>
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00140">140</a> of file <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html">heavy_light_decomposition.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 141</span> : <a class="code hl_variable" href="#ae4630fa70a80a1dc65a875488a67178a">t_nodes</a>(<a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">nodes</a>), <a class="code hl_variable" href="#ab2ab020f798d00be2613ecf63074b7c1">t_maxlift</a>(<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(<a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">floor</a>(<a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">log2</a>(<a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">nodes</a>))) + 1) {</div>
|
||||
<div class="line"><span class="lineno"> 142</span> <span class="comment">/* Initialize and resize all the vectors */</span></div>
|
||||
<div class="line"><span class="lineno"> 143</span> <a class="code hl_variable" href="#aa6c37e840355b9fb2105181c578694e8">t_root</a> = 0; <span class="comment">/* Default */</span></div>
|
||||
<div class="line"><span class="lineno"> 144</span> <a class="code hl_variable" href="#ab1aeaefa1bd97b867c652ba916fbdb43">t_adj</a>.resize(<a class="code hl_variable" href="#ae4630fa70a80a1dc65a875488a67178a">t_nodes</a>);</div>
|
||||
<div class="line"><span class="lineno"> 145</span> <a class="code hl_variable" href="#a350157a5fb79f76fceae33fc84171203">t_par</a>.assign(<a class="code hl_variable" href="#ae4630fa70a80a1dc65a875488a67178a">t_nodes</a>, <a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">std::vector<int></a>(<a class="code hl_variable" href="#ab2ab020f798d00be2613ecf63074b7c1">t_maxlift</a>, -1));</div>
|
||||
<div class="line"><span class="lineno"> 146</span> <a class="code hl_variable" href="#a0efd0b9c564092f443ca97030d866ef1">t_depth</a>.assign(<a class="code hl_variable" href="#ae4630fa70a80a1dc65a875488a67178a">t_nodes</a>, 0);</div>
|
||||
<div class="line"><span class="lineno"> 147</span> <a class="code hl_variable" href="#ada1494fccbc7f1f07b2f9be9f7e07ad5">t_size</a>.assign(<a class="code hl_variable" href="#ae4630fa70a80a1dc65a875488a67178a">t_nodes</a>, 1);</div>
|
||||
<div class="line"><span class="lineno"> 148</span> <a class="code hl_variable" href="#a135b7952593c9b1aae38fcaf1cc1abf7">t_val</a>.resize(<a class="code hl_variable" href="#ae4630fa70a80a1dc65a875488a67178a">t_nodes</a>);</div>
|
||||
<div class="line"><span class="lineno"> 149</span> }</div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1heavy__light__decomposition_1_1_tree_html"><div class="ttname"><a href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">range_queries::heavy_light_decomposition::Tree</a></div><div class="ttdoc">A Basic Tree, which supports binary lifting.</div><div class="ttdef"><b>Definition</b> <a href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00078">heavy_light_decomposition.cpp:78</a></div></div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1heavy__light__decomposition_1_1_tree_html_a0efd0b9c564092f443ca97030d866ef1"><div class="ttname"><a href="#a0efd0b9c564092f443ca97030d866ef1">range_queries::heavy_light_decomposition::Tree::t_depth</a></div><div class="ttdeci">std::vector< int > t_depth</div><div class="ttdoc">a vector to store the depth of a node,</div><div class="ttdef"><b>Definition</b> <a href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#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="#a135b7952593c9b1aae38fcaf1cc1abf7">range_queries::heavy_light_decomposition::Tree::t_val</a></div><div class="ttdeci">std::vector< X > t_val</div><div class="ttdoc">values of nodes</div><div class="ttdef"><b>Definition</b> <a href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#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="#a350157a5fb79f76fceae33fc84171203">range_queries::heavy_light_decomposition::Tree::t_par</a></div><div class="ttdeci">std::vector< std::vector< int > > 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="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00087">heavy_light_decomposition.cpp:87</a></div></div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1heavy__light__decomposition_1_1_tree_html_aa6c37e840355b9fb2105181c578694e8"><div class="ttname"><a href="#aa6c37e840355b9fb2105181c578694e8">range_queries::heavy_light_decomposition::Tree::t_root</a></div><div class="ttdeci">int t_root</div><div class="ttdoc">the root of the tree</div><div class="ttdef"><b>Definition</b> <a href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00091">heavy_light_decomposition.cpp:91</a></div></div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1heavy__light__decomposition_1_1_tree_html_ab1aeaefa1bd97b867c652ba916fbdb43"><div class="ttname"><a href="#ab1aeaefa1bd97b867c652ba916fbdb43">range_queries::heavy_light_decomposition::Tree::t_adj</a></div><div class="ttdeci">std::vector< std::list< int > > t_adj</div><div class="ttdoc">an adjacency list to stores the tree edges</div><div class="ttdef"><b>Definition</b> <a href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00083">heavy_light_decomposition.cpp:83</a></div></div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1heavy__light__decomposition_1_1_tree_html_ab2ab020f798d00be2613ecf63074b7c1"><div class="ttname"><a href="#ab2ab020f798d00be2613ecf63074b7c1">range_queries::heavy_light_decomposition::Tree::t_maxlift</a></div><div class="ttdeci">const int t_maxlift</div><div class="ttdoc">maximum possible height of the tree</div><div class="ttdef"><b>Definition</b> <a href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00085">heavy_light_decomposition.cpp:85</a></div></div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1heavy__light__decomposition_1_1_tree_html_ada1494fccbc7f1f07b2f9be9f7e07ad5"><div class="ttname"><a href="#ada1494fccbc7f1f07b2f9be9f7e07ad5">range_queries::heavy_light_decomposition::Tree::t_size</a></div><div class="ttdeci">std::vector< int > t_size</div><div class="ttdoc">a vector to store the subtree size rooted at node</div><div class="ttdef"><b>Definition</b> <a href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00089">heavy_light_decomposition.cpp:89</a></div></div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1heavy__light__decomposition_1_1_tree_html_ae4630fa70a80a1dc65a875488a67178a"><div class="ttname"><a href="#ae4630fa70a80a1dc65a875488a67178a">range_queries::heavy_light_decomposition::Tree::t_nodes</a></div><div class="ttdeci">const int t_nodes</div><div class="ttdoc">number of nodes</div><div class="ttdef"><b>Definition</b> <a href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00084">heavy_light_decomposition.cpp:84</a></div></div>
|
||||
<p class="definition">Definition at line <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00142">142</a> of file <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html">heavy_light_decomposition.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 143</span> : <a class="code hl_variable" href="#ae4630fa70a80a1dc65a875488a67178a">t_nodes</a>(<a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">nodes</a>), <a class="code hl_variable" href="#ab2ab020f798d00be2613ecf63074b7c1">t_maxlift</a>(<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(<a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">floor</a>(<a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">log2</a>(<a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">nodes</a>))) + 1) {</div>
|
||||
<div class="line"><span class="lineno"> 144</span> <span class="comment">/* Initialize and resize all the vectors */</span></div>
|
||||
<div class="line"><span class="lineno"> 145</span> <a class="code hl_variable" href="#aa6c37e840355b9fb2105181c578694e8">t_root</a> = 0; <span class="comment">/* Default */</span></div>
|
||||
<div class="line"><span class="lineno"> 146</span> <a class="code hl_variable" href="#ab1aeaefa1bd97b867c652ba916fbdb43">t_adj</a>.resize(<a class="code hl_variable" href="#ae4630fa70a80a1dc65a875488a67178a">t_nodes</a>);</div>
|
||||
<div class="line"><span class="lineno"> 147</span> <a class="code hl_variable" href="#a350157a5fb79f76fceae33fc84171203">t_par</a>.assign(<a class="code hl_variable" href="#ae4630fa70a80a1dc65a875488a67178a">t_nodes</a>, <a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">std::vector<int></a>(<a class="code hl_variable" href="#ab2ab020f798d00be2613ecf63074b7c1">t_maxlift</a>, -1));</div>
|
||||
<div class="line"><span class="lineno"> 148</span> <a class="code hl_variable" href="#a0efd0b9c564092f443ca97030d866ef1">t_depth</a>.assign(<a class="code hl_variable" href="#ae4630fa70a80a1dc65a875488a67178a">t_nodes</a>, 0);</div>
|
||||
<div class="line"><span class="lineno"> 149</span> <a class="code hl_variable" href="#ada1494fccbc7f1f07b2f9be9f7e07ad5">t_size</a>.assign(<a class="code hl_variable" href="#ae4630fa70a80a1dc65a875488a67178a">t_nodes</a>, 1);</div>
|
||||
<div class="line"><span class="lineno"> 150</span> <a class="code hl_variable" href="#a135b7952593c9b1aae38fcaf1cc1abf7">t_val</a>.resize(<a class="code hl_variable" href="#ae4630fa70a80a1dc65a875488a67178a">t_nodes</a>);</div>
|
||||
<div class="line"><span class="lineno"> 151</span> }</div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1heavy__light__decomposition_1_1_tree_html"><div class="ttname"><a href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">range_queries::heavy_light_decomposition::Tree</a></div><div class="ttdoc">A Basic Tree, which supports binary lifting.</div><div class="ttdef"><b>Definition</b> <a href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00079">heavy_light_decomposition.cpp:79</a></div></div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1heavy__light__decomposition_1_1_tree_html_a0efd0b9c564092f443ca97030d866ef1"><div class="ttname"><a href="#a0efd0b9c564092f443ca97030d866ef1">range_queries::heavy_light_decomposition::Tree::t_depth</a></div><div class="ttdeci">std::vector< int > t_depth</div><div class="ttdoc">a vector to store the depth of a node,</div><div class="ttdef"><b>Definition</b> <a href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00089">heavy_light_decomposition.cpp:89</a></div></div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1heavy__light__decomposition_1_1_tree_html_a135b7952593c9b1aae38fcaf1cc1abf7"><div class="ttname"><a href="#a135b7952593c9b1aae38fcaf1cc1abf7">range_queries::heavy_light_decomposition::Tree::t_val</a></div><div class="ttdeci">std::vector< X > t_val</div><div class="ttdoc">values of nodes</div><div class="ttdef"><b>Definition</b> <a href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00093">heavy_light_decomposition.cpp:93</a></div></div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1heavy__light__decomposition_1_1_tree_html_a350157a5fb79f76fceae33fc84171203"><div class="ttname"><a href="#a350157a5fb79f76fceae33fc84171203">range_queries::heavy_light_decomposition::Tree::t_par</a></div><div class="ttdeci">std::vector< std::vector< int > > 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="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00088">heavy_light_decomposition.cpp:88</a></div></div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1heavy__light__decomposition_1_1_tree_html_aa6c37e840355b9fb2105181c578694e8"><div class="ttname"><a href="#aa6c37e840355b9fb2105181c578694e8">range_queries::heavy_light_decomposition::Tree::t_root</a></div><div class="ttdeci">int t_root</div><div class="ttdoc">the root of the tree</div><div class="ttdef"><b>Definition</b> <a href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00092">heavy_light_decomposition.cpp:92</a></div></div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1heavy__light__decomposition_1_1_tree_html_ab1aeaefa1bd97b867c652ba916fbdb43"><div class="ttname"><a href="#ab1aeaefa1bd97b867c652ba916fbdb43">range_queries::heavy_light_decomposition::Tree::t_adj</a></div><div class="ttdeci">std::vector< std::list< int > > t_adj</div><div class="ttdoc">an adjacency list to stores the tree edges</div><div class="ttdef"><b>Definition</b> <a href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00084">heavy_light_decomposition.cpp:84</a></div></div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1heavy__light__decomposition_1_1_tree_html_ab2ab020f798d00be2613ecf63074b7c1"><div class="ttname"><a href="#ab2ab020f798d00be2613ecf63074b7c1">range_queries::heavy_light_decomposition::Tree::t_maxlift</a></div><div class="ttdeci">const int t_maxlift</div><div class="ttdoc">maximum possible height of the tree</div><div class="ttdef"><b>Definition</b> <a href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00086">heavy_light_decomposition.cpp:86</a></div></div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1heavy__light__decomposition_1_1_tree_html_ada1494fccbc7f1f07b2f9be9f7e07ad5"><div class="ttname"><a href="#ada1494fccbc7f1f07b2f9be9f7e07ad5">range_queries::heavy_light_decomposition::Tree::t_size</a></div><div class="ttdeci">std::vector< int > t_size</div><div class="ttdoc">a vector to store the subtree size rooted at node</div><div class="ttdef"><b>Definition</b> <a href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00090">heavy_light_decomposition.cpp:90</a></div></div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1heavy__light__decomposition_1_1_tree_html_ae4630fa70a80a1dc65a875488a67178a"><div class="ttname"><a href="#ae4630fa70a80a1dc65a875488a67178a">range_queries::heavy_light_decomposition::Tree::t_nodes</a></div><div class="ttdeci">const int t_nodes</div><div class="ttdoc">number of nodes</div><div class="ttdef"><b>Definition</b> <a href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00085">heavy_light_decomposition.cpp:85</a></div></div>
|
||||
</div><!-- fragment -->
|
||||
</div>
|
||||
</div>
|
||||
@@ -288,11 +288,11 @@ template<typename X> </div>
|
||||
</dl>
|
||||
<dl class="section return"><dt>Returns</dt><dd>void </dd></dl>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00157">157</a> of file <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html">heavy_light_decomposition.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 157</span> {</div>
|
||||
<div class="line"><span class="lineno"> 158</span> <a class="code hl_variable" href="#ab1aeaefa1bd97b867c652ba916fbdb43">t_adj</a>[<a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">u</a>].push_back(<a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">v</a>);</div>
|
||||
<div class="line"><span class="lineno"> 159</span> <a class="code hl_variable" href="#ab1aeaefa1bd97b867c652ba916fbdb43">t_adj</a>[<a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">v</a>].push_back(<a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">u</a>);</div>
|
||||
<div class="line"><span class="lineno"> 160</span> }</div>
|
||||
<p class="definition">Definition at line <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00159">159</a> of file <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html">heavy_light_decomposition.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 159</span> {</div>
|
||||
<div class="line"><span class="lineno"> 160</span> <a class="code hl_variable" href="#ab1aeaefa1bd97b867c652ba916fbdb43">t_adj</a>[<a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">u</a>].push_back(<a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">v</a>);</div>
|
||||
<div class="line"><span class="lineno"> 161</span> <a class="code hl_variable" href="#ab1aeaefa1bd97b867c652ba916fbdb43">t_adj</a>[<a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">v</a>].push_back(<a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">u</a>);</div>
|
||||
<div class="line"><span class="lineno"> 162</span> }</div>
|
||||
</div><!-- fragment -->
|
||||
</div>
|
||||
</div>
|
||||
@@ -330,8 +330,8 @@ template<typename X> </div>
|
||||
</dl>
|
||||
<dl class="section return"><dt>Returns</dt><dd>void </dd></dl>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00167">167</a> of file <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html">heavy_light_decomposition.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 167</span>{ <a class="code hl_variable" href="#aa6c37e840355b9fb2105181c578694e8">t_root</a> = <a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">new_root</a>; }</div>
|
||||
<p class="definition">Definition at line <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00169">169</a> of file <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html">heavy_light_decomposition.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 169</span>{ <a class="code hl_variable" href="#aa6c37e840355b9fb2105181c578694e8">t_root</a> = <a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">new_root</a>; }</div>
|
||||
</div><!-- fragment -->
|
||||
</div>
|
||||
</div>
|
||||
@@ -374,25 +374,25 @@ template<typename X> </div>
|
||||
</dl>
|
||||
<dl class="section return"><dt>Returns</dt><dd>void </dd></dl>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00116">116</a> of file <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html">heavy_light_decomposition.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 116</span> {</div>
|
||||
<div class="line"><span class="lineno"> 117</span> <a class="code hl_variable" href="#a350157a5fb79f76fceae33fc84171203">t_par</a>[<a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">u</a>][0] = <a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">p</a>;</div>
|
||||
<div class="line"><span class="lineno"> 118</span> <span class="keywordflow">if</span> (<a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">p</a> != -1) {</div>
|
||||
<div class="line"><span class="lineno"> 119</span> <a class="code hl_variable" href="#a0efd0b9c564092f443ca97030d866ef1">t_depth</a>[<a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">u</a>] = 1 + <a class="code hl_variable" href="#a0efd0b9c564092f443ca97030d866ef1">t_depth</a>[<a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">p</a>];</div>
|
||||
<div class="line"><span class="lineno"> 120</span> }</div>
|
||||
<div class="line"><span class="lineno"> 121</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> <a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">k</a> = 1; <a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">k</a> < <a class="code hl_variable" href="#ab2ab020f798d00be2613ecf63074b7c1">t_maxlift</a>; <a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">k</a>++) {</div>
|
||||
<div class="line"><span class="lineno"> 122</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="#a350157a5fb79f76fceae33fc84171203">t_par</a>[<a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">u</a>][<a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">k</a> - 1] != -1) {</div>
|
||||
<div class="line"><span class="lineno"> 123</span> <a class="code hl_variable" href="#a350157a5fb79f76fceae33fc84171203">t_par</a>[<a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">u</a>][<a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">k</a>] = <a class="code hl_variable" href="#a350157a5fb79f76fceae33fc84171203">t_par</a>[<a class="code hl_variable" href="#a350157a5fb79f76fceae33fc84171203">t_par</a>[<a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">u</a>][<a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">k</a> - 1]][<a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">k</a> - 1];</div>
|
||||
<div class="line"><span class="lineno"> 124</span> }</div>
|
||||
<div class="line"><span class="lineno"> 125</span> }</div>
|
||||
<div class="line"><span class="lineno"> 126</span> </div>
|
||||
<div class="line"><span class="lineno"> 127</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keywordtype">int</span> &<a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">v</a> : <a class="code hl_variable" href="#ab1aeaefa1bd97b867c652ba916fbdb43">t_adj</a>[<a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">u</a>]) {</div>
|
||||
<div class="line"><span class="lineno"> 128</span> <span class="keywordflow">if</span> (<a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">v</a> ^ <a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">p</a>) {</div>
|
||||
<div class="line"><span class="lineno"> 129</span> <a class="code hl_function" href="#ae8de7aefcb6635d3dacdd174cd4890c4">dfs_lca</a>(<a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">v</a>, <a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">u</a>);</div>
|
||||
<div class="line"><span class="lineno"> 130</span> }</div>
|
||||
<div class="line"><span class="lineno"> 131</span> }</div>
|
||||
<div class="line"><span class="lineno"> 132</span> }</div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1heavy__light__decomposition_1_1_tree_html_ae8de7aefcb6635d3dacdd174cd4890c4"><div class="ttname"><a href="#ae8de7aefcb6635d3dacdd174cd4890c4">range_queries::heavy_light_decomposition::Tree::dfs_lca</a></div><div class="ttdeci">void dfs_lca(int u, int p=-1)</div><div class="ttdoc">Utility function to populate the t_par vector.</div><div class="ttdef"><b>Definition</b> <a href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00116">heavy_light_decomposition.cpp:116</a></div></div>
|
||||
<p class="definition">Definition at line <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00118">118</a> of file <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html">heavy_light_decomposition.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 118</span> {</div>
|
||||
<div class="line"><span class="lineno"> 119</span> <a class="code hl_variable" href="#a350157a5fb79f76fceae33fc84171203">t_par</a>[<a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">u</a>][0] = <a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">p</a>;</div>
|
||||
<div class="line"><span class="lineno"> 120</span> <span class="keywordflow">if</span> (<a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">p</a> != -1) {</div>
|
||||
<div class="line"><span class="lineno"> 121</span> <a class="code hl_variable" href="#a0efd0b9c564092f443ca97030d866ef1">t_depth</a>[<a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">u</a>] = 1 + <a class="code hl_variable" href="#a0efd0b9c564092f443ca97030d866ef1">t_depth</a>[<a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">p</a>];</div>
|
||||
<div class="line"><span class="lineno"> 122</span> }</div>
|
||||
<div class="line"><span class="lineno"> 123</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> <a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">k</a> = 1; <a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">k</a> < <a class="code hl_variable" href="#ab2ab020f798d00be2613ecf63074b7c1">t_maxlift</a>; <a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">k</a>++) {</div>
|
||||
<div class="line"><span class="lineno"> 124</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="#a350157a5fb79f76fceae33fc84171203">t_par</a>[<a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">u</a>][<a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">k</a> - 1] != -1) {</div>
|
||||
<div class="line"><span class="lineno"> 125</span> <a class="code hl_variable" href="#a350157a5fb79f76fceae33fc84171203">t_par</a>[<a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">u</a>][<a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">k</a>] = <a class="code hl_variable" href="#a350157a5fb79f76fceae33fc84171203">t_par</a>[<a class="code hl_variable" href="#a350157a5fb79f76fceae33fc84171203">t_par</a>[<a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">u</a>][<a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">k</a> - 1]][<a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">k</a> - 1];</div>
|
||||
<div class="line"><span class="lineno"> 126</span> }</div>
|
||||
<div class="line"><span class="lineno"> 127</span> }</div>
|
||||
<div class="line"><span class="lineno"> 128</span> </div>
|
||||
<div class="line"><span class="lineno"> 129</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keywordtype">int</span> &<a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">v</a> : <a class="code hl_variable" href="#ab1aeaefa1bd97b867c652ba916fbdb43">t_adj</a>[<a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">u</a>]) {</div>
|
||||
<div class="line"><span class="lineno"> 130</span> <span class="keywordflow">if</span> (<a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">v</a> ^ <a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">p</a>) {</div>
|
||||
<div class="line"><span class="lineno"> 131</span> <a class="code hl_function" href="#ae8de7aefcb6635d3dacdd174cd4890c4">dfs_lca</a>(<a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">v</a>, <a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">u</a>);</div>
|
||||
<div class="line"><span class="lineno"> 132</span> }</div>
|
||||
<div class="line"><span class="lineno"> 133</span> }</div>
|
||||
<div class="line"><span class="lineno"> 134</span> }</div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1heavy__light__decomposition_1_1_tree_html_ae8de7aefcb6635d3dacdd174cd4890c4"><div class="ttname"><a href="#ae8de7aefcb6635d3dacdd174cd4890c4">range_queries::heavy_light_decomposition::Tree::dfs_lca</a></div><div class="ttdeci">void dfs_lca(int u, int p=-1)</div><div class="ttdoc">Utility function to populate the t_par vector.</div><div class="ttdef"><b>Definition</b> <a href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00118">heavy_light_decomposition.cpp:118</a></div></div>
|
||||
</div><!-- fragment -->
|
||||
</div>
|
||||
</div>
|
||||
@@ -436,16 +436,16 @@ template<typename X> </div>
|
||||
</dl>
|
||||
<dl class="section return"><dt>Returns</dt><dd>void </dd></dl>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00101">101</a> of file <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html">heavy_light_decomposition.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 101</span> {</div>
|
||||
<div class="line"><span class="lineno"> 102</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keywordtype">int</span> &<a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">v</a> : <a class="code hl_variable" href="#ab1aeaefa1bd97b867c652ba916fbdb43">t_adj</a>[<a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">u</a>]) {</div>
|
||||
<div class="line"><span class="lineno"> 103</span> <span class="keywordflow">if</span> (<a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">v</a> ^ <a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">p</a>) {</div>
|
||||
<div class="line"><span class="lineno"> 104</span> <a class="code hl_function" href="#aa339c31ec74cd86a4842a8b09653d460">dfs_size</a>(<a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">v</a>, <a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">u</a>);</div>
|
||||
<div class="line"><span class="lineno"> 105</span> <a class="code hl_variable" href="#ada1494fccbc7f1f07b2f9be9f7e07ad5">t_size</a>[<a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">u</a>] += <a class="code hl_variable" href="#ada1494fccbc7f1f07b2f9be9f7e07ad5">t_size</a>[<a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">v</a>];</div>
|
||||
<div class="line"><span class="lineno"> 106</span> }</div>
|
||||
<div class="line"><span class="lineno"> 107</span> }</div>
|
||||
<div class="line"><span class="lineno"> 108</span> }</div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1heavy__light__decomposition_1_1_tree_html_aa339c31ec74cd86a4842a8b09653d460"><div class="ttname"><a href="#aa339c31ec74cd86a4842a8b09653d460">range_queries::heavy_light_decomposition::Tree::dfs_size</a></div><div class="ttdeci">void dfs_size(int u, int p=-1)</div><div class="ttdoc">Utility function to compute sub-tree sizes.</div><div class="ttdef"><b>Definition</b> <a href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00101">heavy_light_decomposition.cpp:101</a></div></div>
|
||||
<p class="definition">Definition at line <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00103">103</a> of file <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html">heavy_light_decomposition.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 103</span> {</div>
|
||||
<div class="line"><span class="lineno"> 104</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keywordtype">int</span> &<a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">v</a> : <a class="code hl_variable" href="#ab1aeaefa1bd97b867c652ba916fbdb43">t_adj</a>[<a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">u</a>]) {</div>
|
||||
<div class="line"><span class="lineno"> 105</span> <span class="keywordflow">if</span> (<a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">v</a> ^ <a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">p</a>) {</div>
|
||||
<div class="line"><span class="lineno"> 106</span> <a class="code hl_function" href="#aa339c31ec74cd86a4842a8b09653d460">dfs_size</a>(<a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">v</a>, <a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">u</a>);</div>
|
||||
<div class="line"><span class="lineno"> 107</span> <a class="code hl_variable" href="#ada1494fccbc7f1f07b2f9be9f7e07ad5">t_size</a>[<a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">u</a>] += <a class="code hl_variable" href="#ada1494fccbc7f1f07b2f9be9f7e07ad5">t_size</a>[<a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">v</a>];</div>
|
||||
<div class="line"><span class="lineno"> 108</span> }</div>
|
||||
<div class="line"><span class="lineno"> 109</span> }</div>
|
||||
<div class="line"><span class="lineno"> 110</span> }</div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1heavy__light__decomposition_1_1_tree_html_aa339c31ec74cd86a4842a8b09653d460"><div class="ttname"><a href="#aa339c31ec74cd86a4842a8b09653d460">range_queries::heavy_light_decomposition::Tree::dfs_size</a></div><div class="ttdeci">void dfs_size(int u, int p=-1)</div><div class="ttdoc">Utility function to compute sub-tree sizes.</div><div class="ttdef"><b>Definition</b> <a href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00103">heavy_light_decomposition.cpp:103</a></div></div>
|
||||
</div><!-- fragment -->
|
||||
</div>
|
||||
</div>
|
||||
@@ -477,12 +477,12 @@ template<typename X> </div>
|
||||
<p>This function must be called after the tree adjacency list and node values are populated The function initializes the required parameters, and populates the segment tree. </p>
|
||||
<dl class="section return"><dt>Returns</dt><dd>void </dd></dl>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00186">186</a> of file <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html">heavy_light_decomposition.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 186</span> {</div>
|
||||
<div class="line"><span class="lineno"> 187</span> <a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">assert</a>(<a class="code hl_variable" href="#ae4630fa70a80a1dc65a875488a67178a">t_nodes</a> > 0);</div>
|
||||
<div class="line"><span class="lineno"> 188</span> <a class="code hl_function" href="#aa339c31ec74cd86a4842a8b09653d460">dfs_size</a>(<a class="code hl_variable" href="#aa6c37e840355b9fb2105181c578694e8">t_root</a>);</div>
|
||||
<div class="line"><span class="lineno"> 189</span> <a class="code hl_function" href="#ae8de7aefcb6635d3dacdd174cd4890c4">dfs_lca</a>(<a class="code hl_variable" href="#aa6c37e840355b9fb2105181c578694e8">t_root</a>);</div>
|
||||
<div class="line"><span class="lineno"> 190</span> }</div>
|
||||
<p class="definition">Definition at line <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00188">188</a> of file <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html">heavy_light_decomposition.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 188</span> {</div>
|
||||
<div class="line"><span class="lineno"> 189</span> <a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">assert</a>(<a class="code hl_variable" href="#ae4630fa70a80a1dc65a875488a67178a">t_nodes</a> > 0);</div>
|
||||
<div class="line"><span class="lineno"> 190</span> <a class="code hl_function" href="#aa339c31ec74cd86a4842a8b09653d460">dfs_size</a>(<a class="code hl_variable" href="#aa6c37e840355b9fb2105181c578694e8">t_root</a>);</div>
|
||||
<div class="line"><span class="lineno"> 191</span> <a class="code hl_function" href="#ae8de7aefcb6635d3dacdd174cd4890c4">dfs_lca</a>(<a class="code hl_variable" href="#aa6c37e840355b9fb2105181c578694e8">t_root</a>);</div>
|
||||
<div class="line"><span class="lineno"> 192</span> }</div>
|
||||
</div><!-- fragment -->
|
||||
</div>
|
||||
</div>
|
||||
@@ -525,12 +525,12 @@ template<typename X> </div>
|
||||
</dl>
|
||||
<dl class="section return"><dt>Returns</dt><dd>the kth ancestor of node </dd></dl>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00218">218</a> of file <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html">heavy_light_decomposition.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 218</span> {</div>
|
||||
<div class="line"><span class="lineno"> 219</span> <a class="code hl_function" href="#ac7761255f2ba06b398b9aae5e4dce5f3">lift</a>(&<a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">p</a>, <a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">dist</a>);</div>
|
||||
<div class="line"><span class="lineno"> 220</span> <span class="keywordflow">return</span> <a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">p</a>;</div>
|
||||
<div class="line"><span class="lineno"> 221</span> }</div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1heavy__light__decomposition_1_1_tree_html_ac7761255f2ba06b398b9aae5e4dce5f3"><div class="ttname"><a href="#ac7761255f2ba06b398b9aae5e4dce5f3">range_queries::heavy_light_decomposition::Tree::lift</a></div><div class="ttdeci">void lift(int *const p, int dist)</div><div class="ttdoc">The function lifts a node, k units up the tree. The lifting is done in place, and the result is store...</div><div class="ttdef"><b>Definition</b> <a href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00200">heavy_light_decomposition.cpp:200</a></div></div>
|
||||
<p class="definition">Definition at line <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00220">220</a> of file <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html">heavy_light_decomposition.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 220</span> {</div>
|
||||
<div class="line"><span class="lineno"> 221</span> <a class="code hl_function" href="#ac7761255f2ba06b398b9aae5e4dce5f3">lift</a>(&<a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">p</a>, <a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">dist</a>);</div>
|
||||
<div class="line"><span class="lineno"> 222</span> <span class="keywordflow">return</span> <a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">p</a>;</div>
|
||||
<div class="line"><span class="lineno"> 223</span> }</div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1heavy__light__decomposition_1_1_tree_html_ac7761255f2ba06b398b9aae5e4dce5f3"><div class="ttname"><a href="#ac7761255f2ba06b398b9aae5e4dce5f3">range_queries::heavy_light_decomposition::Tree::lift</a></div><div class="ttdeci">void lift(int *const p, int dist)</div><div class="ttdoc">The function lifts a node, k units up the tree. The lifting is done in place, and the result is store...</div><div class="ttdef"><b>Definition</b> <a href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00202">heavy_light_decomposition.cpp:202</a></div></div>
|
||||
</div><!-- fragment -->
|
||||
</div>
|
||||
</div>
|
||||
@@ -573,26 +573,26 @@ template<typename X> </div>
|
||||
</dl>
|
||||
<dl class="section return"><dt>Returns</dt><dd>the least common ancestor of node a, and node b </dd></dl>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00229">229</a> of file <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html">heavy_light_decomposition.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 229</span> {</div>
|
||||
<div class="line"><span class="lineno"> 230</span> <a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">assert</a>(<a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">a</a> >= 0 <a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">and</a> <a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">b</a> >= 0 <a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">and</a> <a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">a</a> < <a class="code hl_variable" href="#ae4630fa70a80a1dc65a875488a67178a">t_nodes</a> <a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">and</a> <a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">b</a> < <a class="code hl_variable" href="#ae4630fa70a80a1dc65a875488a67178a">t_nodes</a>);</div>
|
||||
<div class="line"><span class="lineno"> 231</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="#a0efd0b9c564092f443ca97030d866ef1">t_depth</a>[<a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">a</a>] > <a class="code hl_variable" href="#a0efd0b9c564092f443ca97030d866ef1">t_depth</a>[<a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">b</a>]) {</div>
|
||||
<div class="line"><span class="lineno"> 232</span> <a class="code hl_function" href="#ac7761255f2ba06b398b9aae5e4dce5f3">lift</a>(&<a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">a</a>, <a class="code hl_variable" href="#a0efd0b9c564092f443ca97030d866ef1">t_depth</a>[<a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">a</a>] - <a class="code hl_variable" href="#a0efd0b9c564092f443ca97030d866ef1">t_depth</a>[<a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">b</a>]);</div>
|
||||
<div class="line"><span class="lineno"> 233</span> }</div>
|
||||
<div class="line"><span class="lineno"> 234</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="#a0efd0b9c564092f443ca97030d866ef1">t_depth</a>[<a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">b</a>] > <a class="code hl_variable" href="#a0efd0b9c564092f443ca97030d866ef1">t_depth</a>[<a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">a</a>]) {</div>
|
||||
<div class="line"><span class="lineno"> 235</span> <a class="code hl_function" href="#ac7761255f2ba06b398b9aae5e4dce5f3">lift</a>(&<a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">b</a>, <a class="code hl_variable" href="#a0efd0b9c564092f443ca97030d866ef1">t_depth</a>[<a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">b</a>] - <a class="code hl_variable" href="#a0efd0b9c564092f443ca97030d866ef1">t_depth</a>[<a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">a</a>]);</div>
|
||||
<div class="line"><span class="lineno"> 236</span> }</div>
|
||||
<div class="line"><span class="lineno"> 237</span> <span class="keywordflow">if</span> (<a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">a</a> == <a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">b</a>) {</div>
|
||||
<div class="line"><span class="lineno"> 238</span> <span class="keywordflow">return</span> <a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">a</a>;</div>
|
||||
<div class="line"><span class="lineno"> 239</span> }</div>
|
||||
<div class="line"><span class="lineno"> 240</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> <a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">k</a> = <a class="code hl_variable" href="#ab2ab020f798d00be2613ecf63074b7c1">t_maxlift</a> - 1; <a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">k</a> >= 0; <a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">k</a>--) {</div>
|
||||
<div class="line"><span class="lineno"> 241</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="#a350157a5fb79f76fceae33fc84171203">t_par</a>[<a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">a</a>][<a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">k</a>] != <a class="code hl_variable" href="#a350157a5fb79f76fceae33fc84171203">t_par</a>[<a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">b</a>][<a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">k</a>]) {</div>
|
||||
<div class="line"><span class="lineno"> 242</span> <a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">a</a> = <a class="code hl_variable" href="#a350157a5fb79f76fceae33fc84171203">t_par</a>[<a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">a</a>][<a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">k</a>];</div>
|
||||
<div class="line"><span class="lineno"> 243</span> <a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">b</a> = <a class="code hl_variable" href="#a350157a5fb79f76fceae33fc84171203">t_par</a>[<a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">b</a>][<a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">k</a>];</div>
|
||||
<div class="line"><span class="lineno"> 244</span> }</div>
|
||||
<div class="line"><span class="lineno"> 245</span> }</div>
|
||||
<div class="line"><span class="lineno"> 246</span> <span class="keywordflow">return</span> <a class="code hl_variable" href="#a350157a5fb79f76fceae33fc84171203">t_par</a>[<a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">a</a>][0];</div>
|
||||
<div class="line"><span class="lineno"> 247</span> }</div>
|
||||
<p class="definition">Definition at line <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00231">231</a> of file <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html">heavy_light_decomposition.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 231</span> {</div>
|
||||
<div class="line"><span class="lineno"> 232</span> <a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">assert</a>(<a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">a</a> >= 0 <a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">and</a> <a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">b</a> >= 0 <a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">and</a> <a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">a</a> < <a class="code hl_variable" href="#ae4630fa70a80a1dc65a875488a67178a">t_nodes</a> <a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">and</a> <a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">b</a> < <a class="code hl_variable" href="#ae4630fa70a80a1dc65a875488a67178a">t_nodes</a>);</div>
|
||||
<div class="line"><span class="lineno"> 233</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="#a0efd0b9c564092f443ca97030d866ef1">t_depth</a>[<a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">a</a>] > <a class="code hl_variable" href="#a0efd0b9c564092f443ca97030d866ef1">t_depth</a>[<a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">b</a>]) {</div>
|
||||
<div class="line"><span class="lineno"> 234</span> <a class="code hl_function" href="#ac7761255f2ba06b398b9aae5e4dce5f3">lift</a>(&<a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">a</a>, <a class="code hl_variable" href="#a0efd0b9c564092f443ca97030d866ef1">t_depth</a>[<a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">a</a>] - <a class="code hl_variable" href="#a0efd0b9c564092f443ca97030d866ef1">t_depth</a>[<a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">b</a>]);</div>
|
||||
<div class="line"><span class="lineno"> 235</span> }</div>
|
||||
<div class="line"><span class="lineno"> 236</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="#a0efd0b9c564092f443ca97030d866ef1">t_depth</a>[<a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">b</a>] > <a class="code hl_variable" href="#a0efd0b9c564092f443ca97030d866ef1">t_depth</a>[<a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">a</a>]) {</div>
|
||||
<div class="line"><span class="lineno"> 237</span> <a class="code hl_function" href="#ac7761255f2ba06b398b9aae5e4dce5f3">lift</a>(&<a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">b</a>, <a class="code hl_variable" href="#a0efd0b9c564092f443ca97030d866ef1">t_depth</a>[<a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">b</a>] - <a class="code hl_variable" href="#a0efd0b9c564092f443ca97030d866ef1">t_depth</a>[<a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">a</a>]);</div>
|
||||
<div class="line"><span class="lineno"> 238</span> }</div>
|
||||
<div class="line"><span class="lineno"> 239</span> <span class="keywordflow">if</span> (<a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">a</a> == <a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">b</a>) {</div>
|
||||
<div class="line"><span class="lineno"> 240</span> <span class="keywordflow">return</span> <a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">a</a>;</div>
|
||||
<div class="line"><span class="lineno"> 241</span> }</div>
|
||||
<div class="line"><span class="lineno"> 242</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> <a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">k</a> = <a class="code hl_variable" href="#ab2ab020f798d00be2613ecf63074b7c1">t_maxlift</a> - 1; <a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">k</a> >= 0; <a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">k</a>--) {</div>
|
||||
<div class="line"><span class="lineno"> 243</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="#a350157a5fb79f76fceae33fc84171203">t_par</a>[<a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">a</a>][<a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">k</a>] != <a class="code hl_variable" href="#a350157a5fb79f76fceae33fc84171203">t_par</a>[<a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">b</a>][<a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">k</a>]) {</div>
|
||||
<div class="line"><span class="lineno"> 244</span> <a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">a</a> = <a class="code hl_variable" href="#a350157a5fb79f76fceae33fc84171203">t_par</a>[<a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">a</a>][<a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">k</a>];</div>
|
||||
<div class="line"><span class="lineno"> 245</span> <a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">b</a> = <a class="code hl_variable" href="#a350157a5fb79f76fceae33fc84171203">t_par</a>[<a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">b</a>][<a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">k</a>];</div>
|
||||
<div class="line"><span class="lineno"> 246</span> }</div>
|
||||
<div class="line"><span class="lineno"> 247</span> }</div>
|
||||
<div class="line"><span class="lineno"> 248</span> <span class="keywordflow">return</span> <a class="code hl_variable" href="#a350157a5fb79f76fceae33fc84171203">t_par</a>[<a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">a</a>][0];</div>
|
||||
<div class="line"><span class="lineno"> 249</span> }</div>
|
||||
</div><!-- fragment -->
|
||||
</div>
|
||||
</div>
|
||||
@@ -635,18 +635,18 @@ template<typename X> </div>
|
||||
</dl>
|
||||
<dl class="section return"><dt>Returns</dt><dd>void </dd></dl>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00200">200</a> of file <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html">heavy_light_decomposition.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 200</span> {</div>
|
||||
<div class="line"><span class="lineno"> 201</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> <a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">k</a> = 0; <a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">k</a> < <a class="code hl_variable" href="#ab2ab020f798d00be2613ecf63074b7c1">t_maxlift</a>; <a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">k</a>++) {</div>
|
||||
<div class="line"><span class="lineno"> 202</span> <span class="keywordflow">if</span> (*<a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">p</a> == -1) {</div>
|
||||
<div class="line"><span class="lineno"> 203</span> <span class="keywordflow">return</span>;</div>
|
||||
<div class="line"><span class="lineno"> 204</span> }</div>
|
||||
<div class="line"><span class="lineno"> 205</span> <span class="keywordflow">if</span> (<a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">dist</a> & 1) {</div>
|
||||
<div class="line"><span class="lineno"> 206</span> *<a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">p</a> = <a class="code hl_variable" href="#a350157a5fb79f76fceae33fc84171203">t_par</a>[*<a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">p</a>][<a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">k</a>];</div>
|
||||
<div class="line"><span class="lineno"> 207</span> }</div>
|
||||
<div class="line"><span class="lineno"> 208</span> <a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">dist</a> >>= 1;</div>
|
||||
<div class="line"><span class="lineno"> 209</span> }</div>
|
||||
<div class="line"><span class="lineno"> 210</span> }</div>
|
||||
<p class="definition">Definition at line <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00202">202</a> of file <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html">heavy_light_decomposition.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 202</span> {</div>
|
||||
<div class="line"><span class="lineno"> 203</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> <a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">k</a> = 0; <a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">k</a> < <a class="code hl_variable" href="#ab2ab020f798d00be2613ecf63074b7c1">t_maxlift</a>; <a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">k</a>++) {</div>
|
||||
<div class="line"><span class="lineno"> 204</span> <span class="keywordflow">if</span> (*<a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">p</a> == -1) {</div>
|
||||
<div class="line"><span class="lineno"> 205</span> <span class="keywordflow">return</span>;</div>
|
||||
<div class="line"><span class="lineno"> 206</span> }</div>
|
||||
<div class="line"><span class="lineno"> 207</span> <span class="keywordflow">if</span> (<a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">dist</a> & 1) {</div>
|
||||
<div class="line"><span class="lineno"> 208</span> *<a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">p</a> = <a class="code hl_variable" href="#a350157a5fb79f76fceae33fc84171203">t_par</a>[*<a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">p</a>][<a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">k</a>];</div>
|
||||
<div class="line"><span class="lineno"> 209</span> }</div>
|
||||
<div class="line"><span class="lineno"> 210</span> <a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">dist</a> >>= 1;</div>
|
||||
<div class="line"><span class="lineno"> 211</span> }</div>
|
||||
<div class="line"><span class="lineno"> 212</span> }</div>
|
||||
</div><!-- fragment -->
|
||||
</div>
|
||||
</div>
|
||||
@@ -684,11 +684,11 @@ template<typename X> </div>
|
||||
</dl>
|
||||
<dl class="section return"><dt>Returns</dt><dd>void </dd></dl>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00175">175</a> of file <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html">heavy_light_decomposition.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 175</span> {</div>
|
||||
<div class="line"><span class="lineno"> 176</span> <a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">assert</a>(<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(<a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">node_val</a>.size()) == <a class="code hl_variable" href="#ae4630fa70a80a1dc65a875488a67178a">t_nodes</a>);</div>
|
||||
<div class="line"><span class="lineno"> 177</span> <a class="code hl_variable" href="#a135b7952593c9b1aae38fcaf1cc1abf7">t_val</a> = <a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">node_val</a>;</div>
|
||||
<div class="line"><span class="lineno"> 178</span> }</div>
|
||||
<p class="definition">Definition at line <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00177">177</a> of file <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html">heavy_light_decomposition.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 177</span> {</div>
|
||||
<div class="line"><span class="lineno"> 178</span> <a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">assert</a>(<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(<a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">node_val</a>.size()) == <a class="code hl_variable" href="#ae4630fa70a80a1dc65a875488a67178a">t_nodes</a>);</div>
|
||||
<div class="line"><span class="lineno"> 179</span> <a class="code hl_variable" href="#a135b7952593c9b1aae38fcaf1cc1abf7">t_val</a> = <a class="code hl_class" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">node_val</a>;</div>
|
||||
<div class="line"><span class="lineno"> 180</span> }</div>
|
||||
</div><!-- fragment -->
|
||||
</div>
|
||||
</div>
|
||||
@@ -717,7 +717,7 @@ template<typename T> </div>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00093">93</a> of file <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html">heavy_light_decomposition.cpp</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00095">95</a> of file <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html">heavy_light_decomposition.cpp</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@@ -746,7 +746,7 @@ template<typename X> </div>
|
||||
|
||||
<p>an adjacency list to stores the tree edges </p>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00083">83</a> of file <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html">heavy_light_decomposition.cpp</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00084">84</a> of file <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html">heavy_light_decomposition.cpp</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@@ -774,7 +774,7 @@ template<typename X> </div>
|
||||
|
||||
<p>a vector to store the depth of a node, </p>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00088">88</a> of file <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html">heavy_light_decomposition.cpp</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00089">89</a> of file <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html">heavy_light_decomposition.cpp</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@@ -802,7 +802,7 @@ template<typename X> </div>
|
||||
|
||||
<p>maximum possible height of the tree </p>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00085">85</a> of file <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html">heavy_light_decomposition.cpp</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00086">86</a> of file <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html">heavy_light_decomposition.cpp</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@@ -830,7 +830,7 @@ template<typename X> </div>
|
||||
|
||||
<p>number of nodes </p>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00084">84</a> of file <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html">heavy_light_decomposition.cpp</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00085">85</a> of file <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html">heavy_light_decomposition.cpp</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@@ -858,7 +858,7 @@ template<typename X> </div>
|
||||
|
||||
<p>a matrix to store every node's 2^kth parent </p>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00087">87</a> of file <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html">heavy_light_decomposition.cpp</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00088">88</a> of file <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html">heavy_light_decomposition.cpp</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@@ -886,7 +886,7 @@ template<typename X> </div>
|
||||
|
||||
<p>the root of the tree </p>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00091">91</a> of file <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html">heavy_light_decomposition.cpp</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00092">92</a> of file <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html">heavy_light_decomposition.cpp</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@@ -914,7 +914,7 @@ template<typename X> </div>
|
||||
|
||||
<p>a vector to store the subtree size rooted at node </p>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00089">89</a> of file <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html">heavy_light_decomposition.cpp</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00090">90</a> of file <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html">heavy_light_decomposition.cpp</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@@ -942,7 +942,7 @@ template<typename X> </div>
|
||||
|
||||
<p>values of nodes </p>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00092">92</a> of file <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html">heavy_light_decomposition.cpp</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00093">93</a> of file <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html">heavy_light_decomposition.cpp</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -259,9 +259,9 @@ Functions</h2></td></tr>
|
||||
<div class="line"><span class="lineno"> 125</span> <a class="code hl_function" href="../../dd/d47/namespacemath.html#a50936ee98f4d40f17823befc65a32aec">math::test_eval</a>(test_5, 0.1781477117815607, .001);</div>
|
||||
<div class="line"><span class="lineno"> 126</span> std::cout << <span class="stringliteral">"Test 5 Passed!"</span> << std::endl;</div>
|
||||
<div class="line"><span class="lineno"> 127</span>}</div>
|
||||
<div class="ttc" id="aheavy__light__decomposition_8cpp_html_a34b8683a2b429de5cce57e6d733ec817"><div class="ttname"><a href="../../d2/de9/heavy__light__decomposition_8cpp.html#a34b8683a2b429de5cce57e6d733ec817">test_1</a></div><div class="ttdeci">static void test_1()</div><div class="ttdef"><b>Definition</b> <a href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00505">heavy_light_decomposition.cpp:505</a></div></div>
|
||||
<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="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00549">heavy_light_decomposition.cpp:549</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="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00592">heavy_light_decomposition.cpp:592</a></div></div>
|
||||
<div class="ttc" id="aheavy__light__decomposition_8cpp_html_a34b8683a2b429de5cce57e6d733ec817"><div class="ttname"><a href="../../d2/de9/heavy__light__decomposition_8cpp.html#a34b8683a2b429de5cce57e6d733ec817">test_1</a></div><div class="ttdeci">static void test_1()</div><div class="ttdef"><b>Definition</b> <a href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00511">heavy_light_decomposition.cpp:511</a></div></div>
|
||||
<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="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00555">heavy_light_decomposition.cpp:555</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="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00599">heavy_light_decomposition.cpp:599</a></div></div>
|
||||
<div class="ttc" id="alru__cache_8cpp_html_a24d21a345ed06f7fba6919718cf3e058"><div class="ttname"><a href="../../d3/db3/lru__cache_8cpp.html#a24d21a345ed06f7fba6919718cf3e058">lru_tests::log</a></div><div class="ttdeci">void log(T msg)</div><div class="ttdoc">A function to print given message on console.</div><div class="ttdef"><b>Definition</b> <a href="../../d3/db3/lru__cache_8cpp_source.html#l00149">lru_cache.cpp:149</a></div></div>
|
||||
<div class="ttc" id="anamespaceciphers_1_1elliptic__curve__key__exchange_html_ac00616a4e40d3cd5cfb4da87d9ff9af0"><div class="ttname"><a href="../../df/d6b/namespaceciphers_1_1elliptic__curve__key__exchange.html#ac00616a4e40d3cd5cfb4da87d9ff9af0">ciphers::elliptic_curve_key_exchange::exp</a></div><div class="ttdeci">uint256_t exp(uint256_t number, uint256_t power, const uint256_t &mod)</div><div class="ttdoc">This function calculates number raised to exponent power under modulo mod using Modular Exponentiatio...</div><div class="ttdef"><b>Definition</b> <a href="../../df/d2c/elliptic__curve__key__exchange_8cpp_source.html#l00078">elliptic_curve_key_exchange.cpp:78</a></div></div>
|
||||
<div class="ttc" id="anamespacemath_html_a50936ee98f4d40f17823befc65a32aec"><div class="ttname"><a href="../../dd/d47/namespacemath.html#a50936ee98f4d40f17823befc65a32aec">math::test_eval</a></div><div class="ttdeci">void test_eval(double approx, double expected, double threshold)</div><div class="ttdoc">Wrapper to evaluate if the approximated value is within .XX% threshold of the exact value.</div><div class="ttdef"><b>Definition</b> <a href="../../d1/de9/integral__approximation_8cpp_source.html#l00062">integral_approximation.cpp:62</a></div></div>
|
||||
|
||||
@@ -209,9 +209,9 @@ $(function(){initNavTree('d1/de9/integral__approximation_8cpp_source.html','../.
|
||||
<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span>}</div>
|
||||
</div>
|
||||
<div class="ttc" id="agenerate__parentheses_8cpp_html_aa8dca7b867074164d5f45b0f3851269d"><div class="ttname"><a href="../../dd/d1e/generate__parentheses_8cpp.html#aa8dca7b867074164d5f45b0f3851269d">test</a></div><div class="ttdeci">static void test()</div><div class="ttdoc">Self-test implementations.</div><div class="ttdef"><b>Definition</b> <a href="../../dd/d1e/generate__parentheses_8cpp_source.html#l00082">generate_parentheses.cpp:82</a></div></div>
|
||||
<div class="ttc" id="aheavy__light__decomposition_8cpp_html_a34b8683a2b429de5cce57e6d733ec817"><div class="ttname"><a href="../../d2/de9/heavy__light__decomposition_8cpp.html#a34b8683a2b429de5cce57e6d733ec817">test_1</a></div><div class="ttdeci">static void test_1()</div><div class="ttdef"><b>Definition</b> <a href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00505">heavy_light_decomposition.cpp:505</a></div></div>
|
||||
<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="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00549">heavy_light_decomposition.cpp:549</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="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00592">heavy_light_decomposition.cpp:592</a></div></div>
|
||||
<div class="ttc" id="aheavy__light__decomposition_8cpp_html_a34b8683a2b429de5cce57e6d733ec817"><div class="ttname"><a href="../../d2/de9/heavy__light__decomposition_8cpp.html#a34b8683a2b429de5cce57e6d733ec817">test_1</a></div><div class="ttdeci">static void test_1()</div><div class="ttdef"><b>Definition</b> <a href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00511">heavy_light_decomposition.cpp:511</a></div></div>
|
||||
<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="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00555">heavy_light_decomposition.cpp:555</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="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00599">heavy_light_decomposition.cpp:599</a></div></div>
|
||||
<div class="ttc" id="aintegral__approximation_8cpp_html_ae66f6b31b5ad750f1fe042a706a4e3d4"><div class="ttname"><a href="../../d1/de9/integral__approximation_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4">main</a></div><div class="ttdeci">int main()</div><div class="ttdoc">Main function.</div><div class="ttdef"><b>Definition</b> <a href="#l00133">integral_approximation.cpp:133</a></div></div>
|
||||
<div class="ttc" id="alru__cache_8cpp_html_a24d21a345ed06f7fba6919718cf3e058"><div class="ttname"><a href="../../d3/db3/lru__cache_8cpp.html#a24d21a345ed06f7fba6919718cf3e058">lru_tests::log</a></div><div class="ttdeci">void log(T msg)</div><div class="ttdoc">A function to print given message on console.</div><div class="ttdef"><b>Definition</b> <a href="../../d3/db3/lru__cache_8cpp_source.html#l00149">lru_cache.cpp:149</a></div></div>
|
||||
<div class="ttc" id="anamespaceciphers_1_1elliptic__curve__key__exchange_html_ac00616a4e40d3cd5cfb4da87d9ff9af0"><div class="ttname"><a href="../../df/d6b/namespaceciphers_1_1elliptic__curve__key__exchange.html#ac00616a4e40d3cd5cfb4da87d9ff9af0">ciphers::elliptic_curve_key_exchange::exp</a></div><div class="ttdeci">uint256_t exp(uint256_t number, uint256_t power, const uint256_t &mod)</div><div class="ttdoc">This function calculates number raised to exponent power under modulo mod using Modular Exponentiatio...</div><div class="ttdef"><b>Definition</b> <a href="../../df/d2c/elliptic__curve__key__exchange_8cpp_source.html#l00078">elliptic_curve_key_exchange.cpp:78</a></div></div>
|
||||
|
||||
@@ -1,9 +1,11 @@
|
||||
<map id="range_queries/persistent_seg_tree_lazy_prop.cpp" name="range_queries/persistent_seg_tree_lazy_prop.cpp">
|
||||
<area shape="rect" id="Node000001" title="Persistent segment tree with range updates (lazy propagation)" alt="" coords="51,5,218,46"/>
|
||||
<area shape="rect" id="Node000002" title=" " alt="" coords="5,94,77,120"/>
|
||||
<area shape="poly" id="edge1_Node000001_Node000002" title=" " alt="" coords="113,48,69,86,65,82,110,44"/>
|
||||
<area shape="rect" id="Node000003" title=" " alt="" coords="100,94,168,120"/>
|
||||
<area shape="poly" id="edge2_Node000001_Node000003" title=" " alt="" coords="137,46,137,78,132,78,132,46"/>
|
||||
<area shape="rect" id="Node000004" title=" " alt="" coords="192,94,250,120"/>
|
||||
<area shape="poly" id="edge3_Node000001_Node000004" title=" " alt="" coords="158,44,198,81,195,85,154,48"/>
|
||||
<area shape="rect" id="Node000001" title="Persistent segment tree with range updates (lazy propagation)" alt="" coords="88,5,255,46"/>
|
||||
<area shape="rect" id="Node000002" title=" " alt="" coords="5,94,66,120"/>
|
||||
<area shape="poly" id="edge1_Node000001_Node000002" title=" " alt="" coords="139,49,70,88,68,84,136,44"/>
|
||||
<area shape="rect" id="Node000003" title=" " alt="" coords="89,94,160,120"/>
|
||||
<area shape="poly" id="edge2_Node000001_Node000003" title=" " alt="" coords="162,48,142,82,138,79,158,45"/>
|
||||
<area shape="rect" id="Node000004" title=" " alt="" coords="184,94,252,120"/>
|
||||
<area shape="poly" id="edge3_Node000001_Node000004" title=" " alt="" coords="185,45,205,79,201,82,181,48"/>
|
||||
<area shape="rect" id="Node000005" title=" " alt="" coords="276,94,334,120"/>
|
||||
<area shape="poly" id="edge4_Node000001_Node000005" title=" " alt="" coords="206,44,273,83,270,88,203,49"/>
|
||||
</map>
|
||||
|
||||
@@ -1 +1 @@
|
||||
10475f54a4456f16d8246f63621d065f
|
||||
8d9398fac901fe42ddd8eea6074882d8
|
||||
@@ -4,8 +4,8 @@
|
||||
<!-- Generated by graphviz version 13.1.2 (20250808.2320)
|
||||
-->
|
||||
<!-- Title: range_queries/persistent_seg_tree_lazy_prop.cpp Pages: 1 -->
|
||||
<svg width="191pt" height="94pt"
|
||||
viewBox="0.00 0.00 191.00 94.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<svg width="254pt" height="94pt"
|
||||
viewBox="0.00 0.00 254.00 94.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
|
||||
<svg id="main" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve">
|
||||
|
||||
@@ -23,9 +23,9 @@
|
||||
<g id="Node000001" class="node">
|
||||
<title>Node1</title>
|
||||
<g id="a_Node000001"><a xlink:title="Persistent segment tree with range updates (lazy propagation)">
|
||||
<polygon fill="#999999" stroke="#666666" points="159.12,-85.75 34.38,-85.75 34.38,-55.25 159.12,-55.25 159.12,-85.75"/>
|
||||
<text xml:space="preserve" text-anchor="start" x="42.38" y="-72.25" font-family="Helvetica,sans-Serif" font-size="10.00">range_queries/persistent</text>
|
||||
<text xml:space="preserve" text-anchor="middle" x="96.75" y="-61" font-family="Helvetica,sans-Serif" font-size="10.00">_seg_tree_lazy_prop.cpp</text>
|
||||
<polygon fill="#999999" stroke="#666666" points="187,-85.75 62.25,-85.75 62.25,-55.25 187,-55.25 187,-85.75"/>
|
||||
<text xml:space="preserve" text-anchor="start" x="70.25" y="-72.25" font-family="Helvetica,sans-Serif" font-size="10.00">range_queries/persistent</text>
|
||||
<text xml:space="preserve" text-anchor="middle" x="124.62" y="-61" font-family="Helvetica,sans-Serif" font-size="10.00">_seg_tree_lazy_prop.cpp</text>
|
||||
</a>
|
||||
</g>
|
||||
</g>
|
||||
@@ -33,8 +33,8 @@
|
||||
<g id="Node000002" class="node">
|
||||
<title>Node2</title>
|
||||
<g id="a_Node000002"><a xlink:title=" ">
|
||||
<polygon fill="#e0e0e0" stroke="#999999" points="53.5,-19.25 0,-19.25 0,0 53.5,0 53.5,-19.25"/>
|
||||
<text xml:space="preserve" text-anchor="middle" x="26.75" y="-5.75" font-family="Helvetica,sans-Serif" font-size="10.00">iostream</text>
|
||||
<polygon fill="#e0e0e0" stroke="#999999" points="45.25,-19.25 0,-19.25 0,0 45.25,0 45.25,-19.25"/>
|
||||
<text xml:space="preserve" text-anchor="middle" x="22.62" y="-5.75" font-family="Helvetica,sans-Serif" font-size="10.00">cstdint</text>
|
||||
</a>
|
||||
</g>
|
||||
</g>
|
||||
@@ -42,8 +42,8 @@
|
||||
<g id="edge1_Node000001_Node000002" class="edge">
|
||||
<title>Node1->Node2</title>
|
||||
<g id="a_edge1_Node000001_Node000002"><a xlink:title=" ">
|
||||
<path fill="none" stroke="#63b8ff" d="M79.45,-54.95C69.4,-46.5 56.72,-35.83 46.32,-27.08"/>
|
||||
<polygon fill="#63b8ff" stroke="#63b8ff" points="48.61,-24.43 38.7,-20.68 44.1,-29.79 48.61,-24.43"/>
|
||||
<path fill="none" stroke="#63b8ff" d="M99.15,-54.8C83.47,-45.74 63.44,-34.19 47.81,-25.16"/>
|
||||
<polygon fill="#63b8ff" stroke="#63b8ff" points="49.99,-22.38 39.58,-20.41 46.49,-28.44 49.99,-22.38"/>
|
||||
</a>
|
||||
</g>
|
||||
</g>
|
||||
@@ -51,8 +51,8 @@
|
||||
<g id="Node000003" class="node">
|
||||
<title>Node3</title>
|
||||
<g id="a_Node000003"><a xlink:title=" ">
|
||||
<polygon fill="#e0e0e0" stroke="#999999" points="122.38,-19.25 71.12,-19.25 71.12,0 122.38,0 122.38,-19.25"/>
|
||||
<text xml:space="preserve" text-anchor="middle" x="96.75" y="-5.75" font-family="Helvetica,sans-Serif" font-size="10.00">memory</text>
|
||||
<polygon fill="#e0e0e0" stroke="#999999" points="116.38,-19.25 62.88,-19.25 62.88,0 116.38,0 116.38,-19.25"/>
|
||||
<text xml:space="preserve" text-anchor="middle" x="89.62" y="-5.75" font-family="Helvetica,sans-Serif" font-size="10.00">iostream</text>
|
||||
</a>
|
||||
</g>
|
||||
</g>
|
||||
@@ -60,8 +60,8 @@
|
||||
<g id="edge2_Node000001_Node000003" class="edge">
|
||||
<title>Node1->Node3</title>
|
||||
<g id="a_edge2_Node000001_Node000003"><a xlink:title=" ">
|
||||
<path fill="none" stroke="#63b8ff" d="M96.75,-54.95C96.75,-47.71 96.75,-38.84 96.75,-30.94"/>
|
||||
<polygon fill="#63b8ff" stroke="#63b8ff" points="100.25,-31.21 96.75,-21.21 93.25,-31.21 100.25,-31.21"/>
|
||||
<path fill="none" stroke="#63b8ff" d="M115.97,-54.95C111.41,-47.28 105.76,-37.77 100.87,-29.54"/>
|
||||
<polygon fill="#63b8ff" stroke="#63b8ff" points="103.91,-27.81 95.79,-21 97.9,-31.39 103.91,-27.81"/>
|
||||
</a>
|
||||
</g>
|
||||
</g>
|
||||
@@ -69,8 +69,8 @@
|
||||
<g id="Node000004" class="node">
|
||||
<title>Node4</title>
|
||||
<g id="a_Node000004"><a xlink:title=" ">
|
||||
<polygon fill="#e0e0e0" stroke="#999999" points="183.25,-19.25 140.25,-19.25 140.25,0 183.25,0 183.25,-19.25"/>
|
||||
<text xml:space="preserve" text-anchor="middle" x="161.75" y="-5.75" font-family="Helvetica,sans-Serif" font-size="10.00">vector</text>
|
||||
<polygon fill="#e0e0e0" stroke="#999999" points="185.25,-19.25 134,-19.25 134,0 185.25,0 185.25,-19.25"/>
|
||||
<text xml:space="preserve" text-anchor="middle" x="159.62" y="-5.75" font-family="Helvetica,sans-Serif" font-size="10.00">memory</text>
|
||||
</a>
|
||||
</g>
|
||||
</g>
|
||||
@@ -78,8 +78,26 @@
|
||||
<g id="edge3_Node000001_Node000004" class="edge">
|
||||
<title>Node1->Node4</title>
|
||||
<g id="a_edge3_Node000001_Node000004"><a xlink:title=" ">
|
||||
<path fill="none" stroke="#63b8ff" d="M112.82,-54.95C122.05,-46.59 133.68,-36.05 143.28,-27.35"/>
|
||||
<polygon fill="#63b8ff" stroke="#63b8ff" points="145.55,-30.02 150.61,-20.72 140.85,-24.84 145.55,-30.02"/>
|
||||
<path fill="none" stroke="#63b8ff" d="M133.28,-54.95C137.84,-47.28 143.49,-37.77 148.38,-29.54"/>
|
||||
<polygon fill="#63b8ff" stroke="#63b8ff" points="151.35,-31.39 153.46,-21 145.34,-27.81 151.35,-31.39"/>
|
||||
</a>
|
||||
</g>
|
||||
</g>
|
||||
<!-- Node5 -->
|
||||
<g id="Node000005" class="node">
|
||||
<title>Node5</title>
|
||||
<g id="a_Node000005"><a xlink:title=" ">
|
||||
<polygon fill="#e0e0e0" stroke="#999999" points="246.12,-19.25 203.12,-19.25 203.12,0 246.12,0 246.12,-19.25"/>
|
||||
<text xml:space="preserve" text-anchor="middle" x="224.62" y="-5.75" font-family="Helvetica,sans-Serif" font-size="10.00">vector</text>
|
||||
</a>
|
||||
</g>
|
||||
</g>
|
||||
<!-- Node1->Node5 -->
|
||||
<g id="edge4_Node000001_Node000005" class="edge">
|
||||
<title>Node1->Node5</title>
|
||||
<g id="a_edge4_Node000001_Node000005"><a xlink:title=" ">
|
||||
<path fill="none" stroke="#63b8ff" d="M149.6,-54.8C164.83,-45.83 184.23,-34.41 199.49,-25.42"/>
|
||||
<polygon fill="#63b8ff" stroke="#63b8ff" points="201.14,-28.51 207.98,-20.42 197.59,-22.48 201.14,-28.51"/>
|
||||
</a>
|
||||
</g>
|
||||
</g>
|
||||
|
||||
|
Before Width: | Height: | Size: 4.1 KiB After Width: | Height: | Size: 4.9 KiB |
@@ -4,17 +4,17 @@
|
||||
<!-- Generated by graphviz version 13.1.2 (20250808.2320)
|
||||
-->
|
||||
<!-- Title: range_queries/persistent_seg_tree_lazy_prop.cpp Pages: 1 -->
|
||||
<svg width="191pt" height="94pt"
|
||||
viewBox="0.00 0.00 191.00 94.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<svg width="254pt" height="94pt"
|
||||
viewBox="0.00 0.00 254.00 94.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 89.75)">
|
||||
<title>range_queries/persistent_seg_tree_lazy_prop.cpp</title>
|
||||
<!-- Node1 -->
|
||||
<g id="Node000001" class="node">
|
||||
<title>Node1</title>
|
||||
<g id="a_Node000001"><a xlink:title="Persistent segment tree with range updates (lazy propagation)">
|
||||
<polygon fill="#999999" stroke="#666666" points="159.12,-85.75 34.38,-85.75 34.38,-55.25 159.12,-55.25 159.12,-85.75"/>
|
||||
<text xml:space="preserve" text-anchor="start" x="42.38" y="-72.25" font-family="Helvetica,sans-Serif" font-size="10.00">range_queries/persistent</text>
|
||||
<text xml:space="preserve" text-anchor="middle" x="96.75" y="-61" font-family="Helvetica,sans-Serif" font-size="10.00">_seg_tree_lazy_prop.cpp</text>
|
||||
<polygon fill="#999999" stroke="#666666" points="187,-85.75 62.25,-85.75 62.25,-55.25 187,-55.25 187,-85.75"/>
|
||||
<text xml:space="preserve" text-anchor="start" x="70.25" y="-72.25" font-family="Helvetica,sans-Serif" font-size="10.00">range_queries/persistent</text>
|
||||
<text xml:space="preserve" text-anchor="middle" x="124.62" y="-61" font-family="Helvetica,sans-Serif" font-size="10.00">_seg_tree_lazy_prop.cpp</text>
|
||||
</a>
|
||||
</g>
|
||||
</g>
|
||||
@@ -22,8 +22,8 @@
|
||||
<g id="Node000002" class="node">
|
||||
<title>Node2</title>
|
||||
<g id="a_Node000002"><a xlink:title=" ">
|
||||
<polygon fill="#e0e0e0" stroke="#999999" points="53.5,-19.25 0,-19.25 0,0 53.5,0 53.5,-19.25"/>
|
||||
<text xml:space="preserve" text-anchor="middle" x="26.75" y="-5.75" font-family="Helvetica,sans-Serif" font-size="10.00">iostream</text>
|
||||
<polygon fill="#e0e0e0" stroke="#999999" points="45.25,-19.25 0,-19.25 0,0 45.25,0 45.25,-19.25"/>
|
||||
<text xml:space="preserve" text-anchor="middle" x="22.62" y="-5.75" font-family="Helvetica,sans-Serif" font-size="10.00">cstdint</text>
|
||||
</a>
|
||||
</g>
|
||||
</g>
|
||||
@@ -31,8 +31,8 @@
|
||||
<g id="edge1_Node000001_Node000002" class="edge">
|
||||
<title>Node1->Node2</title>
|
||||
<g id="a_edge1_Node000001_Node000002"><a xlink:title=" ">
|
||||
<path fill="none" stroke="#63b8ff" d="M79.45,-54.95C69.4,-46.5 56.72,-35.83 46.32,-27.08"/>
|
||||
<polygon fill="#63b8ff" stroke="#63b8ff" points="48.61,-24.43 38.7,-20.68 44.1,-29.79 48.61,-24.43"/>
|
||||
<path fill="none" stroke="#63b8ff" d="M99.15,-54.8C83.47,-45.74 63.44,-34.19 47.81,-25.16"/>
|
||||
<polygon fill="#63b8ff" stroke="#63b8ff" points="49.99,-22.38 39.58,-20.41 46.49,-28.44 49.99,-22.38"/>
|
||||
</a>
|
||||
</g>
|
||||
</g>
|
||||
@@ -40,8 +40,8 @@
|
||||
<g id="Node000003" class="node">
|
||||
<title>Node3</title>
|
||||
<g id="a_Node000003"><a xlink:title=" ">
|
||||
<polygon fill="#e0e0e0" stroke="#999999" points="122.38,-19.25 71.12,-19.25 71.12,0 122.38,0 122.38,-19.25"/>
|
||||
<text xml:space="preserve" text-anchor="middle" x="96.75" y="-5.75" font-family="Helvetica,sans-Serif" font-size="10.00">memory</text>
|
||||
<polygon fill="#e0e0e0" stroke="#999999" points="116.38,-19.25 62.88,-19.25 62.88,0 116.38,0 116.38,-19.25"/>
|
||||
<text xml:space="preserve" text-anchor="middle" x="89.62" y="-5.75" font-family="Helvetica,sans-Serif" font-size="10.00">iostream</text>
|
||||
</a>
|
||||
</g>
|
||||
</g>
|
||||
@@ -49,8 +49,8 @@
|
||||
<g id="edge2_Node000001_Node000003" class="edge">
|
||||
<title>Node1->Node3</title>
|
||||
<g id="a_edge2_Node000001_Node000003"><a xlink:title=" ">
|
||||
<path fill="none" stroke="#63b8ff" d="M96.75,-54.95C96.75,-47.71 96.75,-38.84 96.75,-30.94"/>
|
||||
<polygon fill="#63b8ff" stroke="#63b8ff" points="100.25,-31.21 96.75,-21.21 93.25,-31.21 100.25,-31.21"/>
|
||||
<path fill="none" stroke="#63b8ff" d="M115.97,-54.95C111.41,-47.28 105.76,-37.77 100.87,-29.54"/>
|
||||
<polygon fill="#63b8ff" stroke="#63b8ff" points="103.91,-27.81 95.79,-21 97.9,-31.39 103.91,-27.81"/>
|
||||
</a>
|
||||
</g>
|
||||
</g>
|
||||
@@ -58,8 +58,8 @@
|
||||
<g id="Node000004" class="node">
|
||||
<title>Node4</title>
|
||||
<g id="a_Node000004"><a xlink:title=" ">
|
||||
<polygon fill="#e0e0e0" stroke="#999999" points="183.25,-19.25 140.25,-19.25 140.25,0 183.25,0 183.25,-19.25"/>
|
||||
<text xml:space="preserve" text-anchor="middle" x="161.75" y="-5.75" font-family="Helvetica,sans-Serif" font-size="10.00">vector</text>
|
||||
<polygon fill="#e0e0e0" stroke="#999999" points="185.25,-19.25 134,-19.25 134,0 185.25,0 185.25,-19.25"/>
|
||||
<text xml:space="preserve" text-anchor="middle" x="159.62" y="-5.75" font-family="Helvetica,sans-Serif" font-size="10.00">memory</text>
|
||||
</a>
|
||||
</g>
|
||||
</g>
|
||||
@@ -67,8 +67,26 @@
|
||||
<g id="edge3_Node000001_Node000004" class="edge">
|
||||
<title>Node1->Node4</title>
|
||||
<g id="a_edge3_Node000001_Node000004"><a xlink:title=" ">
|
||||
<path fill="none" stroke="#63b8ff" d="M112.82,-54.95C122.05,-46.59 133.68,-36.05 143.28,-27.35"/>
|
||||
<polygon fill="#63b8ff" stroke="#63b8ff" points="145.55,-30.02 150.61,-20.72 140.85,-24.84 145.55,-30.02"/>
|
||||
<path fill="none" stroke="#63b8ff" d="M133.28,-54.95C137.84,-47.28 143.49,-37.77 148.38,-29.54"/>
|
||||
<polygon fill="#63b8ff" stroke="#63b8ff" points="151.35,-31.39 153.46,-21 145.34,-27.81 151.35,-31.39"/>
|
||||
</a>
|
||||
</g>
|
||||
</g>
|
||||
<!-- Node5 -->
|
||||
<g id="Node000005" class="node">
|
||||
<title>Node5</title>
|
||||
<g id="a_Node000005"><a xlink:title=" ">
|
||||
<polygon fill="#e0e0e0" stroke="#999999" points="246.12,-19.25 203.12,-19.25 203.12,0 246.12,0 246.12,-19.25"/>
|
||||
<text xml:space="preserve" text-anchor="middle" x="224.62" y="-5.75" font-family="Helvetica,sans-Serif" font-size="10.00">vector</text>
|
||||
</a>
|
||||
</g>
|
||||
</g>
|
||||
<!-- Node1->Node5 -->
|
||||
<g id="edge4_Node000001_Node000005" class="edge">
|
||||
<title>Node1->Node5</title>
|
||||
<g id="a_edge4_Node000001_Node000005"><a xlink:title=" ">
|
||||
<path fill="none" stroke="#63b8ff" d="M149.6,-54.8C164.83,-45.83 184.23,-34.41 199.49,-25.42"/>
|
||||
<polygon fill="#63b8ff" stroke="#63b8ff" points="201.14,-28.51 207.98,-20.42 197.59,-22.48 201.14,-28.51"/>
|
||||
</a>
|
||||
</g>
|
||||
</g>
|
||||
|
||||
|
Before Width: | Height: | Size: 3.4 KiB After Width: | Height: | Size: 4.1 KiB |
@@ -190,7 +190,7 @@ class range_queries::heavy_light_decomposition::HLD< X ></div><p>The Heavy
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00336">336</a> of file <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html">heavy_light_decomposition.cpp</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00342">342</a> of file <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html">heavy_light_decomposition.cpp</a>.</p>
|
||||
</div><a name="doc-constructors" id="doc-constructors"></a><h2 id="header-doc-constructors" class="groupheader">Constructor & Destructor Documentation</h2>
|
||||
<a id="a6e486767434e44076c1ac374a22da726" name="a6e486767434e44076c1ac374a22da726"></a>
|
||||
<h2 class="memtitle"><span class="permalink"><a href="#a6e486767434e44076c1ac374a22da726">◆ </a></span>HLD()</h2>
|
||||
@@ -225,22 +225,22 @@ template<typename X> </div>
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00409">409</a> of file <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html">heavy_light_decomposition.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 435</span> : <a class="code hl_function" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#a835fb2bbb27307b8cacad9b287968bc1">Tree<X></a>(<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">nodes</a>), <a class="code hl_function" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html#afba5c1225ba04c0025c7786c09ff28f1">SG<X></a>(<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">nodes</a>) {</div>
|
||||
<div class="line"><span class="lineno"> 436</span> <span class="comment">/* Initialization and resize vectors */</span></div>
|
||||
<div class="line"><span class="lineno"> 437</span> <a class="code hl_variable" href="#a722cc7cf2c3e4d15583601a48b09776f">label</a> = 0;</div>
|
||||
<div class="line"><span class="lineno"> 438</span> <a class="code hl_variable" href="#aa86a91ae0cd7898990a8170a2f2c9cda">h_label</a>.assign(<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">Tree<X>::t_nodes</a>, -1);</div>
|
||||
<div class="line"><span class="lineno"> 439</span> <a class="code hl_variable" href="#a84424f180f12b514eaab57a6aa20b104">h_heavychlid</a>.assign(<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">Tree<X>::t_nodes</a>, -1);</div>
|
||||
<div class="line"><span class="lineno"> 440</span> <a class="code hl_variable" href="#a1b336474d17eff1aa4be73d4068dc725">h_parent</a>.resize(<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">Tree<X>::t_nodes</a>);</div>
|
||||
<div class="line"><span class="lineno"> 441</span> <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">iota</a>(<a class="code hl_variable" href="#a1b336474d17eff1aa4be73d4068dc725">h_parent</a>.begin(), <a class="code hl_variable" href="#a1b336474d17eff1aa4be73d4068dc725">h_parent</a>.end(), 0);</div>
|
||||
<div class="line"><span class="lineno"> 442</span> }</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="../../d2/de9/heavy__light__decomposition_8cpp_source.html#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_a1b336474d17eff1aa4be73d4068dc725"><div class="ttname"><a href="#a1b336474d17eff1aa4be73d4068dc725">range_queries::heavy_light_decomposition::HLD::h_parent</a></div><div class="ttdeci">std::vector< int > 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="../../d2/de9/heavy__light__decomposition_8cpp_source.html#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_a722cc7cf2c3e4d15583601a48b09776f"><div class="ttname"><a href="#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="../../d2/de9/heavy__light__decomposition_8cpp_source.html#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_a84424f180f12b514eaab57a6aa20b104"><div class="ttname"><a href="#a84424f180f12b514eaab57a6aa20b104">range_queries::heavy_light_decomposition::HLD::h_heavychlid</a></div><div class="ttdeci">std::vector< int > h_heavychlid</div><div class="ttdoc">stores the heavy child of a node</div><div class="ttdef"><b>Definition</b> <a href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00340">heavy_light_decomposition.cpp:340</a></div></div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1heavy__light__decomposition_1_1_h_l_d_html_aa86a91ae0cd7898990a8170a2f2c9cda"><div class="ttname"><a href="#aa86a91ae0cd7898990a8170a2f2c9cda">range_queries::heavy_light_decomposition::HLD::h_label</a></div><div class="ttdeci">std::vector< int > h_label</div><div class="ttdoc">stores the label of a node</div><div class="ttdef"><b>Definition</b> <a href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00339">heavy_light_decomposition.cpp:339</a></div></div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1heavy__light__decomposition_1_1_s_g_html_afba5c1225ba04c0025c7786c09ff28f1"><div class="ttname"><a href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html#afba5c1225ba04c0025c7786c09ff28f1">range_queries::heavy_light_decomposition::SG::SG</a></div><div class="ttdeci">SG(int size)</div><div class="ttdoc">Class parameterized constructor. Resizes the and initilizes the data members.</div><div class="ttdef"><b>Definition</b> <a href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00282">heavy_light_decomposition.cpp:282</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="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00140">heavy_light_decomposition.cpp:140</a></div></div>
|
||||
<p class="definition">Definition at line <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00441">441</a> of file <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html">heavy_light_decomposition.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 441</span> : <a class="code hl_function" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#a835fb2bbb27307b8cacad9b287968bc1">Tree<X></a>(<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">nodes</a>), <a class="code hl_function" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html#afba5c1225ba04c0025c7786c09ff28f1">SG<X></a>(<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">nodes</a>) {</div>
|
||||
<div class="line"><span class="lineno"> 442</span> <span class="comment">/* Initialization and resize vectors */</span></div>
|
||||
<div class="line"><span class="lineno"> 443</span> <a class="code hl_variable" href="#a722cc7cf2c3e4d15583601a48b09776f">label</a> = 0;</div>
|
||||
<div class="line"><span class="lineno"> 444</span> <a class="code hl_variable" href="#aa86a91ae0cd7898990a8170a2f2c9cda">h_label</a>.assign(<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">Tree<X>::t_nodes</a>, -1);</div>
|
||||
<div class="line"><span class="lineno"> 445</span> <a class="code hl_variable" href="#a84424f180f12b514eaab57a6aa20b104">h_heavychlid</a>.assign(<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">Tree<X>::t_nodes</a>, -1);</div>
|
||||
<div class="line"><span class="lineno"> 446</span> <a class="code hl_variable" href="#a1b336474d17eff1aa4be73d4068dc725">h_parent</a>.resize(<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">Tree<X>::t_nodes</a>);</div>
|
||||
<div class="line"><span class="lineno"> 447</span> <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">iota</a>(<a class="code hl_variable" href="#a1b336474d17eff1aa4be73d4068dc725">h_parent</a>.begin(), <a class="code hl_variable" href="#a1b336474d17eff1aa4be73d4068dc725">h_parent</a>.end(), 0);</div>
|
||||
<div class="line"><span class="lineno"> 448</span> }</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="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00342">heavy_light_decomposition.cpp:342</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="#a1b336474d17eff1aa4be73d4068dc725">range_queries::heavy_light_decomposition::HLD::h_parent</a></div><div class="ttdeci">std::vector< int > 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="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00347">heavy_light_decomposition.cpp:347</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="#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="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00344">heavy_light_decomposition.cpp:344</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="#a84424f180f12b514eaab57a6aa20b104">range_queries::heavy_light_decomposition::HLD::h_heavychlid</a></div><div class="ttdeci">std::vector< int > h_heavychlid</div><div class="ttdoc">stores the heavy child of a node</div><div class="ttdef"><b>Definition</b> <a href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00346">heavy_light_decomposition.cpp:346</a></div></div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1heavy__light__decomposition_1_1_h_l_d_html_aa86a91ae0cd7898990a8170a2f2c9cda"><div class="ttname"><a href="#aa86a91ae0cd7898990a8170a2f2c9cda">range_queries::heavy_light_decomposition::HLD::h_label</a></div><div class="ttdeci">std::vector< int > h_label</div><div class="ttdoc">stores the label of a node</div><div class="ttdef"><b>Definition</b> <a href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00345">heavy_light_decomposition.cpp:345</a></div></div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1heavy__light__decomposition_1_1_s_g_html_afba5c1225ba04c0025c7786c09ff28f1"><div class="ttname"><a href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html#afba5c1225ba04c0025c7786c09ff28f1">range_queries::heavy_light_decomposition::SG::SG</a></div><div class="ttdeci">SG(int size)</div><div class="ttdoc">Class parameterized constructor. Resizes the and initilizes the data members.</div><div class="ttdef"><b>Definition</b> <a href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00286">heavy_light_decomposition.cpp:286</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="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00142">heavy_light_decomposition.cpp:142</a></div></div>
|
||||
</div><!-- fragment -->
|
||||
</div>
|
||||
</div>
|
||||
@@ -284,27 +284,27 @@ template<typename X> </div>
|
||||
</dl>
|
||||
<dl class="section return"><dt>Returns</dt><dd>the sum of ndoe values in the simple path from a to b </dd></dl>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00409">409</a> of file <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html">heavy_light_decomposition.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 409</span> {</div>
|
||||
<div class="line"><span class="lineno"> 410</span> <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">X</a> <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">ret</a> = <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">SG<X>::sret_init</a>;</div>
|
||||
<div class="line"><span class="lineno"> 411</span> <span class="keywordflow">if</span> (<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">Tree<X>::t_depth</a>[<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">a</a>] < <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">Tree<X>::t_depth</a>[<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">b</a>]) {</div>
|
||||
<div class="line"><span class="lineno"> 412</span> <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">std::swap</a>(<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">a</a>, <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">b</a>);</div>
|
||||
<div class="line"><span class="lineno"> 413</span> }</div>
|
||||
<div class="line"><span class="lineno"> 414</span> <span class="keywordflow">while</span> (<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">Tree<X>::t_depth</a>[<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">a</a>] >= <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">Tree<X>::t_depth</a>[<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">b</a>]) {</div>
|
||||
<div class="line"><span class="lineno"> 415</span> <span class="keywordtype">int</span> <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">l</a> = <a class="code hl_variable" href="#aa86a91ae0cd7898990a8170a2f2c9cda">h_label</a>[<a class="code hl_variable" href="#a1b336474d17eff1aa4be73d4068dc725">h_parent</a>[<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">a</a>]];</div>
|
||||
<div class="line"><span class="lineno"> 416</span> <span class="keywordtype">int</span> <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">r</a> = <a class="code hl_variable" href="#aa86a91ae0cd7898990a8170a2f2c9cda">h_label</a>[<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">a</a>];</div>
|
||||
<div class="line"><span class="lineno"> 417</span> <span class="keywordflow">if</span> (<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">Tree<X>::t_depth</a>[<a class="code hl_variable" href="#a1b336474d17eff1aa4be73d4068dc725">h_parent</a>[<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">a</a>]] < <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">Tree<X>::t_depth</a>[<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">b</a>]) {</div>
|
||||
<div class="line"><span class="lineno"> 418</span> <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">l</a> += <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">Tree<X>::t_depth</a>[<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">b</a>] - <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">Tree<X>::t_depth</a>[<a class="code hl_variable" href="#a1b336474d17eff1aa4be73d4068dc725">h_parent</a>[<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">a</a>]];</div>
|
||||
<div class="line"><span class="lineno"> 419</span> }</div>
|
||||
<div class="line"><span class="lineno"> 420</span> <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">ret</a> = <a class="code hl_function" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html#a41c733f5f5e262b308f7cb95c88c1e74">SG<X>::combine</a>(<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">ret</a>, <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">SG<X>::query</a>(<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">l</a>, <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">r</a>));</div>
|
||||
<div class="line"><span class="lineno"> 421</span> <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">a</a> = <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">Tree<X>::t_par</a>[<a class="code hl_variable" href="#a1b336474d17eff1aa4be73d4068dc725">h_parent</a>[<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">a</a>]][0];</div>
|
||||
<div class="line"><span class="lineno"> 422</span> <span class="keywordflow">if</span> (<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">a</a> == -1) {</div>
|
||||
<div class="line"><span class="lineno"> 423</span> <span class="keywordflow">break</span>;</div>
|
||||
<div class="line"><span class="lineno"> 424</span> }</div>
|
||||
<div class="line"><span class="lineno"> 425</span> }</div>
|
||||
<div class="line"><span class="lineno"> 426</span> <span class="keywordflow">return</span> <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">ret</a>;</div>
|
||||
<div class="line"><span class="lineno"> 427</span> }</div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1heavy__light__decomposition_1_1_s_g_html_a41c733f5f5e262b308f7cb95c88c1e74"><div class="ttname"><a href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html#a41c733f5f5e262b308f7cb95c88c1e74">range_queries::heavy_light_decomposition::SG::combine</a></div><div class="ttdeci">X combine(X lhs, X rhs)</div><div class="ttdoc">Function that specifies the type of operation involved when segments are combined.</div><div class="ttdef"><b>Definition</b> <a href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00274">heavy_light_decomposition.cpp:274</a></div></div>
|
||||
<p class="definition">Definition at line <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00415">415</a> of file <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html">heavy_light_decomposition.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 415</span> {</div>
|
||||
<div class="line"><span class="lineno"> 416</span> <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">X</a> <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">ret</a> = <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">SG<X>::sret_init</a>;</div>
|
||||
<div class="line"><span class="lineno"> 417</span> <span class="keywordflow">if</span> (<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">Tree<X>::t_depth</a>[<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">a</a>] < <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">Tree<X>::t_depth</a>[<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">b</a>]) {</div>
|
||||
<div class="line"><span class="lineno"> 418</span> <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">std::swap</a>(<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">a</a>, <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">b</a>);</div>
|
||||
<div class="line"><span class="lineno"> 419</span> }</div>
|
||||
<div class="line"><span class="lineno"> 420</span> <span class="keywordflow">while</span> (<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">Tree<X>::t_depth</a>[<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">a</a>] >= <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">Tree<X>::t_depth</a>[<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">b</a>]) {</div>
|
||||
<div class="line"><span class="lineno"> 421</span> <span class="keywordtype">int</span> <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">l</a> = <a class="code hl_variable" href="#aa86a91ae0cd7898990a8170a2f2c9cda">h_label</a>[<a class="code hl_variable" href="#a1b336474d17eff1aa4be73d4068dc725">h_parent</a>[<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">a</a>]];</div>
|
||||
<div class="line"><span class="lineno"> 422</span> <span class="keywordtype">int</span> <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">r</a> = <a class="code hl_variable" href="#aa86a91ae0cd7898990a8170a2f2c9cda">h_label</a>[<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">a</a>];</div>
|
||||
<div class="line"><span class="lineno"> 423</span> <span class="keywordflow">if</span> (<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">Tree<X>::t_depth</a>[<a class="code hl_variable" href="#a1b336474d17eff1aa4be73d4068dc725">h_parent</a>[<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">a</a>]] < <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">Tree<X>::t_depth</a>[<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">b</a>]) {</div>
|
||||
<div class="line"><span class="lineno"> 424</span> <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">l</a> += <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">Tree<X>::t_depth</a>[<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">b</a>] - <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">Tree<X>::t_depth</a>[<a class="code hl_variable" href="#a1b336474d17eff1aa4be73d4068dc725">h_parent</a>[<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">a</a>]];</div>
|
||||
<div class="line"><span class="lineno"> 425</span> }</div>
|
||||
<div class="line"><span class="lineno"> 426</span> <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">ret</a> = <a class="code hl_function" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html#a41c733f5f5e262b308f7cb95c88c1e74">SG<X>::combine</a>(<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">ret</a>, <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">SG<X>::query</a>(<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">l</a>, <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">r</a>));</div>
|
||||
<div class="line"><span class="lineno"> 427</span> <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">a</a> = <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">Tree<X>::t_par</a>[<a class="code hl_variable" href="#a1b336474d17eff1aa4be73d4068dc725">h_parent</a>[<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">a</a>]][0];</div>
|
||||
<div class="line"><span class="lineno"> 428</span> <span class="keywordflow">if</span> (<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">a</a> == -1) {</div>
|
||||
<div class="line"><span class="lineno"> 429</span> <span class="keywordflow">break</span>;</div>
|
||||
<div class="line"><span class="lineno"> 430</span> }</div>
|
||||
<div class="line"><span class="lineno"> 431</span> }</div>
|
||||
<div class="line"><span class="lineno"> 432</span> <span class="keywordflow">return</span> <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">ret</a>;</div>
|
||||
<div class="line"><span class="lineno"> 433</span> }</div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1heavy__light__decomposition_1_1_s_g_html_a41c733f5f5e262b308f7cb95c88c1e74"><div class="ttname"><a href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html#a41c733f5f5e262b308f7cb95c88c1e74">range_queries::heavy_light_decomposition::SG::combine</a></div><div class="ttdeci">X combine(X lhs, X rhs)</div><div class="ttdoc">Function that specifies the type of operation involved when segments are combined.</div><div class="ttdef"><b>Definition</b> <a href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00278">heavy_light_decomposition.cpp:278</a></div></div>
|
||||
</div><!-- fragment -->
|
||||
</div>
|
||||
</div>
|
||||
@@ -347,21 +347,21 @@ template<typename X> </div>
|
||||
</dl>
|
||||
<dl class="section return"><dt>Returns</dt><dd>void </dd></dl>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00350">350</a> of file <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html">heavy_light_decomposition.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 350</span> {</div>
|
||||
<div class="line"><span class="lineno"> 351</span> <span class="keywordtype">int</span> <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">hc_size</a> = -1, <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">hc_id</a> = -1;</div>
|
||||
<div class="line"><span class="lineno"> 352</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keywordtype">int</span> &<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">v</a> : <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">Tree<X>::t_adj</a>[<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">u</a>]) {</div>
|
||||
<div class="line"><span class="lineno"> 353</span> <span class="keywordflow">if</span> (<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">v</a> ^ <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">p</a>) {</div>
|
||||
<div class="line"><span class="lineno"> 354</span> <a class="code hl_function" href="#af64848d6630c39d0f09ce2359cc7c4f8">dfs_hc</a>(<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">v</a>, <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">u</a>);</div>
|
||||
<div class="line"><span class="lineno"> 355</span> <span class="keywordflow">if</span> (<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">Tree<X>::t_size</a>[<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">v</a>] > <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">hc_size</a>) {</div>
|
||||
<div class="line"><span class="lineno"> 356</span> <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">hc_size</a> = <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">Tree<X>::t_size</a>[<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">v</a>];</div>
|
||||
<div class="line"><span class="lineno"> 357</span> <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">hc_id</a> = <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">v</a>;</div>
|
||||
<div class="line"><span class="lineno"> 358</span> }</div>
|
||||
<div class="line"><span class="lineno"> 359</span> }</div>
|
||||
<div class="line"><span class="lineno"> 360</span> }</div>
|
||||
<div class="line"><span class="lineno"> 361</span> <a class="code hl_variable" href="#a84424f180f12b514eaab57a6aa20b104">h_heavychlid</a>[<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">u</a>] = <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">hc_id</a>;</div>
|
||||
<div class="line"><span class="lineno"> 362</span> }</div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1heavy__light__decomposition_1_1_h_l_d_html_af64848d6630c39d0f09ce2359cc7c4f8"><div class="ttname"><a href="#af64848d6630c39d0f09ce2359cc7c4f8">range_queries::heavy_light_decomposition::HLD::dfs_hc</a></div><div class="ttdeci">void dfs_hc(int u, int p=-1)</div><div class="ttdoc">Utility function to assign heavy child to each node (-1 for a leaf node)</div><div class="ttdef"><b>Definition</b> <a href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00350">heavy_light_decomposition.cpp:350</a></div></div>
|
||||
<p class="definition">Definition at line <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00356">356</a> of file <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html">heavy_light_decomposition.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 356</span> {</div>
|
||||
<div class="line"><span class="lineno"> 357</span> <span class="keywordtype">int</span> <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">hc_size</a> = -1, <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">hc_id</a> = -1;</div>
|
||||
<div class="line"><span class="lineno"> 358</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keywordtype">int</span> &<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">v</a> : <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">Tree<X>::t_adj</a>[<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">u</a>]) {</div>
|
||||
<div class="line"><span class="lineno"> 359</span> <span class="keywordflow">if</span> (<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">v</a> ^ <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">p</a>) {</div>
|
||||
<div class="line"><span class="lineno"> 360</span> <a class="code hl_function" href="#af64848d6630c39d0f09ce2359cc7c4f8">dfs_hc</a>(<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">v</a>, <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">u</a>);</div>
|
||||
<div class="line"><span class="lineno"> 361</span> <span class="keywordflow">if</span> (<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">Tree<X>::t_size</a>[<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">v</a>] > <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">hc_size</a>) {</div>
|
||||
<div class="line"><span class="lineno"> 362</span> <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">hc_size</a> = <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">Tree<X>::t_size</a>[<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">v</a>];</div>
|
||||
<div class="line"><span class="lineno"> 363</span> <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">hc_id</a> = <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">v</a>;</div>
|
||||
<div class="line"><span class="lineno"> 364</span> }</div>
|
||||
<div class="line"><span class="lineno"> 365</span> }</div>
|
||||
<div class="line"><span class="lineno"> 366</span> }</div>
|
||||
<div class="line"><span class="lineno"> 367</span> <a class="code hl_variable" href="#a84424f180f12b514eaab57a6aa20b104">h_heavychlid</a>[<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">u</a>] = <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">hc_id</a>;</div>
|
||||
<div class="line"><span class="lineno"> 368</span> }</div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1heavy__light__decomposition_1_1_h_l_d_html_af64848d6630c39d0f09ce2359cc7c4f8"><div class="ttname"><a href="#af64848d6630c39d0f09ce2359cc7c4f8">range_queries::heavy_light_decomposition::HLD::dfs_hc</a></div><div class="ttdeci">void dfs_hc(int u, int p=-1)</div><div class="ttdoc">Utility function to assign heavy child to each node (-1 for a leaf node)</div><div class="ttdef"><b>Definition</b> <a href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00356">heavy_light_decomposition.cpp:356</a></div></div>
|
||||
</div><!-- fragment -->
|
||||
</div>
|
||||
</div>
|
||||
@@ -404,19 +404,19 @@ template<typename X> </div>
|
||||
</dl>
|
||||
<dl class="section return"><dt>Returns</dt><dd>void </dd></dl>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00390">390</a> of file <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html">heavy_light_decomposition.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 390</span> {</div>
|
||||
<div class="line"><span class="lineno"> 391</span> <a class="code hl_variable" href="#aa86a91ae0cd7898990a8170a2f2c9cda">h_label</a>[<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">u</a>] = <a class="code hl_variable" href="#a722cc7cf2c3e4d15583601a48b09776f">label</a>++;</div>
|
||||
<div class="line"><span class="lineno"> 392</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="#a84424f180f12b514eaab57a6aa20b104">h_heavychlid</a>[<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">u</a>] != -1) {</div>
|
||||
<div class="line"><span class="lineno"> 393</span> <a class="code hl_function" href="#a0579062b384e54b611b80c6337c7f2c8">dfs_labels</a>(<a class="code hl_variable" href="#a84424f180f12b514eaab57a6aa20b104">h_heavychlid</a>[<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">u</a>], <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">u</a>);</div>
|
||||
<div class="line"><span class="lineno"> 394</span> }</div>
|
||||
<div class="line"><span class="lineno"> 395</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keywordtype">int</span> &<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">v</a> : <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">Tree<X>::t_adj</a>[<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">u</a>]) {</div>
|
||||
<div class="line"><span class="lineno"> 396</span> <span class="keywordflow">if</span> (<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">v</a> ^ <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">p</a> <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">and</a> <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">v</a> ^ <a class="code hl_variable" href="#a84424f180f12b514eaab57a6aa20b104">h_heavychlid</a>[<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">u</a>]) {</div>
|
||||
<div class="line"><span class="lineno"> 397</span> <a class="code hl_function" href="#a0579062b384e54b611b80c6337c7f2c8">dfs_labels</a>(<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">v</a>, <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">u</a>);</div>
|
||||
<div class="line"><span class="lineno"> 398</span> }</div>
|
||||
<div class="line"><span class="lineno"> 399</span> }</div>
|
||||
<div class="line"><span class="lineno"> 400</span> }</div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1heavy__light__decomposition_1_1_h_l_d_html_a0579062b384e54b611b80c6337c7f2c8"><div class="ttname"><a href="#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="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00390">heavy_light_decomposition.cpp:390</a></div></div>
|
||||
<p class="definition">Definition at line <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00396">396</a> of file <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html">heavy_light_decomposition.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 396</span> {</div>
|
||||
<div class="line"><span class="lineno"> 397</span> <a class="code hl_variable" href="#aa86a91ae0cd7898990a8170a2f2c9cda">h_label</a>[<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">u</a>] = <a class="code hl_variable" href="#a722cc7cf2c3e4d15583601a48b09776f">label</a>++;</div>
|
||||
<div class="line"><span class="lineno"> 398</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="#a84424f180f12b514eaab57a6aa20b104">h_heavychlid</a>[<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">u</a>] != -1) {</div>
|
||||
<div class="line"><span class="lineno"> 399</span> <a class="code hl_function" href="#a0579062b384e54b611b80c6337c7f2c8">dfs_labels</a>(<a class="code hl_variable" href="#a84424f180f12b514eaab57a6aa20b104">h_heavychlid</a>[<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">u</a>], <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">u</a>);</div>
|
||||
<div class="line"><span class="lineno"> 400</span> }</div>
|
||||
<div class="line"><span class="lineno"> 401</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keywordtype">int</span> &<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">v</a> : <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">Tree<X>::t_adj</a>[<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">u</a>]) {</div>
|
||||
<div class="line"><span class="lineno"> 402</span> <span class="keywordflow">if</span> (<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">v</a> ^ <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">p</a> <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">and</a> <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">v</a> ^ <a class="code hl_variable" href="#a84424f180f12b514eaab57a6aa20b104">h_heavychlid</a>[<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">u</a>]) {</div>
|
||||
<div class="line"><span class="lineno"> 403</span> <a class="code hl_function" href="#a0579062b384e54b611b80c6337c7f2c8">dfs_labels</a>(<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">v</a>, <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">u</a>);</div>
|
||||
<div class="line"><span class="lineno"> 404</span> }</div>
|
||||
<div class="line"><span class="lineno"> 405</span> }</div>
|
||||
<div class="line"><span class="lineno"> 406</span> }</div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1heavy__light__decomposition_1_1_h_l_d_html_a0579062b384e54b611b80c6337c7f2c8"><div class="ttname"><a href="#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="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00396">heavy_light_decomposition.cpp:396</a></div></div>
|
||||
</div><!-- fragment -->
|
||||
</div>
|
||||
</div>
|
||||
@@ -459,19 +459,19 @@ template<typename X> </div>
|
||||
</dl>
|
||||
<dl class="section return"><dt>Returns</dt><dd>void </dd></dl>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00371">371</a> of file <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html">heavy_light_decomposition.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 371</span> {</div>
|
||||
<div class="line"><span class="lineno"> 372</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="#a84424f180f12b514eaab57a6aa20b104">h_heavychlid</a>[<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">u</a>] != -1) {</div>
|
||||
<div class="line"><span class="lineno"> 373</span> <a class="code hl_variable" href="#a1b336474d17eff1aa4be73d4068dc725">h_parent</a>[<a class="code hl_variable" href="#a84424f180f12b514eaab57a6aa20b104">h_heavychlid</a>[<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">u</a>]] = <a class="code hl_variable" href="#a1b336474d17eff1aa4be73d4068dc725">h_parent</a>[<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">u</a>];</div>
|
||||
<div class="line"><span class="lineno"> 374</span> <a class="code hl_function" href="#a2dfbda148aad0bfaba2ebfda9ebc915a">dfs_par</a>(<a class="code hl_variable" href="#a84424f180f12b514eaab57a6aa20b104">h_heavychlid</a>[<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">u</a>], <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">u</a>);</div>
|
||||
<div class="line"><span class="lineno"> 375</span> }</div>
|
||||
<div class="line"><span class="lineno"> 376</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keywordtype">int</span> &<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">v</a> : <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">Tree<X>::t_adj</a>[<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">u</a>]) {</div>
|
||||
<div class="line"><span class="lineno"> 377</span> <span class="keywordflow">if</span> (<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">v</a> ^ <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">p</a> <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">and</a> <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">v</a> ^ <a class="code hl_variable" href="#a84424f180f12b514eaab57a6aa20b104">h_heavychlid</a>[<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">u</a>]) {</div>
|
||||
<div class="line"><span class="lineno"> 378</span> <a class="code hl_function" href="#a2dfbda148aad0bfaba2ebfda9ebc915a">dfs_par</a>(<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">v</a>, <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">u</a>);</div>
|
||||
<div class="line"><span class="lineno"> 379</span> }</div>
|
||||
<div class="line"><span class="lineno"> 380</span> }</div>
|
||||
<div class="line"><span class="lineno"> 381</span> }</div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1heavy__light__decomposition_1_1_h_l_d_html_a2dfbda148aad0bfaba2ebfda9ebc915a"><div class="ttname"><a href="#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="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00371">heavy_light_decomposition.cpp:371</a></div></div>
|
||||
<p class="definition">Definition at line <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00377">377</a> of file <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html">heavy_light_decomposition.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 377</span> {</div>
|
||||
<div class="line"><span class="lineno"> 378</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="#a84424f180f12b514eaab57a6aa20b104">h_heavychlid</a>[<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">u</a>] != -1) {</div>
|
||||
<div class="line"><span class="lineno"> 379</span> <a class="code hl_variable" href="#a1b336474d17eff1aa4be73d4068dc725">h_parent</a>[<a class="code hl_variable" href="#a84424f180f12b514eaab57a6aa20b104">h_heavychlid</a>[<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">u</a>]] = <a class="code hl_variable" href="#a1b336474d17eff1aa4be73d4068dc725">h_parent</a>[<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">u</a>];</div>
|
||||
<div class="line"><span class="lineno"> 380</span> <a class="code hl_function" href="#a2dfbda148aad0bfaba2ebfda9ebc915a">dfs_par</a>(<a class="code hl_variable" href="#a84424f180f12b514eaab57a6aa20b104">h_heavychlid</a>[<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">u</a>], <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">u</a>);</div>
|
||||
<div class="line"><span class="lineno"> 381</span> }</div>
|
||||
<div class="line"><span class="lineno"> 382</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keywordtype">int</span> &<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">v</a> : <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">Tree<X>::t_adj</a>[<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">u</a>]) {</div>
|
||||
<div class="line"><span class="lineno"> 383</span> <span class="keywordflow">if</span> (<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">v</a> ^ <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">p</a> <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">and</a> <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">v</a> ^ <a class="code hl_variable" href="#a84424f180f12b514eaab57a6aa20b104">h_heavychlid</a>[<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">u</a>]) {</div>
|
||||
<div class="line"><span class="lineno"> 384</span> <a class="code hl_function" href="#a2dfbda148aad0bfaba2ebfda9ebc915a">dfs_par</a>(<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">v</a>, <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">u</a>);</div>
|
||||
<div class="line"><span class="lineno"> 385</span> }</div>
|
||||
<div class="line"><span class="lineno"> 386</span> }</div>
|
||||
<div class="line"><span class="lineno"> 387</span> }</div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1heavy__light__decomposition_1_1_h_l_d_html_a2dfbda148aad0bfaba2ebfda9ebc915a"><div class="ttname"><a href="#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="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00377">heavy_light_decomposition.cpp:377</a></div></div>
|
||||
</div><!-- fragment -->
|
||||
</div>
|
||||
</div>
|
||||
@@ -503,26 +503,26 @@ template<typename X> </div>
|
||||
<p>This function must be called after the tree adjacency list and node values are populated The function initializes the required parametes, and populates the segment tree. </p>
|
||||
<dl class="section return"><dt>Returns</dt><dd>void </dd></dl>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00450">450</a> of file <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html">heavy_light_decomposition.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 450</span> {</div>
|
||||
<div class="line"><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<X>::init</a>();</div>
|
||||
<div class="line"><span class="lineno"> 452</span> </div>
|
||||
<div class="line"><span class="lineno"> 453</span> <span class="comment">// Fill the heavy child, greatest parent, and labels</span></div>
|
||||
<div class="line"><span class="lineno"> 454</span> <a class="code hl_variable" href="#a722cc7cf2c3e4d15583601a48b09776f">label</a> = 0;</div>
|
||||
<div class="line"><span class="lineno"> 455</span> <a class="code hl_function" href="#af64848d6630c39d0f09ce2359cc7c4f8">dfs_hc</a>(<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">Tree<X>::t_root</a>);</div>
|
||||
<div class="line"><span class="lineno"> 456</span> <a class="code hl_function" href="#a2dfbda148aad0bfaba2ebfda9ebc915a">dfs_par</a>(<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">Tree<X>::t_root</a>);</div>
|
||||
<div class="line"><span class="lineno"> 457</span> <a class="code hl_function" href="#a0579062b384e54b611b80c6337c7f2c8">dfs_labels</a>(<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">Tree<X>::t_root</a>);</div>
|
||||
<p class="definition">Definition at line <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00456">456</a> of file <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html">heavy_light_decomposition.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 456</span> {</div>
|
||||
<div class="line"><span class="lineno"> 457</span> <a class="code hl_function" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#ad22d760a5a33545a70e7ea5e1786c8dc">Tree<X>::init</a>();</div>
|
||||
<div class="line"><span class="lineno"> 458</span> </div>
|
||||
<div class="line"><span class="lineno"> 459</span> <span class="comment">// Segment Tree Initialization</span></div>
|
||||
<div class="line"><span class="lineno"> 460</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">i</a> = 0; <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">i < Tree<X>::t_nodes</a>; <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">i</a>++) {</div>
|
||||
<div class="line"><span class="lineno"> 461</span> <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">SG<X>::s_tree</a>[<a class="code hl_variable" href="#aa86a91ae0cd7898990a8170a2f2c9cda">h_label</a>[<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">i</a>] + <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">Tree<X>::t_nodes</a>] = <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">Tree<X>::t_val</a>[<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">i</a>];</div>
|
||||
<div class="line"><span class="lineno"> 462</span> }</div>
|
||||
<div class="line"><span class="lineno"> 463</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">i</a> = <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">Tree<X>::t_nodes</a> - 1; <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">i</a> > 0; <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">i</a>--) {</div>
|
||||
<div class="line"><span class="lineno"> 464</span> <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">SG<X>::s_tree</a>[<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">i</a>] =</div>
|
||||
<div class="line"><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<X>::combine</a>(<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">SG<X>::s_tree</a>[<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">i</a> << 1], <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">SG<X>::s_tree</a>[<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">i</a> << 1 | 1]);</div>
|
||||
<div class="line"><span class="lineno"> 466</span> }</div>
|
||||
<div class="line"><span class="lineno"> 467</span> }</div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1heavy__light__decomposition_1_1_tree_html_ad22d760a5a33545a70e7ea5e1786c8dc"><div class="ttname"><a href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#ad22d760a5a33545a70e7ea5e1786c8dc">range_queries::heavy_light_decomposition::Tree::init</a></div><div class="ttdeci">void init()</div><div class="ttdoc">This function must be called after the tree adjacency list and node values are populated The function...</div><div class="ttdef"><b>Definition</b> <a href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00186">heavy_light_decomposition.cpp:186</a></div></div>
|
||||
<div class="line"><span class="lineno"> 459</span> <span class="comment">// Fill the heavy child, greatest parent, and labels</span></div>
|
||||
<div class="line"><span class="lineno"> 460</span> <a class="code hl_variable" href="#a722cc7cf2c3e4d15583601a48b09776f">label</a> = 0;</div>
|
||||
<div class="line"><span class="lineno"> 461</span> <a class="code hl_function" href="#af64848d6630c39d0f09ce2359cc7c4f8">dfs_hc</a>(<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">Tree<X>::t_root</a>);</div>
|
||||
<div class="line"><span class="lineno"> 462</span> <a class="code hl_function" href="#a2dfbda148aad0bfaba2ebfda9ebc915a">dfs_par</a>(<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">Tree<X>::t_root</a>);</div>
|
||||
<div class="line"><span class="lineno"> 463</span> <a class="code hl_function" href="#a0579062b384e54b611b80c6337c7f2c8">dfs_labels</a>(<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">Tree<X>::t_root</a>);</div>
|
||||
<div class="line"><span class="lineno"> 464</span> </div>
|
||||
<div class="line"><span class="lineno"> 465</span> <span class="comment">// Segment Tree Initialization</span></div>
|
||||
<div class="line"><span class="lineno"> 466</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">i</a> = 0; <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">i < Tree<X>::t_nodes</a>; <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">i</a>++) {</div>
|
||||
<div class="line"><span class="lineno"> 467</span> <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">SG<X>::s_tree</a>[<a class="code hl_variable" href="#aa86a91ae0cd7898990a8170a2f2c9cda">h_label</a>[<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">i</a>] + <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">Tree<X>::t_nodes</a>] = <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">Tree<X>::t_val</a>[<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">i</a>];</div>
|
||||
<div class="line"><span class="lineno"> 468</span> }</div>
|
||||
<div class="line"><span class="lineno"> 469</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">i</a> = <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">Tree<X>::t_nodes</a> - 1; <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">i</a> > 0; <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">i</a>--) {</div>
|
||||
<div class="line"><span class="lineno"> 470</span> <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">SG<X>::s_tree</a>[<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">i</a>] = <a class="code hl_function" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html#a41c733f5f5e262b308f7cb95c88c1e74">SG<X>::combine</a>(<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">SG<X>::s_tree</a>[<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">i</a> << 1],</div>
|
||||
<div class="line"><span class="lineno"> 471</span> <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">SG<X>::s_tree</a>[<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">i</a> << 1 | 1]);</div>
|
||||
<div class="line"><span class="lineno"> 472</span> }</div>
|
||||
<div class="line"><span class="lineno"> 473</span> }</div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1heavy__light__decomposition_1_1_tree_html_ad22d760a5a33545a70e7ea5e1786c8dc"><div class="ttname"><a href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#ad22d760a5a33545a70e7ea5e1786c8dc">range_queries::heavy_light_decomposition::Tree::init</a></div><div class="ttdeci">void init()</div><div class="ttdoc">This function must be called after the tree adjacency list and node values are populated The function...</div><div class="ttdef"><b>Definition</b> <a href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00188">heavy_light_decomposition.cpp:188</a></div></div>
|
||||
</div><!-- fragment -->
|
||||
</div>
|
||||
</div>
|
||||
@@ -565,17 +565,17 @@ template<typename X> </div>
|
||||
</dl>
|
||||
<dl class="section return"><dt>Returns</dt><dd>the sum of node values in the simple path from a to b </dd></dl>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00489">489</a> of file <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html">heavy_light_decomposition.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 489</span> {</div>
|
||||
<div class="line"><span class="lineno"> 490</span> <span class="keywordtype">int</span> <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">lc</a> = <a class="code hl_function" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#ae2b407e64aaf9878fbee7ee6efe9c7d4">Tree<X>::lca</a>(<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">a</a>, <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">b</a>);</div>
|
||||
<div class="line"><span class="lineno"> 491</span> <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">X</a> <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">ret</a> = <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">SG<X>::sret_init</a>;</div>
|
||||
<div class="line"><span class="lineno"> 492</span> <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">assert</a>(<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">lc</a> != -1);</div>
|
||||
<div class="line"><span class="lineno"> 493</span> <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">ret</a> += <a class="code hl_function" href="#a7d5b40c076347a6aabfb37a0590f2f24">chain_query</a>(<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">a</a>, <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">lc</a>);</div>
|
||||
<div class="line"><span class="lineno"> 494</span> <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">ret</a> += <a class="code hl_function" href="#a7d5b40c076347a6aabfb37a0590f2f24">chain_query</a>(<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">b</a>, <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">lc</a>);</div>
|
||||
<div class="line"><span class="lineno"> 495</span> <span class="keywordflow">return</span> <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">ret</a> - <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">Tree<X>::t_val</a>[<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">lc</a>];</div>
|
||||
<div class="line"><span class="lineno"> 496</span> }</div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1heavy__light__decomposition_1_1_h_l_d_html_a7d5b40c076347a6aabfb37a0590f2f24"><div class="ttname"><a href="#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="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00409">heavy_light_decomposition.cpp:409</a></div></div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1heavy__light__decomposition_1_1_tree_html_ae2b407e64aaf9878fbee7ee6efe9c7d4"><div class="ttname"><a href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#ae2b407e64aaf9878fbee7ee6efe9c7d4">range_queries::heavy_light_decomposition::Tree::lca</a></div><div class="ttdeci">int lca(int a, int b)</div><div class="ttdoc">The function returns the least common ancestor of two nodes.</div><div class="ttdef"><b>Definition</b> <a href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00229">heavy_light_decomposition.cpp:229</a></div></div>
|
||||
<p class="definition">Definition at line <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00495">495</a> of file <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html">heavy_light_decomposition.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 495</span> {</div>
|
||||
<div class="line"><span class="lineno"> 496</span> <span class="keywordtype">int</span> <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">lc</a> = <a class="code hl_function" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#ae2b407e64aaf9878fbee7ee6efe9c7d4">Tree<X>::lca</a>(<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">a</a>, <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">b</a>);</div>
|
||||
<div class="line"><span class="lineno"> 497</span> <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">X</a> <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">ret</a> = <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">SG<X>::sret_init</a>;</div>
|
||||
<div class="line"><span class="lineno"> 498</span> <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">assert</a>(<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">lc</a> != -1);</div>
|
||||
<div class="line"><span class="lineno"> 499</span> <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">ret</a> += <a class="code hl_function" href="#a7d5b40c076347a6aabfb37a0590f2f24">chain_query</a>(<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">a</a>, <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">lc</a>);</div>
|
||||
<div class="line"><span class="lineno"> 500</span> <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">ret</a> += <a class="code hl_function" href="#a7d5b40c076347a6aabfb37a0590f2f24">chain_query</a>(<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">b</a>, <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">lc</a>);</div>
|
||||
<div class="line"><span class="lineno"> 501</span> <span class="keywordflow">return</span> <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">ret</a> - <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">Tree<X>::t_val</a>[<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">lc</a>];</div>
|
||||
<div class="line"><span class="lineno"> 502</span> }</div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1heavy__light__decomposition_1_1_h_l_d_html_a7d5b40c076347a6aabfb37a0590f2f24"><div class="ttname"><a href="#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="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00415">heavy_light_decomposition.cpp:415</a></div></div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1heavy__light__decomposition_1_1_tree_html_ae2b407e64aaf9878fbee7ee6efe9c7d4"><div class="ttname"><a href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#ae2b407e64aaf9878fbee7ee6efe9c7d4">range_queries::heavy_light_decomposition::Tree::lca</a></div><div class="ttdeci">int lca(int a, int b)</div><div class="ttdoc">The function returns the least common ancestor of two nodes.</div><div class="ttdef"><b>Definition</b> <a href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00231">heavy_light_decomposition.cpp:231</a></div></div>
|
||||
</div><!-- fragment -->
|
||||
</div>
|
||||
</div>
|
||||
@@ -618,13 +618,13 @@ template<typename X> </div>
|
||||
</dl>
|
||||
<dl class="section return"><dt>Returns</dt><dd>void </dd></dl>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00475">475</a> of file <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html">heavy_light_decomposition.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 475</span> {</div>
|
||||
<div class="line"><span class="lineno"> 476</span> <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">X</a> <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">diff</a> = <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">val</a> - <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">Tree<X>::t_val</a>[<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">node</a>];</div>
|
||||
<div class="line"><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<X>::update</a>(<a class="code hl_variable" href="#aa86a91ae0cd7898990a8170a2f2c9cda">h_label</a>[<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">node</a>], <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">diff</a>);</div>
|
||||
<div class="line"><span class="lineno"> 478</span> <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">Tree<X>::t_val</a>[<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">node</a>] = <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">val</a>;</div>
|
||||
<div class="line"><span class="lineno"> 479</span> }</div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1heavy__light__decomposition_1_1_s_g_html_a3c75bf5770790f8eba8cc92227b5400c"><div class="ttname"><a href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html#a3c75bf5770790f8eba8cc92227b5400c">range_queries::heavy_light_decomposition::SG::update</a></div><div class="ttdeci">void update(int p, X v)</div><div class="ttdoc">Update the value at a node.</div><div class="ttdef"><b>Definition</b> <a href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00293">heavy_light_decomposition.cpp:293</a></div></div>
|
||||
<p class="definition">Definition at line <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00481">481</a> of file <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html">heavy_light_decomposition.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 481</span> {</div>
|
||||
<div class="line"><span class="lineno"> 482</span> <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">X</a> <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">diff</a> = <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">val</a> - <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">Tree<X>::t_val</a>[<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">node</a>];</div>
|
||||
<div class="line"><span class="lineno"> 483</span> <a class="code hl_function" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html#a3c75bf5770790f8eba8cc92227b5400c">SG<X>::update</a>(<a class="code hl_variable" href="#aa86a91ae0cd7898990a8170a2f2c9cda">h_label</a>[<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">node</a>], <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">diff</a>);</div>
|
||||
<div class="line"><span class="lineno"> 484</span> <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">Tree<X>::t_val</a>[<a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">node</a>] = <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">val</a>;</div>
|
||||
<div class="line"><span class="lineno"> 485</span> }</div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1heavy__light__decomposition_1_1_s_g_html_a3c75bf5770790f8eba8cc92227b5400c"><div class="ttname"><a href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html#a3c75bf5770790f8eba8cc92227b5400c">range_queries::heavy_light_decomposition::SG::update</a></div><div class="ttdeci">void update(int p, X v)</div><div class="ttdoc">Update the value at a node.</div><div class="ttdef"><b>Definition</b> <a href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00297">heavy_light_decomposition.cpp:297</a></div></div>
|
||||
</div><!-- fragment -->
|
||||
</div>
|
||||
</div>
|
||||
@@ -653,7 +653,7 @@ template<typename X> </div>
|
||||
|
||||
<p>stores the heavy child of a node </p>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00340">340</a> of file <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html">heavy_light_decomposition.cpp</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00346">346</a> of file <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html">heavy_light_decomposition.cpp</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@@ -681,7 +681,7 @@ template<typename X> </div>
|
||||
|
||||
<p>stores the label of a node </p>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00339">339</a> of file <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html">heavy_light_decomposition.cpp</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00345">345</a> of file <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html">heavy_light_decomposition.cpp</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@@ -709,7 +709,7 @@ template<typename X> </div>
|
||||
|
||||
<p>stores the top of the heavy chain from a node </p>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00341">341</a> of file <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html">heavy_light_decomposition.cpp</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00347">347</a> of file <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html">heavy_light_decomposition.cpp</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@@ -737,7 +737,7 @@ template<typename X> </div>
|
||||
|
||||
<p>utility member to assign labels in <a class="el" href="#a0579062b384e54b611b80c6337c7f2c8" title="Utility function to lable the nodes so that heavy chains have a contigous lable.">dfs_labels()</a> </p>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00338">338</a> of file <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html">heavy_light_decomposition.cpp</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00344">344</a> of file <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html">heavy_light_decomposition.cpp</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -197,16 +197,16 @@ Functions</h2></td></tr>
|
||||
</div><div class="memdoc">
|
||||
<p>Main function </p>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00634">634</a> of file <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html">heavy_light_decomposition.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 634</span> {</div>
|
||||
<div class="line"><span class="lineno"> 635</span> <a class="code hl_function" href="#a34b8683a2b429de5cce57e6d733ec817">test_1</a>();</div>
|
||||
<div class="line"><span class="lineno"> 636</span> <a class="code hl_function" href="#a458410412185a5f09199deaff7157a8d">test_2</a>();</div>
|
||||
<div class="line"><span class="lineno"> 637</span> <a class="code hl_function" href="#af31ec5409537703d9c8a47350386b32a">test_3</a>();</div>
|
||||
<div class="line"><span class="lineno"> 638</span> <span class="keywordflow">return</span> 0;</div>
|
||||
<div class="line"><span class="lineno"> 639</span>}</div>
|
||||
<div class="ttc" id="aheavy__light__decomposition_8cpp_html_a34b8683a2b429de5cce57e6d733ec817"><div class="ttname"><a href="#a34b8683a2b429de5cce57e6d733ec817">test_1</a></div><div class="ttdeci">static void test_1()</div><div class="ttdef"><b>Definition</b> <a href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00505">heavy_light_decomposition.cpp:505</a></div></div>
|
||||
<div class="ttc" id="aheavy__light__decomposition_8cpp_html_a458410412185a5f09199deaff7157a8d"><div class="ttname"><a href="#a458410412185a5f09199deaff7157a8d">test_2</a></div><div class="ttdeci">static void test_2()</div><div class="ttdef"><b>Definition</b> <a href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00549">heavy_light_decomposition.cpp:549</a></div></div>
|
||||
<div class="ttc" id="aheavy__light__decomposition_8cpp_html_af31ec5409537703d9c8a47350386b32a"><div class="ttname"><a href="#af31ec5409537703d9c8a47350386b32a">test_3</a></div><div class="ttdeci">static void test_3()</div><div class="ttdef"><b>Definition</b> <a href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00592">heavy_light_decomposition.cpp:592</a></div></div>
|
||||
<p class="definition">Definition at line <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00641">641</a> of file <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html">heavy_light_decomposition.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 641</span> {</div>
|
||||
<div class="line"><span class="lineno"> 642</span> <a class="code hl_function" href="#a34b8683a2b429de5cce57e6d733ec817">test_1</a>();</div>
|
||||
<div class="line"><span class="lineno"> 643</span> <a class="code hl_function" href="#a458410412185a5f09199deaff7157a8d">test_2</a>();</div>
|
||||
<div class="line"><span class="lineno"> 644</span> <a class="code hl_function" href="#af31ec5409537703d9c8a47350386b32a">test_3</a>();</div>
|
||||
<div class="line"><span class="lineno"> 645</span> <span class="keywordflow">return</span> 0;</div>
|
||||
<div class="line"><span class="lineno"> 646</span>}</div>
|
||||
<div class="ttc" id="aheavy__light__decomposition_8cpp_html_a34b8683a2b429de5cce57e6d733ec817"><div class="ttname"><a href="#a34b8683a2b429de5cce57e6d733ec817">test_1</a></div><div class="ttdeci">static void test_1()</div><div class="ttdef"><b>Definition</b> <a href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00511">heavy_light_decomposition.cpp:511</a></div></div>
|
||||
<div class="ttc" id="aheavy__light__decomposition_8cpp_html_a458410412185a5f09199deaff7157a8d"><div class="ttname"><a href="#a458410412185a5f09199deaff7157a8d">test_2</a></div><div class="ttdeci">static void test_2()</div><div class="ttdef"><b>Definition</b> <a href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00555">heavy_light_decomposition.cpp:555</a></div></div>
|
||||
<div class="ttc" id="aheavy__light__decomposition_8cpp_html_af31ec5409537703d9c8a47350386b32a"><div class="ttname"><a href="#af31ec5409537703d9c8a47350386b32a">test_3</a></div><div class="ttdeci">static void test_3()</div><div class="ttdef"><b>Definition</b> <a href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00599">heavy_light_decomposition.cpp:599</a></div></div>
|
||||
</div><!-- fragment -->
|
||||
</div>
|
||||
</div>
|
||||
@@ -234,47 +234,47 @@ Functions</h2></td></tr>
|
||||
</div><div class="memdoc">
|
||||
<p>Test implementations </p><dl class="section return"><dt>Returns</dt><dd>none </dd></dl>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00505">505</a> of file <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html">heavy_light_decomposition.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 505</span> {</div>
|
||||
<div class="line"><span class="lineno"> 506</span> std::cout << <span class="stringliteral">"Test 1:\n"</span>;</div>
|
||||
<div class="line"><span class="lineno"> 507</span> </div>
|
||||
<div class="line"><span class="lineno"> 508</span> <span class="comment">// Test details</span></div>
|
||||
<div class="line"><span class="lineno"> 509</span> <span class="keywordtype">int</span> n = 5;</div>
|
||||
<div class="line"><span class="lineno"> 510</span> std::vector<int64_t> node_values = {4, 2, 5, 2, 1};</div>
|
||||
<div class="line"><span class="lineno"> 511</span> std::vector<std::vector<int>> edges = {{1, 2}, {1, 3}, {3, 4}, {3, 5}};</div>
|
||||
<div class="line"><span class="lineno"> 512</span> std::vector<std::vector<int>> queries = {</div>
|
||||
<div class="line"><span class="lineno"> 513</span> {2, 1, 4},</div>
|
||||
<div class="line"><span class="lineno"> 514</span> {1, 3, 2},</div>
|
||||
<div class="line"><span class="lineno"> 515</span> {2, 1, 4},</div>
|
||||
<div class="line"><span class="lineno"> 516</span> };</div>
|
||||
<div class="line"><span class="lineno"> 517</span> std::vector<int> expected_result = {11, 8};</div>
|
||||
<div class="line"><span class="lineno"> 518</span> std::vector<int> code_result;</div>
|
||||
<div class="line"><span class="lineno"> 519</span> </div>
|
||||
<div class="line"><span class="lineno"> 520</span> <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">range_queries::heavy_light_decomposition::HLD<int64_t></a> hld(n);</div>
|
||||
<div class="line"><span class="lineno"> 521</span> hld.set_node_val(node_values);</div>
|
||||
<div class="line"><span class="lineno"> 522</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < n - 1; i++) {</div>
|
||||
<div class="line"><span class="lineno"> 523</span> <span class="keywordtype">int</span> u = edges[i][0], v = edges[i][1];</div>
|
||||
<div class="line"><span class="lineno"> 524</span> hld.add_edge(u - 1, v - 1);</div>
|
||||
<div class="line"><span class="lineno"> 525</span> }</div>
|
||||
<div class="line"><span class="lineno"> 526</span> hld.init();</div>
|
||||
<div class="line"><span class="lineno"> 527</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &q : queries) {</div>
|
||||
<div class="line"><span class="lineno"> 528</span> <span class="keywordtype">int</span> type = q[0];</div>
|
||||
<div class="line"><span class="lineno"> 529</span> <span class="keywordflow">if</span> (type == 1) {</div>
|
||||
<div class="line"><span class="lineno"> 530</span> <span class="keywordtype">int</span> p = q[1], x = q[2];</div>
|
||||
<div class="line"><span class="lineno"> 531</span> hld.update(p - 1, x);</div>
|
||||
<div class="line"><span class="lineno"> 532</span> } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (type == 2) {</div>
|
||||
<div class="line"><span class="lineno"> 533</span> <span class="keywordtype">int</span> a = q[1], b = q[2];</div>
|
||||
<div class="line"><span class="lineno"> 534</span> code_result.push_back(hld.query(a - 1, b - 1));</div>
|
||||
<div class="line"><span class="lineno"> 535</span> } <span class="keywordflow">else</span> {</div>
|
||||
<div class="line"><span class="lineno"> 536</span> <span class="keywordflow">continue</span>;</div>
|
||||
<div class="line"><span class="lineno"> 537</span> }</div>
|
||||
<div class="line"><span class="lineno"> 538</span> }</div>
|
||||
<div class="line"><span class="lineno"> 539</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < static_cast<int>(expected_result.size()); i++) {</div>
|
||||
<div class="line"><span class="lineno"> 540</span> assert(expected_result[i] == code_result[i]);</div>
|
||||
<div class="line"><span class="lineno"> 541</span> }</div>
|
||||
<div class="line"><span class="lineno"> 542</span> std::cout << <span class="stringliteral">"\nTest 1 passed!\n"</span>;</div>
|
||||
<div class="line"><span class="lineno"> 543</span>}</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="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00336">heavy_light_decomposition.cpp:336</a></div></div>
|
||||
<p class="definition">Definition at line <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00511">511</a> of file <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html">heavy_light_decomposition.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 511</span> {</div>
|
||||
<div class="line"><span class="lineno"> 512</span> std::cout << <span class="stringliteral">"Test 1:\n"</span>;</div>
|
||||
<div class="line"><span class="lineno"> 513</span> </div>
|
||||
<div class="line"><span class="lineno"> 514</span> <span class="comment">// Test details</span></div>
|
||||
<div class="line"><span class="lineno"> 515</span> <span class="keywordtype">int</span> n = 5;</div>
|
||||
<div class="line"><span class="lineno"> 516</span> std::vector<int64_t> node_values = {4, 2, 5, 2, 1};</div>
|
||||
<div class="line"><span class="lineno"> 517</span> std::vector<std::vector<int>> edges = {{1, 2}, {1, 3}, {3, 4}, {3, 5}};</div>
|
||||
<div class="line"><span class="lineno"> 518</span> std::vector<std::vector<int>> queries = {</div>
|
||||
<div class="line"><span class="lineno"> 519</span> {2, 1, 4},</div>
|
||||
<div class="line"><span class="lineno"> 520</span> {1, 3, 2},</div>
|
||||
<div class="line"><span class="lineno"> 521</span> {2, 1, 4},</div>
|
||||
<div class="line"><span class="lineno"> 522</span> };</div>
|
||||
<div class="line"><span class="lineno"> 523</span> std::vector<int> expected_result = {11, 8};</div>
|
||||
<div class="line"><span class="lineno"> 524</span> std::vector<int> code_result;</div>
|
||||
<div class="line"><span class="lineno"> 525</span> </div>
|
||||
<div class="line"><span class="lineno"> 526</span> <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">range_queries::heavy_light_decomposition::HLD<int64_t></a> hld(n);</div>
|
||||
<div class="line"><span class="lineno"> 527</span> hld.set_node_val(node_values);</div>
|
||||
<div class="line"><span class="lineno"> 528</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < n - 1; i++) {</div>
|
||||
<div class="line"><span class="lineno"> 529</span> <span class="keywordtype">int</span> u = edges[i][0], v = edges[i][1];</div>
|
||||
<div class="line"><span class="lineno"> 530</span> hld.add_edge(u - 1, v - 1);</div>
|
||||
<div class="line"><span class="lineno"> 531</span> }</div>
|
||||
<div class="line"><span class="lineno"> 532</span> hld.init();</div>
|
||||
<div class="line"><span class="lineno"> 533</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &q : queries) {</div>
|
||||
<div class="line"><span class="lineno"> 534</span> <span class="keywordtype">int</span> type = q[0];</div>
|
||||
<div class="line"><span class="lineno"> 535</span> <span class="keywordflow">if</span> (type == 1) {</div>
|
||||
<div class="line"><span class="lineno"> 536</span> <span class="keywordtype">int</span> p = q[1], x = q[2];</div>
|
||||
<div class="line"><span class="lineno"> 537</span> hld.update(p - 1, x);</div>
|
||||
<div class="line"><span class="lineno"> 538</span> } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (type == 2) {</div>
|
||||
<div class="line"><span class="lineno"> 539</span> <span class="keywordtype">int</span> a = q[1], b = q[2];</div>
|
||||
<div class="line"><span class="lineno"> 540</span> code_result.push_back(hld.query(a - 1, b - 1));</div>
|
||||
<div class="line"><span class="lineno"> 541</span> } <span class="keywordflow">else</span> {</div>
|
||||
<div class="line"><span class="lineno"> 542</span> <span class="keywordflow">continue</span>;</div>
|
||||
<div class="line"><span class="lineno"> 543</span> }</div>
|
||||
<div class="line"><span class="lineno"> 544</span> }</div>
|
||||
<div class="line"><span class="lineno"> 545</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < static_cast<int>(expected_result.size()); i++) {</div>
|
||||
<div class="line"><span class="lineno"> 546</span> assert(expected_result[i] == code_result[i]);</div>
|
||||
<div class="line"><span class="lineno"> 547</span> }</div>
|
||||
<div class="line"><span class="lineno"> 548</span> std::cout << <span class="stringliteral">"\nTest 1 passed!\n"</span>;</div>
|
||||
<div class="line"><span class="lineno"> 549</span>}</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="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00342">heavy_light_decomposition.cpp:342</a></div></div>
|
||||
</div><!-- fragment -->
|
||||
</div>
|
||||
</div>
|
||||
@@ -302,45 +302,46 @@ Functions</h2></td></tr>
|
||||
</div><div class="memdoc">
|
||||
<p>Second test implementations </p><dl class="section return"><dt>Returns</dt><dd>void </dd></dl>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00549">549</a> of file <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html">heavy_light_decomposition.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 549</span> {</div>
|
||||
<div class="line"><span class="lineno"> 550</span> std::cout << <span class="stringliteral">"Test 2:\n"</span>;</div>
|
||||
<div class="line"><span class="lineno"> 551</span> </div>
|
||||
<div class="line"><span class="lineno"> 552</span> <span class="comment">// Test details (Bamboo)</span></div>
|
||||
<div class="line"><span class="lineno"> 553</span> <span class="keywordtype">int</span> n = 10;</div>
|
||||
<div class="line"><span class="lineno"> 554</span> std::vector<int64_t> node_values = {1, 8, 6, 8, 6, 2, 9, 2, 3, 2};</div>
|
||||
<div class="line"><span class="lineno"> 555</span> std::vector<std::vector<int>> edges = {</div>
|
||||
<div class="line"><span class="lineno"> 556</span> {10, 5}, {6, 2}, {10, 7}, {5, 2}, {3, 9}, {8, 3}, {1, 4}, {6, 4}, {8, 7}};</div>
|
||||
<div class="line"><span class="lineno"> 557</span> std::vector<std::vector<int>> queries = {</div>
|
||||
<div class="line"><span class="lineno"> 558</span> {2, 1, 10}, {2, 1, 6}, {1, 3, 4}, {2, 1, 9}, {1, 5, 3},</div>
|
||||
<div class="line"><span class="lineno"> 559</span> {1, 7, 8}, {2, 1, 4}, {2, 1, 8}, {1, 1, 4}, {1, 2, 7}};</div>
|
||||
<div class="line"><span class="lineno"> 560</span> std::vector<int> expected_result = {27, 11, 45, 9, 34};</div>
|
||||
<div class="line"><span class="lineno"> 561</span> std::vector<int> code_result;</div>
|
||||
<div class="line"><span class="lineno"> 562</span> </div>
|
||||
<div class="line"><span class="lineno"> 563</span> <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">range_queries::heavy_light_decomposition::HLD<int64_t></a> hld(n);</div>
|
||||
<div class="line"><span class="lineno"> 564</span> hld.set_node_val(node_values);</div>
|
||||
<div class="line"><span class="lineno"> 565</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < n - 1; i++) {</div>
|
||||
<div class="line"><span class="lineno"> 566</span> <span class="keywordtype">int</span> u = edges[i][0], v = edges[i][1];</div>
|
||||
<div class="line"><span class="lineno"> 567</span> hld.add_edge(u - 1, v - 1);</div>
|
||||
<div class="line"><span class="lineno"> 568</span> }</div>
|
||||
<div class="line"><span class="lineno"> 569</span> hld.init();</div>
|
||||
<div class="line"><span class="lineno"> 570</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &q : queries) {</div>
|
||||
<div class="line"><span class="lineno"> 571</span> <span class="keywordtype">int</span> type = q[0];</div>
|
||||
<div class="line"><span class="lineno"> 572</span> <span class="keywordflow">if</span> (type == 1) {</div>
|
||||
<div class="line"><span class="lineno"> 573</span> <span class="keywordtype">int</span> p = q[1], x = q[2];</div>
|
||||
<div class="line"><span class="lineno"> 574</span> hld.update(p - 1, x);</div>
|
||||
<div class="line"><span class="lineno"> 575</span> } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (type == 2) {</div>
|
||||
<div class="line"><span class="lineno"> 576</span> <span class="keywordtype">int</span> a = q[1], b = q[2];</div>
|
||||
<div class="line"><span class="lineno"> 577</span> code_result.push_back(hld.query(a - 1, b - 1));</div>
|
||||
<div class="line"><span class="lineno"> 578</span> } <span class="keywordflow">else</span> {</div>
|
||||
<div class="line"><span class="lineno"> 579</span> <span class="keywordflow">continue</span>;</div>
|
||||
<div class="line"><span class="lineno"> 580</span> }</div>
|
||||
<div class="line"><span class="lineno"> 581</span> }</div>
|
||||
<div class="line"><span class="lineno"> 582</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < static_cast<int>(expected_result.size()); i++) {</div>
|
||||
<div class="line"><span class="lineno"> 583</span> assert(expected_result[i] == code_result[i]);</div>
|
||||
<div class="line"><span class="lineno"> 584</span> }</div>
|
||||
<div class="line"><span class="lineno"> 585</span> std::cout << <span class="stringliteral">"\nTest2 passed!\n"</span>;</div>
|
||||
<div class="line"><span class="lineno"> 586</span>}</div>
|
||||
<p class="definition">Definition at line <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00555">555</a> of file <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html">heavy_light_decomposition.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 555</span> {</div>
|
||||
<div class="line"><span class="lineno"> 556</span> std::cout << <span class="stringliteral">"Test 2:\n"</span>;</div>
|
||||
<div class="line"><span class="lineno"> 557</span> </div>
|
||||
<div class="line"><span class="lineno"> 558</span> <span class="comment">// Test details (Bamboo)</span></div>
|
||||
<div class="line"><span class="lineno"> 559</span> <span class="keywordtype">int</span> n = 10;</div>
|
||||
<div class="line"><span class="lineno"> 560</span> std::vector<int64_t> node_values = {1, 8, 6, 8, 6, 2, 9, 2, 3, 2};</div>
|
||||
<div class="line"><span class="lineno"> 561</span> std::vector<std::vector<int>> edges = {{10, 5}, {6, 2}, {10, 7},</div>
|
||||
<div class="line"><span class="lineno"> 562</span> {5, 2}, {3, 9}, {8, 3},</div>
|
||||
<div class="line"><span class="lineno"> 563</span> {1, 4}, {6, 4}, {8, 7}};</div>
|
||||
<div class="line"><span class="lineno"> 564</span> std::vector<std::vector<int>> queries = {</div>
|
||||
<div class="line"><span class="lineno"> 565</span> {2, 1, 10}, {2, 1, 6}, {1, 3, 4}, {2, 1, 9}, {1, 5, 3},</div>
|
||||
<div class="line"><span class="lineno"> 566</span> {1, 7, 8}, {2, 1, 4}, {2, 1, 8}, {1, 1, 4}, {1, 2, 7}};</div>
|
||||
<div class="line"><span class="lineno"> 567</span> std::vector<int> expected_result = {27, 11, 45, 9, 34};</div>
|
||||
<div class="line"><span class="lineno"> 568</span> std::vector<int> code_result;</div>
|
||||
<div class="line"><span class="lineno"> 569</span> </div>
|
||||
<div class="line"><span class="lineno"> 570</span> <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">range_queries::heavy_light_decomposition::HLD<int64_t></a> hld(n);</div>
|
||||
<div class="line"><span class="lineno"> 571</span> hld.set_node_val(node_values);</div>
|
||||
<div class="line"><span class="lineno"> 572</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < n - 1; i++) {</div>
|
||||
<div class="line"><span class="lineno"> 573</span> <span class="keywordtype">int</span> u = edges[i][0], v = edges[i][1];</div>
|
||||
<div class="line"><span class="lineno"> 574</span> hld.add_edge(u - 1, v - 1);</div>
|
||||
<div class="line"><span class="lineno"> 575</span> }</div>
|
||||
<div class="line"><span class="lineno"> 576</span> hld.init();</div>
|
||||
<div class="line"><span class="lineno"> 577</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &q : queries) {</div>
|
||||
<div class="line"><span class="lineno"> 578</span> <span class="keywordtype">int</span> type = q[0];</div>
|
||||
<div class="line"><span class="lineno"> 579</span> <span class="keywordflow">if</span> (type == 1) {</div>
|
||||
<div class="line"><span class="lineno"> 580</span> <span class="keywordtype">int</span> p = q[1], x = q[2];</div>
|
||||
<div class="line"><span class="lineno"> 581</span> hld.update(p - 1, x);</div>
|
||||
<div class="line"><span class="lineno"> 582</span> } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (type == 2) {</div>
|
||||
<div class="line"><span class="lineno"> 583</span> <span class="keywordtype">int</span> a = q[1], b = q[2];</div>
|
||||
<div class="line"><span class="lineno"> 584</span> code_result.push_back(hld.query(a - 1, b - 1));</div>
|
||||
<div class="line"><span class="lineno"> 585</span> } <span class="keywordflow">else</span> {</div>
|
||||
<div class="line"><span class="lineno"> 586</span> <span class="keywordflow">continue</span>;</div>
|
||||
<div class="line"><span class="lineno"> 587</span> }</div>
|
||||
<div class="line"><span class="lineno"> 588</span> }</div>
|
||||
<div class="line"><span class="lineno"> 589</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < static_cast<int>(expected_result.size()); i++) {</div>
|
||||
<div class="line"><span class="lineno"> 590</span> assert(expected_result[i] == code_result[i]);</div>
|
||||
<div class="line"><span class="lineno"> 591</span> }</div>
|
||||
<div class="line"><span class="lineno"> 592</span> std::cout << <span class="stringliteral">"\nTest2 passed!\n"</span>;</div>
|
||||
<div class="line"><span class="lineno"> 593</span>}</div>
|
||||
</div><!-- fragment -->
|
||||
</div>
|
||||
</div>
|
||||
@@ -368,45 +369,45 @@ Functions</h2></td></tr>
|
||||
</div><div class="memdoc">
|
||||
<p>Third test implementations </p><dl class="section return"><dt>Returns</dt><dd>void </dd></dl>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00592">592</a> of file <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html">heavy_light_decomposition.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 592</span> {</div>
|
||||
<div class="line"><span class="lineno"> 593</span> std::cout << <span class="stringliteral">"Test 3:\n"</span>;</div>
|
||||
<div class="line"><span class="lineno"> 594</span> </div>
|
||||
<div class="line"><span class="lineno"> 595</span> <span class="comment">// Test details</span></div>
|
||||
<div class="line"><span class="lineno"> 596</span> <span class="keywordtype">int</span> n = 8;</div>
|
||||
<div class="line"><span class="lineno"> 597</span> std::vector<int64_t> node_values = {1, 8, 6, 8, 6, 2, 9, 2};</div>
|
||||
<div class="line"><span class="lineno"> 598</span> std::vector<std::vector<int>> edges = {{1, 2}, {2, 3}, {3, 4}, {1, 5},</div>
|
||||
<div class="line"><span class="lineno"> 599</span> {6, 3}, {7, 5}, {8, 7}};</div>
|
||||
<div class="line"><span class="lineno"> 600</span> std::vector<std::vector<int>> queries = {</div>
|
||||
<div class="line"><span class="lineno"> 601</span> {2, 6, 8}, {2, 3, 6}, {1, 3, 4}, {2, 7, 1}, {1, 5, 3},</div>
|
||||
<div class="line"><span class="lineno"> 602</span> {1, 7, 8}, {2, 6, 4}, {2, 7, 8}, {1, 1, 4}, {1, 2, 7}};</div>
|
||||
<div class="line"><span class="lineno"> 603</span> std::vector<int> expected_result = {34, 8, 16, 14, 10};</div>
|
||||
<div class="line"><span class="lineno"> 604</span> std::vector<int> code_result;</div>
|
||||
<div class="line"><span class="lineno"> 605</span> </div>
|
||||
<div class="line"><span class="lineno"> 606</span> <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">range_queries::heavy_light_decomposition::HLD<int64_t></a> hld(n);</div>
|
||||
<div class="line"><span class="lineno"> 607</span> hld.set_node_val(node_values);</div>
|
||||
<div class="line"><span class="lineno"> 608</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < n - 1; i++) {</div>
|
||||
<div class="line"><span class="lineno"> 609</span> <span class="keywordtype">int</span> u = edges[i][0], v = edges[i][1];</div>
|
||||
<div class="line"><span class="lineno"> 610</span> hld.add_edge(u - 1, v - 1);</div>
|
||||
<div class="line"><span class="lineno"> 611</span> }</div>
|
||||
<div class="line"><span class="lineno"> 612</span> hld.init();</div>
|
||||
<div class="line"><span class="lineno"> 613</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &q : queries) {</div>
|
||||
<div class="line"><span class="lineno"> 614</span> <span class="keywordtype">int</span> type = q[0];</div>
|
||||
<div class="line"><span class="lineno"> 615</span> <span class="keywordflow">if</span> (type == 1) {</div>
|
||||
<div class="line"><span class="lineno"> 616</span> <span class="keywordtype">int</span> p = q[1], x = q[2];</div>
|
||||
<div class="line"><span class="lineno"> 617</span> hld.update(p - 1, x);</div>
|
||||
<div class="line"><span class="lineno"> 618</span> } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (type == 2) {</div>
|
||||
<div class="line"><span class="lineno"> 619</span> <span class="keywordtype">int</span> a = q[1], b = q[2];</div>
|
||||
<div class="line"><span class="lineno"> 620</span> code_result.push_back(hld.query(a - 1, b - 1));</div>
|
||||
<div class="line"><span class="lineno"> 621</span> } <span class="keywordflow">else</span> {</div>
|
||||
<div class="line"><span class="lineno"> 622</span> <span class="keywordflow">continue</span>;</div>
|
||||
<div class="line"><span class="lineno"> 623</span> }</div>
|
||||
<div class="line"><span class="lineno"> 624</span> }</div>
|
||||
<div class="line"><span class="lineno"> 625</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < static_cast<int>(expected_result.size()); i++) {</div>
|
||||
<div class="line"><span class="lineno"> 626</span> assert(expected_result[i] == code_result[i]);</div>
|
||||
<div class="line"><span class="lineno"> 627</span> }</div>
|
||||
<div class="line"><span class="lineno"> 628</span> std::cout << <span class="stringliteral">"\nTest3 passed!\n"</span>;</div>
|
||||
<div class="line"><span class="lineno"> 629</span>}</div>
|
||||
<p class="definition">Definition at line <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00599">599</a> of file <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html">heavy_light_decomposition.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 599</span> {</div>
|
||||
<div class="line"><span class="lineno"> 600</span> std::cout << <span class="stringliteral">"Test 3:\n"</span>;</div>
|
||||
<div class="line"><span class="lineno"> 601</span> </div>
|
||||
<div class="line"><span class="lineno"> 602</span> <span class="comment">// Test details</span></div>
|
||||
<div class="line"><span class="lineno"> 603</span> <span class="keywordtype">int</span> n = 8;</div>
|
||||
<div class="line"><span class="lineno"> 604</span> std::vector<int64_t> node_values = {1, 8, 6, 8, 6, 2, 9, 2};</div>
|
||||
<div class="line"><span class="lineno"> 605</span> std::vector<std::vector<int>> edges = {{1, 2}, {2, 3}, {3, 4}, {1, 5},</div>
|
||||
<div class="line"><span class="lineno"> 606</span> {6, 3}, {7, 5}, {8, 7}};</div>
|
||||
<div class="line"><span class="lineno"> 607</span> std::vector<std::vector<int>> queries = {</div>
|
||||
<div class="line"><span class="lineno"> 608</span> {2, 6, 8}, {2, 3, 6}, {1, 3, 4}, {2, 7, 1}, {1, 5, 3},</div>
|
||||
<div class="line"><span class="lineno"> 609</span> {1, 7, 8}, {2, 6, 4}, {2, 7, 8}, {1, 1, 4}, {1, 2, 7}};</div>
|
||||
<div class="line"><span class="lineno"> 610</span> std::vector<int> expected_result = {34, 8, 16, 14, 10};</div>
|
||||
<div class="line"><span class="lineno"> 611</span> std::vector<int> code_result;</div>
|
||||
<div class="line"><span class="lineno"> 612</span> </div>
|
||||
<div class="line"><span class="lineno"> 613</span> <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">range_queries::heavy_light_decomposition::HLD<int64_t></a> hld(n);</div>
|
||||
<div class="line"><span class="lineno"> 614</span> hld.set_node_val(node_values);</div>
|
||||
<div class="line"><span class="lineno"> 615</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < n - 1; i++) {</div>
|
||||
<div class="line"><span class="lineno"> 616</span> <span class="keywordtype">int</span> u = edges[i][0], v = edges[i][1];</div>
|
||||
<div class="line"><span class="lineno"> 617</span> hld.add_edge(u - 1, v - 1);</div>
|
||||
<div class="line"><span class="lineno"> 618</span> }</div>
|
||||
<div class="line"><span class="lineno"> 619</span> hld.init();</div>
|
||||
<div class="line"><span class="lineno"> 620</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &q : queries) {</div>
|
||||
<div class="line"><span class="lineno"> 621</span> <span class="keywordtype">int</span> type = q[0];</div>
|
||||
<div class="line"><span class="lineno"> 622</span> <span class="keywordflow">if</span> (type == 1) {</div>
|
||||
<div class="line"><span class="lineno"> 623</span> <span class="keywordtype">int</span> p = q[1], x = q[2];</div>
|
||||
<div class="line"><span class="lineno"> 624</span> hld.update(p - 1, x);</div>
|
||||
<div class="line"><span class="lineno"> 625</span> } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (type == 2) {</div>
|
||||
<div class="line"><span class="lineno"> 626</span> <span class="keywordtype">int</span> a = q[1], b = q[2];</div>
|
||||
<div class="line"><span class="lineno"> 627</span> code_result.push_back(hld.query(a - 1, b - 1));</div>
|
||||
<div class="line"><span class="lineno"> 628</span> } <span class="keywordflow">else</span> {</div>
|
||||
<div class="line"><span class="lineno"> 629</span> <span class="keywordflow">continue</span>;</div>
|
||||
<div class="line"><span class="lineno"> 630</span> }</div>
|
||||
<div class="line"><span class="lineno"> 631</span> }</div>
|
||||
<div class="line"><span class="lineno"> 632</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < static_cast<int>(expected_result.size()); i++) {</div>
|
||||
<div class="line"><span class="lineno"> 633</span> assert(expected_result[i] == code_result[i]);</div>
|
||||
<div class="line"><span class="lineno"> 634</span> }</div>
|
||||
<div class="line"><span class="lineno"> 635</span> std::cout << <span class="stringliteral">"\nTest3 passed!\n"</span>;</div>
|
||||
<div class="line"><span class="lineno"> 636</span>}</div>
|
||||
</div><!-- fragment -->
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -130,488 +130,494 @@ $(function(){initNavTree('d2/de9/heavy__light__decomposition_8cpp_source.html','
|
||||
<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> <<span class="keyword">typename</span> X> <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>
|
||||
<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span> std::vector<std::list<int>></div>
|
||||
<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"><a class="line" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#ab1aeaefa1bd97b867c652ba916fbdb43"> 83</a></span> <a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#ab1aeaefa1bd97b867c652ba916fbdb43">t_adj</a>; </div>
|
||||
<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"><a class="line" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#ae4630fa70a80a1dc65a875488a67178a"> 84</a></span> <span class="keyword">const</span> <span class="keywordtype">int</span> <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="l00085" name="l00085"></a><span class="lineno"><a class="line" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#ab2ab020f798d00be2613ecf63074b7c1"> 85</a></span> <a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#ab2ab020f798d00be2613ecf63074b7c1">t_maxlift</a>; </div>
|
||||
<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span> std::vector<std::vector<int>></div>
|
||||
<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"><a class="line" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#a350157a5fb79f76fceae33fc84171203"> 87</a></span> <a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#a350157a5fb79f76fceae33fc84171203">t_par</a>; </div>
|
||||
<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"><a class="line" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#a0efd0b9c564092f443ca97030d866ef1"> 88</a></span> std::vector<int> <a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#a0efd0b9c564092f443ca97030d866ef1">t_depth</a>, </div>
|
||||
<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"><a class="line" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#ada1494fccbc7f1f07b2f9be9f7e07ad5"> 89</a></span> <a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#ada1494fccbc7f1f07b2f9be9f7e07ad5">t_size</a>; </div>
|
||||
<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<X> <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> <<span class="keyword">typename</span> T> <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> &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>
|
||||
<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span> <span class="keywordflow">if</span> (v ^ p) {</div>
|
||||
<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span> <a class="code hl_function" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#aa339c31ec74cd86a4842a8b09653d460">dfs_size</a>(v, u);</div>
|
||||
<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span> <a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#ada1494fccbc7f1f07b2f9be9f7e07ad5">t_size</a>[u] += <a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#ada1494fccbc7f1f07b2f9be9f7e07ad5">t_size</a>[v];</div>
|
||||
<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span> }</div>
|
||||
<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 class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span><span class="keyword">template</span> <<span class="keyword">typename</span> X></div>
|
||||
<div class="foldopen" id="foldopen00079" data-start="{" data-end="};">
|
||||
<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"><a class="line" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html"> 79</a></span><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="l00080" name="l00080"></a><span class="lineno"> 80</span> <span class="comment">//</span></div>
|
||||
<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span> </div>
|
||||
<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span> <span class="keyword">private</span>:</div>
|
||||
<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span> std::vector<std::list<int>></div>
|
||||
<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"><a class="line" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#ab1aeaefa1bd97b867c652ba916fbdb43"> 84</a></span> <a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#ab1aeaefa1bd97b867c652ba916fbdb43">t_adj</a>; </div>
|
||||
<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"><a class="line" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#ae4630fa70a80a1dc65a875488a67178a"> 85</a></span> <span class="keyword">const</span> <span class="keywordtype">int</span> <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="l00086" name="l00086"></a><span class="lineno"><a class="line" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#ab2ab020f798d00be2613ecf63074b7c1"> 86</a></span> <a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#ab2ab020f798d00be2613ecf63074b7c1">t_maxlift</a>; </div>
|
||||
<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span> std::vector<std::vector<int>></div>
|
||||
<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"><a class="line" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#a350157a5fb79f76fceae33fc84171203"> 88</a></span> <a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#a350157a5fb79f76fceae33fc84171203">t_par</a>; </div>
|
||||
<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"><a class="line" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#a0efd0b9c564092f443ca97030d866ef1"> 89</a></span> std::vector<int> <a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#a0efd0b9c564092f443ca97030d866ef1">t_depth</a>, </div>
|
||||
<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"><a class="line" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#ada1494fccbc7f1f07b2f9be9f7e07ad5"> 90</a></span> <a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#ada1494fccbc7f1f07b2f9be9f7e07ad5">t_size</a>; </div>
|
||||
<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span> </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#aa6c37e840355b9fb2105181c578694e8"> 92</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="l00093" name="l00093"></a><span class="lineno"><a class="line" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#a135b7952593c9b1aae38fcaf1cc1abf7"> 93</a></span> std::vector<X> <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="l00094" name="l00094"></a><span class="lineno"> 94</span> <span class="keyword">template</span> <<span class="keyword">typename</span> T></div>
|
||||
<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> <span class="keyword">friend</span> <span class="keyword">class </span>HLD;</div>
|
||||
<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span></div>
|
||||
<div class="foldopen" id="foldopen00103" data-start="{" data-end="}">
|
||||
<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"><a class="line" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#aa339c31ec74cd86a4842a8b09653d460"> 103</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="l00104" name="l00104"></a><span class="lineno"> 104</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keywordtype">int</span> &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>
|
||||
<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span> <span class="keywordflow">if</span> (v ^ p) {</div>
|
||||
<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span> <a class="code hl_function" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#aa339c31ec74cd86a4842a8b09653d460">dfs_size</a>(v, u);</div>
|
||||
<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span> <a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#ada1494fccbc7f1f07b2f9be9f7e07ad5">t_size</a>[u] += <a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#ada1494fccbc7f1f07b2f9be9f7e07ad5">t_size</a>[v];</div>
|
||||
<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span> }</div>
|
||||
<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span> }</div>
|
||||
<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span> }</div>
|
||||
</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>
|
||||
<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span> <span class="keywordflow">if</span> (p != -1) {</div>
|
||||
<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span> <a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#a0efd0b9c564092f443ca97030d866ef1">t_depth</a>[u] = 1 + <a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#a0efd0b9c564092f443ca97030d866ef1">t_depth</a>[p];</div>
|
||||
<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span> }</div>
|
||||
<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> k = 1; k < <a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#ab2ab020f798d00be2613ecf63074b7c1">t_maxlift</a>; k++) {</div>
|
||||
<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#a350157a5fb79f76fceae33fc84171203">t_par</a>[u][k - 1] != -1) {</div>
|
||||
<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span> <a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#a350157a5fb79f76fceae33fc84171203">t_par</a>[u][k] = <a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#a350157a5fb79f76fceae33fc84171203">t_par</a>[<a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#a350157a5fb79f76fceae33fc84171203">t_par</a>[u][k - 1]][k - 1];</div>
|
||||
<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span> }</div>
|
||||
<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span> }</div>
|
||||
<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span> </div>
|
||||
<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keywordtype">int</span> &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>
|
||||
<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span> <span class="keywordflow">if</span> (v ^ p) {</div>
|
||||
<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span> <a class="code hl_function" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#ae8de7aefcb6635d3dacdd174cd4890c4">dfs_lca</a>(v, u);</div>
|
||||
<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span> }</div>
|
||||
<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span> }</div>
|
||||
<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span> }</div>
|
||||
<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span></div>
|
||||
<div class="foldopen" id="foldopen00118" data-start="{" data-end="}">
|
||||
<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"><a class="line" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#ae8de7aefcb6635d3dacdd174cd4890c4"> 118</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="l00119" name="l00119"></a><span class="lineno"> 119</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>
|
||||
<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span> <span class="keywordflow">if</span> (p != -1) {</div>
|
||||
<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span> <a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#a0efd0b9c564092f443ca97030d866ef1">t_depth</a>[u] = 1 + <a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#a0efd0b9c564092f443ca97030d866ef1">t_depth</a>[p];</div>
|
||||
<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span> }</div>
|
||||
<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> k = 1; k < <a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#ab2ab020f798d00be2613ecf63074b7c1">t_maxlift</a>; k++) {</div>
|
||||
<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#a350157a5fb79f76fceae33fc84171203">t_par</a>[u][k - 1] != -1) {</div>
|
||||
<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span> <a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#a350157a5fb79f76fceae33fc84171203">t_par</a>[u][k] = <a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#a350157a5fb79f76fceae33fc84171203">t_par</a>[<a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#a350157a5fb79f76fceae33fc84171203">t_par</a>[u][k - 1]][k - 1];</div>
|
||||
<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span> }</div>
|
||||
<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span> }</div>
|
||||
<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span> </div>
|
||||
<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keywordtype">int</span> &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>
|
||||
<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span> <span class="keywordflow">if</span> (v ^ p) {</div>
|
||||
<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span> <a class="code hl_function" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#ae8de7aefcb6635d3dacdd174cd4890c4">dfs_lca</a>(v, u);</div>
|
||||
<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span> }</div>
|
||||
<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span> }</div>
|
||||
<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span> }</div>
|
||||
</div>
|
||||
<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span> </div>
|
||||
<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span><span class="keyword">public</span>:</div>
|
||||
<div class="foldopen" id="foldopen00140" data-start="{" data-end="}">
|
||||
<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"><a class="line" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#a835fb2bbb27307b8cacad9b287968bc1"> 140</a></span> <span class="keyword">explicit</span> <a class="code hl_function" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#a835fb2bbb27307b8cacad9b287968bc1">Tree</a>(<span class="keywordtype">int</span> nodes)</div>
|
||||
<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span> : <a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#ae4630fa70a80a1dc65a875488a67178a">t_nodes</a>(nodes), <a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#ab2ab020f798d00be2613ecf63074b7c1">t_maxlift</a>(static_cast<int>(floor(log2(nodes))) + 1) {</div>
|
||||
<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span> <span class="comment">/* Initialize and resize all the vectors */</span></div>
|
||||
<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span> <a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#aa6c37e840355b9fb2105181c578694e8">t_root</a> = 0; <span class="comment">/* Default */</span></div>
|
||||
<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span> <a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#ab1aeaefa1bd97b867c652ba916fbdb43">t_adj</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="l00145" name="l00145"></a><span class="lineno"> 145</span> <a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#a350157a5fb79f76fceae33fc84171203">t_par</a>.assign(<a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#ae4630fa70a80a1dc65a875488a67178a">t_nodes</a>, std::vector<int>(<a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#ab2ab020f798d00be2613ecf63074b7c1">t_maxlift</a>, -1));</div>
|
||||
<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span> <a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#a0efd0b9c564092f443ca97030d866ef1">t_depth</a>.assign(<a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#ae4630fa70a80a1dc65a875488a67178a">t_nodes</a>, 0);</div>
|
||||
<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span> <a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#ada1494fccbc7f1f07b2f9be9f7e07ad5">t_size</a>.assign(<a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#ae4630fa70a80a1dc65a875488a67178a">t_nodes</a>, 1);</div>
|
||||
<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 class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span> </div>
|
||||
<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span> <span class="keyword">public</span>:</div>
|
||||
<div class="foldopen" id="foldopen00142" data-start="{" data-end="}">
|
||||
<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"><a class="line" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#a835fb2bbb27307b8cacad9b287968bc1"> 142</a></span> <span class="keyword">explicit</span> <a class="code hl_function" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#a835fb2bbb27307b8cacad9b287968bc1">Tree</a>(<span class="keywordtype">int</span> nodes)</div>
|
||||
<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span> : <a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#ae4630fa70a80a1dc65a875488a67178a">t_nodes</a>(nodes), <a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#ab2ab020f798d00be2613ecf63074b7c1">t_maxlift</a>(static_cast<int>(floor(log2(nodes))) + 1) {</div>
|
||||
<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span> <span class="comment">/* Initialize and resize all the vectors */</span></div>
|
||||
<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span> <a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#aa6c37e840355b9fb2105181c578694e8">t_root</a> = 0; <span class="comment">/* Default */</span></div>
|
||||
<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span> <a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#ab1aeaefa1bd97b867c652ba916fbdb43">t_adj</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="l00147" name="l00147"></a><span class="lineno"> 147</span> <a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#a350157a5fb79f76fceae33fc84171203">t_par</a>.assign(<a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#ae4630fa70a80a1dc65a875488a67178a">t_nodes</a>, std::vector<int>(<a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#ab2ab020f798d00be2613ecf63074b7c1">t_maxlift</a>, -1));</div>
|
||||
<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#a0efd0b9c564092f443ca97030d866ef1">t_depth</a>.assign(<a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#ae4630fa70a80a1dc65a875488a67178a">t_nodes</a>, 0);</div>
|
||||
<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span> <a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#ada1494fccbc7f1f07b2f9be9f7e07ad5">t_size</a>.assign(<a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#ae4630fa70a80a1dc65a875488a67178a">t_nodes</a>, 1);</div>
|
||||
<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</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="l00151" name="l00151"></a><span class="lineno"> 151</span> }</div>
|
||||
</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 class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span></div>
|
||||
<div class="foldopen" id="foldopen00159" data-start="{" data-end="}">
|
||||
<div class="line"><a id="l00159" name="l00159"></a><span class="lineno"><a class="line" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#a79ab4601c4a95c0902ac04e779e5f54d"> 159</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="l00160" name="l00160"></a><span class="lineno"> 160</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="l00161" name="l00161"></a><span class="lineno"> 161</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="l00162" name="l00162"></a><span class="lineno"> 162</span> }</div>
|
||||
</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="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<X> &node_val) {</div>
|
||||
<div class="line"><a id="l00176" name="l00176"></a><span class="lineno"> 176</span> assert(<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></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 class="line"><a id="l00163" name="l00163"></a><span class="lineno"> 163</span></div>
|
||||
<div class="line"><a id="l00169" name="l00169"></a><span class="lineno"><a class="line" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#ab916d554afa8ca5230b4310c2c69fae0"> 169</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="l00170" name="l00170"></a><span class="lineno"> 170</span></div>
|
||||
<div class="foldopen" id="foldopen00177" data-start="{" data-end="}">
|
||||
<div class="line"><a id="l00177" name="l00177"></a><span class="lineno"><a class="line" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#a04cd96efaba147b19d3afc769b90ff70"> 177</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<X> &node_val) {</div>
|
||||
<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"> 178</span> assert(<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></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="l00179" name="l00179"></a><span class="lineno"> 179</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="l00180" name="l00180"></a><span class="lineno"> 180</span> }</div>
|
||||
</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> > 0);</div>
|
||||
<div class="line"><a id="l00188" name="l00188"></a><span class="lineno"> 188</span> <a class="code hl_function" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#aa339c31ec74cd86a4842a8b09653d460">dfs_size</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="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 class="line"><a id="l00181" name="l00181"></a><span class="lineno"> 181</span></div>
|
||||
<div class="foldopen" id="foldopen00188" data-start="{" data-end="}">
|
||||
<div class="line"><a id="l00188" name="l00188"></a><span class="lineno"><a class="line" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#ad22d760a5a33545a70e7ea5e1786c8dc"> 188</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="l00189" name="l00189"></a><span class="lineno"> 189</span> assert(<a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#ae4630fa70a80a1dc65a875488a67178a">t_nodes</a> > 0);</div>
|
||||
<div class="line"><a id="l00190" name="l00190"></a><span class="lineno"> 190</span> <a class="code hl_function" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#aa339c31ec74cd86a4842a8b09653d460">dfs_size</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="l00191" name="l00191"></a><span class="lineno"> 191</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="l00192" name="l00192"></a><span class="lineno"> 192</span> }</div>
|
||||
</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 < <a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#ab2ab020f798d00be2613ecf63074b7c1">t_maxlift</a>; k++) {</div>
|
||||
<div class="line"><a id="l00202" name="l00202"></a><span class="lineno"> 202</span> <span class="keywordflow">if</span> (*p == -1) {</div>
|
||||
<div class="line"><a id="l00203" name="l00203"></a><span class="lineno"> 203</span> <span class="keywordflow">return</span>;</div>
|
||||
<div class="line"><a id="l00204" name="l00204"></a><span class="lineno"> 204</span> }</div>
|
||||
<div class="line"><a id="l00205" name="l00205"></a><span class="lineno"> 205</span> <span class="keywordflow">if</span> (dist & 1) {</div>
|
||||
<div class="line"><a id="l00206" name="l00206"></a><span class="lineno"> 206</span> *p = <a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#a350157a5fb79f76fceae33fc84171203">t_par</a>[*p][k];</div>
|
||||
<div class="line"><a id="l00207" name="l00207"></a><span class="lineno"> 207</span> }</div>
|
||||
<div class="line"><a id="l00208" name="l00208"></a><span class="lineno"> 208</span> dist >>= 1;</div>
|
||||
<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 class="line"><a id="l00193" name="l00193"></a><span class="lineno"> 193</span></div>
|
||||
<div class="foldopen" id="foldopen00202" data-start="{" data-end="}">
|
||||
<div class="line"><a id="l00202" name="l00202"></a><span class="lineno"><a class="line" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#ac7761255f2ba06b398b9aae5e4dce5f3"> 202</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="l00203" name="l00203"></a><span class="lineno"> 203</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> k = 0; k < <a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#ab2ab020f798d00be2613ecf63074b7c1">t_maxlift</a>; k++) {</div>
|
||||
<div class="line"><a id="l00204" name="l00204"></a><span class="lineno"> 204</span> <span class="keywordflow">if</span> (*p == -1) {</div>
|
||||
<div class="line"><a id="l00205" name="l00205"></a><span class="lineno"> 205</span> <span class="keywordflow">return</span>;</div>
|
||||
<div class="line"><a id="l00206" name="l00206"></a><span class="lineno"> 206</span> }</div>
|
||||
<div class="line"><a id="l00207" name="l00207"></a><span class="lineno"> 207</span> <span class="keywordflow">if</span> (dist & 1) {</div>
|
||||
<div class="line"><a id="l00208" name="l00208"></a><span class="lineno"> 208</span> *p = <a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#a350157a5fb79f76fceae33fc84171203">t_par</a>[*p][k];</div>
|
||||
<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> dist >>= 1;</div>
|
||||
<div class="line"><a id="l00211" name="l00211"></a><span class="lineno"> 211</span> }</div>
|
||||
<div class="line"><a id="l00212" name="l00212"></a><span class="lineno"> 212</span> }</div>
|
||||
</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> &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>(&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 class="line"><a id="l00213" name="l00213"></a><span class="lineno"> 213</span></div>
|
||||
<div class="foldopen" id="foldopen00220" data-start="{" data-end="}">
|
||||
<div class="line"><a id="l00220" name="l00220"></a><span class="lineno"><a class="line" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#a8f7bca1746d40f21ad832fcea59aa6c6"> 220</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> &dist) {</div>
|
||||
<div class="line"><a id="l00221" name="l00221"></a><span class="lineno"> 221</span> <a class="code hl_function" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#ac7761255f2ba06b398b9aae5e4dce5f3">lift</a>(&p, dist);</div>
|
||||
<div class="line"><a id="l00222" name="l00222"></a><span class="lineno"> 222</span> <span class="keywordflow">return</span> p;</div>
|
||||
<div class="line"><a id="l00223" name="l00223"></a><span class="lineno"> 223</span> }</div>
|
||||
</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 >= 0 and b >= 0 and a < <a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#ae4630fa70a80a1dc65a875488a67178a">t_nodes</a> and b < <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="l00231" name="l00231"></a><span class="lineno"> 231</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">t_depth</a>[a] > <a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#a0efd0b9c564092f443ca97030d866ef1">t_depth</a>[b]) {</div>
|
||||
<div class="line"><a id="l00232" name="l00232"></a><span class="lineno"> 232</span> <a class="code hl_function" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#ac7761255f2ba06b398b9aae5e4dce5f3">lift</a>(&a, <a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#a0efd0b9c564092f443ca97030d866ef1">t_depth</a>[a] - <a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#a0efd0b9c564092f443ca97030d866ef1">t_depth</a>[b]);</div>
|
||||
<div class="line"><a id="l00233" name="l00233"></a><span class="lineno"> 233</span> }</div>
|
||||
<div class="line"><a id="l00234" name="l00234"></a><span class="lineno"> 234</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">t_depth</a>[b] > <a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#a0efd0b9c564092f443ca97030d866ef1">t_depth</a>[a]) {</div>
|
||||
<div class="line"><a id="l00235" name="l00235"></a><span class="lineno"> 235</span> <a class="code hl_function" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#ac7761255f2ba06b398b9aae5e4dce5f3">lift</a>(&b, <a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#a0efd0b9c564092f443ca97030d866ef1">t_depth</a>[b] - <a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#a0efd0b9c564092f443ca97030d866ef1">t_depth</a>[a]);</div>
|
||||
<div class="line"><a id="l00236" name="l00236"></a><span class="lineno"> 236</span> }</div>
|
||||
<div class="line"><a id="l00237" name="l00237"></a><span class="lineno"> 237</span> <span class="keywordflow">if</span> (a == b) {</div>
|
||||
<div class="line"><a id="l00238" name="l00238"></a><span class="lineno"> 238</span> <span class="keywordflow">return</span> a;</div>
|
||||
<div class="line"><a id="l00239" name="l00239"></a><span class="lineno"> 239</span> }</div>
|
||||
<div class="line"><a id="l00240" name="l00240"></a><span class="lineno"> 240</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> k = <a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#ab2ab020f798d00be2613ecf63074b7c1">t_maxlift</a> - 1; k >= 0; k--) {</div>
|
||||
<div class="line"><a id="l00241" name="l00241"></a><span class="lineno"> 241</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#a350157a5fb79f76fceae33fc84171203">t_par</a>[a][k] != <a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#a350157a5fb79f76fceae33fc84171203">t_par</a>[b][k]) {</div>
|
||||
<div class="line"><a id="l00242" name="l00242"></a><span class="lineno"> 242</span> a = <a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#a350157a5fb79f76fceae33fc84171203">t_par</a>[a][k];</div>
|
||||
<div class="line"><a id="l00243" name="l00243"></a><span class="lineno"> 243</span> b = <a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#a350157a5fb79f76fceae33fc84171203">t_par</a>[b][k];</div>
|
||||
<div class="line"><a id="l00244" name="l00244"></a><span class="lineno"> 244</span> }</div>
|
||||
<div class="line"><a id="l00245" name="l00245"></a><span class="lineno"> 245</span> }</div>
|
||||
<div class="line"><a id="l00246" name="l00246"></a><span class="lineno"> 246</span> <span class="keywordflow">return</span> <a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#a350157a5fb79f76fceae33fc84171203">t_par</a>[a][0];</div>
|
||||
<div class="line"><a id="l00247" name="l00247"></a><span class="lineno"> 247</span> }</div>
|
||||
<div class="line"><a id="l00224" name="l00224"></a><span class="lineno"> 224</span></div>
|
||||
<div class="foldopen" id="foldopen00231" data-start="{" data-end="}">
|
||||
<div class="line"><a id="l00231" name="l00231"></a><span class="lineno"><a class="line" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#ae2b407e64aaf9878fbee7ee6efe9c7d4"> 231</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="l00232" name="l00232"></a><span class="lineno"> 232</span> assert(a >= 0 and b >= 0 and a < <a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#ae4630fa70a80a1dc65a875488a67178a">t_nodes</a> and b < <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="l00233" name="l00233"></a><span class="lineno"> 233</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">t_depth</a>[a] > <a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#a0efd0b9c564092f443ca97030d866ef1">t_depth</a>[b]) {</div>
|
||||
<div class="line"><a id="l00234" name="l00234"></a><span class="lineno"> 234</span> <a class="code hl_function" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#ac7761255f2ba06b398b9aae5e4dce5f3">lift</a>(&a, <a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#a0efd0b9c564092f443ca97030d866ef1">t_depth</a>[a] - <a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#a0efd0b9c564092f443ca97030d866ef1">t_depth</a>[b]);</div>
|
||||
<div class="line"><a id="l00235" name="l00235"></a><span class="lineno"> 235</span> }</div>
|
||||
<div class="line"><a id="l00236" name="l00236"></a><span class="lineno"> 236</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">t_depth</a>[b] > <a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#a0efd0b9c564092f443ca97030d866ef1">t_depth</a>[a]) {</div>
|
||||
<div class="line"><a id="l00237" name="l00237"></a><span class="lineno"> 237</span> <a class="code hl_function" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#ac7761255f2ba06b398b9aae5e4dce5f3">lift</a>(&b, <a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#a0efd0b9c564092f443ca97030d866ef1">t_depth</a>[b] - <a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#a0efd0b9c564092f443ca97030d866ef1">t_depth</a>[a]);</div>
|
||||
<div class="line"><a id="l00238" name="l00238"></a><span class="lineno"> 238</span> }</div>
|
||||
<div class="line"><a id="l00239" name="l00239"></a><span class="lineno"> 239</span> <span class="keywordflow">if</span> (a == b) {</div>
|
||||
<div class="line"><a id="l00240" name="l00240"></a><span class="lineno"> 240</span> <span class="keywordflow">return</span> a;</div>
|
||||
<div class="line"><a id="l00241" name="l00241"></a><span class="lineno"> 241</span> }</div>
|
||||
<div class="line"><a id="l00242" name="l00242"></a><span class="lineno"> 242</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> k = <a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#ab2ab020f798d00be2613ecf63074b7c1">t_maxlift</a> - 1; k >= 0; k--) {</div>
|
||||
<div class="line"><a id="l00243" name="l00243"></a><span class="lineno"> 243</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#a350157a5fb79f76fceae33fc84171203">t_par</a>[a][k] != <a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#a350157a5fb79f76fceae33fc84171203">t_par</a>[b][k]) {</div>
|
||||
<div class="line"><a id="l00244" name="l00244"></a><span class="lineno"> 244</span> a = <a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#a350157a5fb79f76fceae33fc84171203">t_par</a>[a][k];</div>
|
||||
<div class="line"><a id="l00245" name="l00245"></a><span class="lineno"> 245</span> b = <a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#a350157a5fb79f76fceae33fc84171203">t_par</a>[b][k];</div>
|
||||
<div class="line"><a id="l00246" name="l00246"></a><span class="lineno"> 246</span> }</div>
|
||||
<div class="line"><a id="l00247" name="l00247"></a><span class="lineno"> 247</span> }</div>
|
||||
<div class="line"><a id="l00248" name="l00248"></a><span class="lineno"> 248</span> <span class="keywordflow">return</span> <a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#a350157a5fb79f76fceae33fc84171203">t_par</a>[a][0];</div>
|
||||
<div class="line"><a id="l00249" name="l00249"></a><span class="lineno"> 249</span> }</div>
|
||||
</div>
|
||||
<div class="line"><a id="l00248" name="l00248"></a><span class="lineno"> 248</span>};</div>
|
||||
<div class="line"><a id="l00250" name="l00250"></a><span class="lineno"> 250</span>};</div>
|
||||
</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> <<span class="keyword">typename</span> X> <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<X> <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> <<span class="keyword">typename</span> T> <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="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>, 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 class="line"><a id="l00251" name="l00251"></a><span class="lineno"> 251</span></div>
|
||||
<div class="line"><a id="l00256" name="l00256"></a><span class="lineno"> 256</span><span class="keyword">template</span> <<span class="keyword">typename</span> X></div>
|
||||
<div class="foldopen" id="foldopen00257" data-start="{" data-end="};">
|
||||
<div class="line"><a id="l00257" name="l00257"></a><span class="lineno"><a class="line" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html"> 257</a></span><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="l00258" name="l00258"></a><span class="lineno"> 258</span> <span class="keyword">private</span>:</div>
|
||||
<div class="line"><a id="l00264" name="l00264"></a><span class="lineno"> 264</span> </div>
|
||||
<div class="line"><a id="l00265" name="l00265"></a><span class="lineno"><a class="line" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html#afbf8a9cb9449d5ca844f4e141a801e6a"> 265</a></span> std::vector<X> <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="l00266" name="l00266"></a><span class="lineno"><a class="line" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html#ac6d912bbfafa3a7509f66bbc1729ca25"> 266</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="l00267" name="l00267"></a><span class="lineno"><a class="line" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html#aa7f93971a9f891e0bbb7023081f379d5"> 267</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="l00268" name="l00268"></a><span class="lineno"> 268</span> <span class="keyword">template</span> <<span class="keyword">typename</span> T></div>
|
||||
<div class="line"><a id="l00269" name="l00269"></a><span class="lineno"> 269</span> <span class="keyword">friend</span> <span class="keyword">class </span>HLD;</div>
|
||||
<div class="line"><a id="l00270" name="l00270"></a><span class="lineno"> 270</span></div>
|
||||
<div class="line"><a id="l00278" name="l00278"></a><span class="lineno"><a class="line" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html#a41c733f5f5e262b308f7cb95c88c1e74"> 278</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="l00279" name="l00279"></a><span class="lineno"> 279</span></div>
|
||||
<div class="foldopen" id="foldopen00286" data-start="{" data-end="}">
|
||||
<div class="line"><a id="l00286" name="l00286"></a><span class="lineno"><a class="line" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html#afba5c1225ba04c0025c7786c09ff28f1"> 286</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="l00287" name="l00287"></a><span class="lineno"> 287</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="l00288" name="l00288"></a><span class="lineno"> 288</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="l00289" name="l00289"></a><span class="lineno"> 289</span> }</div>
|
||||
</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 > 0; p >>= 1) {</div>
|
||||
<div class="line"><a id="l00295" name="l00295"></a><span class="lineno"> 295</span> <a class="code hl_variable" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html#afbf8a9cb9449d5ca844f4e141a801e6a">s_tree</a>[p] += v;</div>
|
||||
<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 class="line"><a id="l00290" name="l00290"></a><span class="lineno"> 290</span></div>
|
||||
<div class="foldopen" id="foldopen00297" data-start="{" data-end="}">
|
||||
<div class="line"><a id="l00297" name="l00297"></a><span class="lineno"><a class="line" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html#a3c75bf5770790f8eba8cc92227b5400c"> 297</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="l00298" name="l00298"></a><span class="lineno"> 298</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 > 0; p >>= 1) {</div>
|
||||
<div class="line"><a id="l00299" name="l00299"></a><span class="lineno"> 299</span> <a class="code hl_variable" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html#afbf8a9cb9449d5ca844f4e141a801e6a">s_tree</a>[p] += v;</div>
|
||||
<div class="line"><a id="l00300" name="l00300"></a><span class="lineno"> 300</span> }</div>
|
||||
<div class="line"><a id="l00301" name="l00301"></a><span class="lineno"> 301</span> }</div>
|
||||
</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>
|
||||
<div class="line"><a id="l00307" name="l00307"></a><span class="lineno"> 307</span> <span class="keywordflow">for</span> (l += <a class="code hl_variable" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html#ac6d912bbfafa3a7509f66bbc1729ca25">s_size</a>, r += <a class="code hl_variable" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html#ac6d912bbfafa3a7509f66bbc1729ca25">s_size</a> + 1; l < r; l >>= 1, r >>= 1) {</div>
|
||||
<div class="line"><a id="l00308" name="l00308"></a><span class="lineno"> 308</span> <span class="keywordflow">if</span> (l & 1) {</div>
|
||||
<div class="line"><a id="l00309" name="l00309"></a><span class="lineno"> 309</span> lhs = <a class="code hl_function" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html#a41c733f5f5e262b308f7cb95c88c1e74">combine</a>(lhs, <a class="code hl_variable" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html#afbf8a9cb9449d5ca844f4e141a801e6a">s_tree</a>[l++]);</div>
|
||||
<div class="line"><a id="l00310" name="l00310"></a><span class="lineno"> 310</span> }</div>
|
||||
<div class="line"><a id="l00311" name="l00311"></a><span class="lineno"> 311</span> <span class="keywordflow">if</span> (r & 1) {</div>
|
||||
<div class="line"><a id="l00312" name="l00312"></a><span class="lineno"> 312</span> rhs = <a class="code hl_function" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html#a41c733f5f5e262b308f7cb95c88c1e74">combine</a>(<a class="code hl_variable" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html#afbf8a9cb9449d5ca844f4e141a801e6a">s_tree</a>[--r], rhs);</div>
|
||||
<div class="line"><a id="l00313" name="l00313"></a><span class="lineno"> 313</span> }</div>
|
||||
<div class="line"><a id="l00314" name="l00314"></a><span class="lineno"> 314</span> }</div>
|
||||
<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 class="line"><a id="l00302" name="l00302"></a><span class="lineno"> 302</span></div>
|
||||
<div class="foldopen" id="foldopen00309" data-start="{" data-end="}">
|
||||
<div class="line"><a id="l00309" name="l00309"></a><span class="lineno"><a class="line" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html#a1fda852e6e522707fd97f61cdb0a2591"> 309</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="l00310" name="l00310"></a><span class="lineno"> 310</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>
|
||||
<div class="line"><a id="l00311" name="l00311"></a><span class="lineno"> 311</span> <span class="keywordflow">for</span> (l += <a class="code hl_variable" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html#ac6d912bbfafa3a7509f66bbc1729ca25">s_size</a>, r += <a class="code hl_variable" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html#ac6d912bbfafa3a7509f66bbc1729ca25">s_size</a> + 1; l < r; l >>= 1, r >>= 1) {</div>
|
||||
<div class="line"><a id="l00312" name="l00312"></a><span class="lineno"> 312</span> <span class="keywordflow">if</span> (l & 1) {</div>
|
||||
<div class="line"><a id="l00313" name="l00313"></a><span class="lineno"> 313</span> lhs = <a class="code hl_function" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html#a41c733f5f5e262b308f7cb95c88c1e74">combine</a>(lhs, <a class="code hl_variable" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html#afbf8a9cb9449d5ca844f4e141a801e6a">s_tree</a>[l++]);</div>
|
||||
<div class="line"><a id="l00314" name="l00314"></a><span class="lineno"> 314</span> }</div>
|
||||
<div class="line"><a id="l00315" name="l00315"></a><span class="lineno"> 315</span> <span class="keywordflow">if</span> (r & 1) {</div>
|
||||
<div class="line"><a id="l00316" name="l00316"></a><span class="lineno"> 316</span> rhs = <a class="code hl_function" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html#a41c733f5f5e262b308f7cb95c88c1e74">combine</a>(<a class="code hl_variable" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html#afbf8a9cb9449d5ca844f4e141a801e6a">s_tree</a>[--r], rhs);</div>
|
||||
<div class="line"><a id="l00317" name="l00317"></a><span class="lineno"> 317</span> }</div>
|
||||
<div class="line"><a id="l00318" name="l00318"></a><span class="lineno"> 318</span> }</div>
|
||||
<div class="line"><a id="l00319" name="l00319"></a><span class="lineno"> 319</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="l00320" name="l00320"></a><span class="lineno"> 320</span> }</div>
|
||||
</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 class="line"><a id="l00321" name="l00321"></a><span class="lineno"> 321</span></div>
|
||||
<div class="line"><a id="l00334" name="l00334"></a><span class="lineno"><a class="line" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html#ad3b942be27a1b0fe3cff6cb6edf01294"> 334</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="l00335" name="l00335"></a><span class="lineno"> 335</span>};</div>
|
||||
</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> <<span class="keyword">typename</span> X> <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><X>, <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><X> {</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<int> <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="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> &v : <a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#ab1aeaefa1bd97b867c652ba916fbdb43">Tree<X>::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_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#ada1494fccbc7f1f07b2f9be9f7e07ad5">Tree<X>::t_size</a>[v] > 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<X>::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>
|
||||
<div class="line"><a id="l00360" name="l00360"></a><span class="lineno"> 360</span> }</div>
|
||||
<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 class="line"><a id="l00336" name="l00336"></a><span class="lineno"> 336</span></div>
|
||||
<div class="line"><a id="l00341" name="l00341"></a><span class="lineno"> 341</span><span class="keyword">template</span> <<span class="keyword">typename</span> X></div>
|
||||
<div class="foldopen" id="foldopen00342" data-start="{" data-end="};">
|
||||
<div class="line"><a id="l00342" name="l00342"></a><span class="lineno"><a class="line" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html"> 342</a></span><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><X>, <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><X> {</div>
|
||||
<div class="line"><a id="l00343" name="l00343"></a><span class="lineno"> 343</span> <span class="keyword">private</span>:</div>
|
||||
<div class="line"><a id="l00344" name="l00344"></a><span class="lineno"><a class="line" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html#a722cc7cf2c3e4d15583601a48b09776f"> 344</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="l00345" name="l00345"></a><span class="lineno"><a class="line" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html#aa86a91ae0cd7898990a8170a2f2c9cda"> 345</a></span> std::vector<int> <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="l00346" name="l00346"></a><span class="lineno"><a class="line" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html#a84424f180f12b514eaab57a6aa20b104"> 346</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="l00347" name="l00347"></a><span class="lineno"><a class="line" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html#a1b336474d17eff1aa4be73d4068dc725"> 347</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="l00348" name="l00348"></a><span class="lineno"> 348</span></div>
|
||||
<div class="foldopen" id="foldopen00356" data-start="{" data-end="}">
|
||||
<div class="line"><a id="l00356" name="l00356"></a><span class="lineno"><a class="line" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html#af64848d6630c39d0f09ce2359cc7c4f8"> 356</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="l00357" name="l00357"></a><span class="lineno"> 357</span> <span class="keywordtype">int</span> hc_size = -1, hc_id = -1;</div>
|
||||
<div class="line"><a id="l00358" name="l00358"></a><span class="lineno"> 358</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keywordtype">int</span> &v : <a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#ab1aeaefa1bd97b867c652ba916fbdb43">Tree<X>::t_adj</a>[u]) {</div>
|
||||
<div class="line"><a id="l00359" name="l00359"></a><span class="lineno"> 359</span> <span class="keywordflow">if</span> (v ^ p) {</div>
|
||||
<div class="line"><a id="l00360" name="l00360"></a><span class="lineno"> 360</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="l00361" name="l00361"></a><span class="lineno"> 361</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<X>::t_size</a>[v] > hc_size) {</div>
|
||||
<div class="line"><a id="l00362" name="l00362"></a><span class="lineno"> 362</span> hc_size = <a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#ada1494fccbc7f1f07b2f9be9f7e07ad5">Tree<X>::t_size</a>[v];</div>
|
||||
<div class="line"><a id="l00363" name="l00363"></a><span class="lineno"> 363</span> hc_id = v;</div>
|
||||
<div class="line"><a id="l00364" name="l00364"></a><span class="lineno"> 364</span> }</div>
|
||||
<div class="line"><a id="l00365" name="l00365"></a><span class="lineno"> 365</span> }</div>
|
||||
<div class="line"><a id="l00366" name="l00366"></a><span class="lineno"> 366</span> }</div>
|
||||
<div class="line"><a id="l00367" name="l00367"></a><span class="lineno"> 367</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="l00368" name="l00368"></a><span class="lineno"> 368</span> }</div>
|
||||
</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> &v : <a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#ab1aeaefa1bd97b867c652ba916fbdb43">Tree<X>::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 class="line"><a id="l00369" name="l00369"></a><span class="lineno"> 369</span></div>
|
||||
<div class="foldopen" id="foldopen00377" data-start="{" data-end="}">
|
||||
<div class="line"><a id="l00377" name="l00377"></a><span class="lineno"><a class="line" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html#a2dfbda148aad0bfaba2ebfda9ebc915a"> 377</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="l00378" name="l00378"></a><span class="lineno"> 378</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="l00379" name="l00379"></a><span class="lineno"> 379</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="l00380" name="l00380"></a><span class="lineno"> 380</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="l00381" name="l00381"></a><span class="lineno"> 381</span> }</div>
|
||||
<div class="line"><a id="l00382" name="l00382"></a><span class="lineno"> 382</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keywordtype">int</span> &v : <a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#ab1aeaefa1bd97b867c652ba916fbdb43">Tree<X>::t_adj</a>[u]) {</div>
|
||||
<div class="line"><a id="l00383" name="l00383"></a><span class="lineno"> 383</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="l00384" name="l00384"></a><span class="lineno"> 384</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="l00385" name="l00385"></a><span class="lineno"> 385</span> }</div>
|
||||
<div class="line"><a id="l00386" name="l00386"></a><span class="lineno"> 386</span> }</div>
|
||||
<div class="line"><a id="l00387" name="l00387"></a><span class="lineno"> 387</span> }</div>
|
||||
</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> &v : <a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#ab1aeaefa1bd97b867c652ba916fbdb43">Tree<X>::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 class="line"><a id="l00388" name="l00388"></a><span class="lineno"> 388</span></div>
|
||||
<div class="foldopen" id="foldopen00396" data-start="{" data-end="}">
|
||||
<div class="line"><a id="l00396" name="l00396"></a><span class="lineno"><a class="line" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html#a0579062b384e54b611b80c6337c7f2c8"> 396</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="l00397" name="l00397"></a><span class="lineno"> 397</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="l00398" name="l00398"></a><span class="lineno"> 398</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="l00399" name="l00399"></a><span class="lineno"> 399</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="l00400" name="l00400"></a><span class="lineno"> 400</span> }</div>
|
||||
<div class="line"><a id="l00401" name="l00401"></a><span class="lineno"> 401</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keywordtype">int</span> &v : <a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#ab1aeaefa1bd97b867c652ba916fbdb43">Tree<X>::t_adj</a>[u]) {</div>
|
||||
<div class="line"><a id="l00402" name="l00402"></a><span class="lineno"> 402</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="l00403" name="l00403"></a><span class="lineno"> 403</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="l00404" name="l00404"></a><span class="lineno"> 404</span> }</div>
|
||||
<div class="line"><a id="l00405" name="l00405"></a><span class="lineno"> 405</span> }</div>
|
||||
<div class="line"><a id="l00406" name="l00406"></a><span class="lineno"> 406</span> }</div>
|
||||
</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_variable" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html#aa7f93971a9f891e0bbb7023081f379d5">SG<X>::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<X>::t_depth</a>[a] < <a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#a0efd0b9c564092f443ca97030d866ef1">Tree<X>::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_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#a0efd0b9c564092f443ca97030d866ef1">Tree<X>::t_depth</a>[a] >= <a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#a0efd0b9c564092f443ca97030d866ef1">Tree<X>::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_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#a0efd0b9c564092f443ca97030d866ef1">Tree<X>::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]] < <a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#a0efd0b9c564092f443ca97030d866ef1">Tree<X>::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<X>::t_depth</a>[b] - <a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#a0efd0b9c564092f443ca97030d866ef1">Tree<X>::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<X>::combine</a>(ret, <a class="code hl_function" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html#a1fda852e6e522707fd97f61cdb0a2591">SG<X>::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<X>::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>
|
||||
<div class="line"><a id="l00425" name="l00425"></a><span class="lineno"> 425</span> }</div>
|
||||
<div class="line"><a id="l00426" name="l00426"></a><span class="lineno"> 426</span> <span class="keywordflow">return</span> ret;</div>
|
||||
<div class="line"><a id="l00427" name="l00427"></a><span class="lineno"> 427</span> }</div>
|
||||
<div class="line"><a id="l00407" name="l00407"></a><span class="lineno"> 407</span></div>
|
||||
<div class="foldopen" id="foldopen00415" data-start="{" data-end="}">
|
||||
<div class="line"><a id="l00415" name="l00415"></a><span class="lineno"><a class="line" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html#a7d5b40c076347a6aabfb37a0590f2f24"> 415</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="l00416" name="l00416"></a><span class="lineno"> 416</span> X ret = <a class="code hl_variable" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html#aa7f93971a9f891e0bbb7023081f379d5">SG<X>::sret_init</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<X>::t_depth</a>[a] < <a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#a0efd0b9c564092f443ca97030d866ef1">Tree<X>::t_depth</a>[b]) {</div>
|
||||
<div class="line"><a id="l00418" name="l00418"></a><span class="lineno"> 418</span> std::swap(a, b);</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> <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<X>::t_depth</a>[a] >= <a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#a0efd0b9c564092f443ca97030d866ef1">Tree<X>::t_depth</a>[b]) {</div>
|
||||
<div class="line"><a id="l00421" name="l00421"></a><span class="lineno"> 421</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="l00422" name="l00422"></a><span class="lineno"> 422</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="l00423" name="l00423"></a><span class="lineno"> 423</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<X>::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]] < <a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#a0efd0b9c564092f443ca97030d866ef1">Tree<X>::t_depth</a>[b]) {</div>
|
||||
<div class="line"><a id="l00424" name="l00424"></a><span class="lineno"> 424</span> l += <a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#a0efd0b9c564092f443ca97030d866ef1">Tree<X>::t_depth</a>[b] - <a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#a0efd0b9c564092f443ca97030d866ef1">Tree<X>::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="l00425" name="l00425"></a><span class="lineno"> 425</span> }</div>
|
||||
<div class="line"><a id="l00426" name="l00426"></a><span class="lineno"> 426</span> ret = <a class="code hl_function" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html#a41c733f5f5e262b308f7cb95c88c1e74">SG<X>::combine</a>(ret, <a class="code hl_function" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html#a1fda852e6e522707fd97f61cdb0a2591">SG<X>::query</a>(l, r));</div>
|
||||
<div class="line"><a id="l00427" name="l00427"></a><span class="lineno"> 427</span> a = <a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#a350157a5fb79f76fceae33fc84171203">Tree<X>::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="l00428" name="l00428"></a><span class="lineno"> 428</span> <span class="keywordflow">if</span> (a == -1) {</div>
|
||||
<div class="line"><a id="l00429" name="l00429"></a><span class="lineno"> 429</span> <span class="keywordflow">break</span>;</div>
|
||||
<div class="line"><a id="l00430" name="l00430"></a><span class="lineno"> 430</span> }</div>
|
||||
<div class="line"><a id="l00431" name="l00431"></a><span class="lineno"> 431</span> }</div>
|
||||
<div class="line"><a id="l00432" name="l00432"></a><span class="lineno"> 432</span> <span class="keywordflow">return</span> ret;</div>
|
||||
<div class="line"><a id="l00433" name="l00433"></a><span class="lineno"> 433</span> }</div>
|
||||
</div>
|
||||
<div class="line"><a id="l00428" name="l00428"></a><span class="lineno"> 428</span> </div>
|
||||
<div class="line"><a id="l00429" name="l00429"></a><span class="lineno"> 429</span><span class="keyword">public</span>:</div>
|
||||
<div class="line"><a id="l00435" name="l00435"></a><span class="lineno"> 435</span> <span class="keyword">explicit</span> <a class="code hl_function" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html#a6e486767434e44076c1ac374a22da726">HLD<X></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><X>(nodes), <a class="code hl_class" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html">SG</a><X>(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_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#ae4630fa70a80a1dc65a875488a67178a">Tree<X>::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<X>::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<X>::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="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<X>::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_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#aa6c37e840355b9fb2105181c578694e8">Tree<X>::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<X>::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<X>::t_root</a>);</div>
|
||||
<div class="line"><a id="l00434" name="l00434"></a><span class="lineno"> 434</span> </div>
|
||||
<div class="line"><a id="l00435" name="l00435"></a><span class="lineno"> 435</span> <span class="keyword">public</span>:</div>
|
||||
<div class="foldopen" id="foldopen00441" data-start="{" data-end="}">
|
||||
<div class="line"><a id="l00441" name="l00441"></a><span class="lineno"><a class="line" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html#a6e486767434e44076c1ac374a22da726"> 441</a></span> <span class="keyword">explicit</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="keywordtype">int</span> nodes) : <a class="code hl_function" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#a835fb2bbb27307b8cacad9b287968bc1">Tree</a><X>(nodes), <a class="code hl_function" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html#afba5c1225ba04c0025c7786c09ff28f1">SG</a><X>(nodes) {</div>
|
||||
<div class="line"><a id="l00442" name="l00442"></a><span class="lineno"> 442</span> <span class="comment">/* Initialization and resize vectors */</span></div>
|
||||
<div class="line"><a id="l00443" name="l00443"></a><span class="lineno"> 443</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="l00444" name="l00444"></a><span class="lineno"> 444</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<X>::t_nodes</a>, -1);</div>
|
||||
<div class="line"><a id="l00445" name="l00445"></a><span class="lineno"> 445</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<X>::t_nodes</a>, -1);</div>
|
||||
<div class="line"><a id="l00446" name="l00446"></a><span class="lineno"> 446</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<X>::t_nodes</a>);</div>
|
||||
<div class="line"><a id="l00447" name="l00447"></a><span class="lineno"> 447</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="l00448" name="l00448"></a><span class="lineno"> 448</span> }</div>
|
||||
</div>
|
||||
<div class="line"><a id="l00449" name="l00449"></a><span class="lineno"> 449</span></div>
|
||||
<div class="foldopen" id="foldopen00456" data-start="{" data-end="}">
|
||||
<div class="line"><a id="l00456" name="l00456"></a><span class="lineno"><a class="line" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html#ae9e979edd69678b85665c01e2ee97828"> 456</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="l00457" name="l00457"></a><span class="lineno"> 457</span> <a class="code hl_function" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#ad22d760a5a33545a70e7ea5e1786c8dc">Tree<X>::init</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 < Tree<X>::t_nodes; 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<X>::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<X>::t_nodes</a>] = <a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#a135b7952593c9b1aae38fcaf1cc1abf7">Tree<X>::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_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#ae4630fa70a80a1dc65a875488a67178a">Tree<X>::t_nodes</a> - 1; i > 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<X>::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<X>::combine</a>(<a class="code hl_variable" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html#afbf8a9cb9449d5ca844f4e141a801e6a">SG<X>::s_tree</a>[i << 1], <a class="code hl_variable" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html#afbf8a9cb9449d5ca844f4e141a801e6a">SG<X>::s_tree</a>[i << 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 class="line"><a id="l00459" name="l00459"></a><span class="lineno"> 459</span> <span class="comment">// Fill the heavy child, greatest parent, and labels</span></div>
|
||||
<div class="line"><a id="l00460" name="l00460"></a><span class="lineno"> 460</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="l00461" name="l00461"></a><span class="lineno"> 461</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<X>::t_root</a>);</div>
|
||||
<div class="line"><a id="l00462" name="l00462"></a><span class="lineno"> 462</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<X>::t_root</a>);</div>
|
||||
<div class="line"><a id="l00463" name="l00463"></a><span class="lineno"> 463</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<X>::t_root</a>);</div>
|
||||
<div class="line"><a id="l00464" name="l00464"></a><span class="lineno"> 464</span> </div>
|
||||
<div class="line"><a id="l00465" name="l00465"></a><span class="lineno"> 465</span> <span class="comment">// Segment Tree Initialization</span></div>
|
||||
<div class="line"><a id="l00466" name="l00466"></a><span class="lineno"> 466</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < Tree<X>::t_nodes; i++) {</div>
|
||||
<div class="line"><a id="l00467" name="l00467"></a><span class="lineno"> 467</span> <a class="code hl_variable" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html#afbf8a9cb9449d5ca844f4e141a801e6a">SG<X>::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<X>::t_nodes</a>] = <a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#a135b7952593c9b1aae38fcaf1cc1abf7">Tree<X>::t_val</a>[i];</div>
|
||||
<div class="line"><a id="l00468" name="l00468"></a><span class="lineno"> 468</span> }</div>
|
||||
<div class="line"><a id="l00469" name="l00469"></a><span class="lineno"> 469</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<X>::t_nodes</a> - 1; i > 0; i--) {</div>
|
||||
<div class="line"><a id="l00470" name="l00470"></a><span class="lineno"> 470</span> <a class="code hl_variable" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html#afbf8a9cb9449d5ca844f4e141a801e6a">SG<X>::s_tree</a>[i] = <a class="code hl_function" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html#a41c733f5f5e262b308f7cb95c88c1e74">SG<X>::combine</a>(<a class="code hl_variable" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html#afbf8a9cb9449d5ca844f4e141a801e6a">SG<X>::s_tree</a>[i << 1],</div>
|
||||
<div class="line"><a id="l00471" name="l00471"></a><span class="lineno"> 471</span> <a class="code hl_variable" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html#afbf8a9cb9449d5ca844f4e141a801e6a">SG<X>::s_tree</a>[i << 1 | 1]);</div>
|
||||
<div class="line"><a id="l00472" name="l00472"></a><span class="lineno"> 472</span> }</div>
|
||||
<div class="line"><a id="l00473" name="l00473"></a><span class="lineno"> 473</span> }</div>
|
||||
</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_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#a135b7952593c9b1aae38fcaf1cc1abf7">Tree<X>::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<X>::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_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#a135b7952593c9b1aae38fcaf1cc1abf7">Tree<X>::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 class="line"><a id="l00474" name="l00474"></a><span class="lineno"> 474</span></div>
|
||||
<div class="foldopen" id="foldopen00481" data-start="{" data-end="}">
|
||||
<div class="line"><a id="l00481" name="l00481"></a><span class="lineno"><a class="line" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html#a9f1cb54ed09fde931bf3220d75ee4c57"> 481</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="l00482" name="l00482"></a><span class="lineno"> 482</span> X diff = val - <a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#a135b7952593c9b1aae38fcaf1cc1abf7">Tree<X>::t_val</a>[<a class="code hl_class" href="../../d5/da1/structnode.html">node</a>];</div>
|
||||
<div class="line"><a id="l00483" name="l00483"></a><span class="lineno"> 483</span> <a class="code hl_function" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html#a3c75bf5770790f8eba8cc92227b5400c">SG<X>::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="l00484" name="l00484"></a><span class="lineno"> 484</span> <a class="code hl_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#a135b7952593c9b1aae38fcaf1cc1abf7">Tree<X>::t_val</a>[<a class="code hl_class" href="../../d5/da1/structnode.html">node</a>] = val;</div>
|
||||
<div class="line"><a id="l00485" name="l00485"></a><span class="lineno"> 485</span> }</div>
|
||||
</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<X>::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_variable" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html#aa7f93971a9f891e0bbb7023081f379d5">SG<X>::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_variable" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#a135b7952593c9b1aae38fcaf1cc1abf7">Tree<X>::t_val</a>[lc];</div>
|
||||
<div class="line"><a id="l00496" name="l00496"></a><span class="lineno"> 496</span> }</div>
|
||||
<div class="line"><a id="l00486" name="l00486"></a><span class="lineno"> 486</span></div>
|
||||
<div class="foldopen" id="foldopen00495" data-start="{" data-end="}">
|
||||
<div class="line"><a id="l00495" name="l00495"></a><span class="lineno"><a class="line" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html#a4dfbf5d9df825eeb63b294c6849bdcab"> 495</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="l00496" name="l00496"></a><span class="lineno"> 496</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<X>::lca</a>(a, b);</div>
|
||||
<div class="line"><a id="l00497" name="l00497"></a><span class="lineno"> 497</span> X ret = <a class="code hl_variable" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html#aa7f93971a9f891e0bbb7023081f379d5">SG<X>::sret_init</a>;</div>
|
||||
<div class="line"><a id="l00498" name="l00498"></a><span class="lineno"> 498</span> assert(lc != -1);</div>
|
||||
<div class="line"><a id="l00499" name="l00499"></a><span class="lineno"> 499</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="l00500" name="l00500"></a><span class="lineno"> 500</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="l00501" name="l00501"></a><span class="lineno"> 501</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<X>::t_val</a>[lc];</div>
|
||||
<div class="line"><a id="l00502" name="l00502"></a><span class="lineno"> 502</span> }</div>
|
||||
</div>
|
||||
<div class="line"><a id="l00497" name="l00497"></a><span class="lineno"> 497</span>};</div>
|
||||
<div class="line"><a id="l00503" name="l00503"></a><span class="lineno"> 503</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="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 << <span class="stringliteral">"Test 1:\n"</span>;</div>
|
||||
<div class="line"><a id="l00507" name="l00507"></a><span class="lineno"> 507</span> </div>
|
||||
<div class="line"><a id="l00508" name="l00508"></a><span class="lineno"> 508</span> <span class="comment">// Test details</span></div>
|
||||
<div class="line"><a id="l00509" name="l00509"></a><span class="lineno"> 509</span> <span class="keywordtype">int</span> n = 5;</div>
|
||||
<div class="line"><a id="l00510" name="l00510"></a><span class="lineno"> 510</span> std::vector<int64_t> node_values = {4, 2, 5, 2, 1};</div>
|
||||
<div class="line"><a id="l00511" name="l00511"></a><span class="lineno"> 511</span> std::vector<std::vector<int>> edges = {{1, 2}, {1, 3}, {3, 4}, {3, 5}};</div>
|
||||
<div class="line"><a id="l00512" name="l00512"></a><span class="lineno"> 512</span> std::vector<std::vector<int>> queries = {</div>
|
||||
<div class="line"><a id="l00513" name="l00513"></a><span class="lineno"> 513</span> {2, 1, 4},</div>
|
||||
<div class="line"><a id="l00514" name="l00514"></a><span class="lineno"> 514</span> {1, 3, 2},</div>
|
||||
<div class="line"><a id="l00515" name="l00515"></a><span class="lineno"> 515</span> {2, 1, 4},</div>
|
||||
<div class="line"><a id="l00516" name="l00516"></a><span class="lineno"> 516</span> };</div>
|
||||
<div class="line"><a id="l00517" name="l00517"></a><span class="lineno"> 517</span> std::vector<int> expected_result = {11, 8};</div>
|
||||
<div class="line"><a id="l00518" name="l00518"></a><span class="lineno"> 518</span> std::vector<int> code_result;</div>
|
||||
<div class="line"><a id="l00519" name="l00519"></a><span class="lineno"> 519</span> </div>
|
||||
<div class="line"><a id="l00520" name="l00520"></a><span class="lineno"> 520</span> <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">range_queries::heavy_light_decomposition::HLD<int64_t></a> hld(n);</div>
|
||||
<div class="line"><a id="l00521" name="l00521"></a><span class="lineno"> 521</span> hld.<a class="code hl_function" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#a04cd96efaba147b19d3afc769b90ff70">set_node_val</a>(node_values);</div>
|
||||
<div class="line"><a id="l00522" name="l00522"></a><span class="lineno"> 522</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < n - 1; i++) {</div>
|
||||
<div class="line"><a id="l00523" name="l00523"></a><span class="lineno"> 523</span> <span class="keywordtype">int</span> u = edges[i][0], v = edges[i][1];</div>
|
||||
<div class="line"><a id="l00524" name="l00524"></a><span class="lineno"> 524</span> hld.<a class="code hl_function" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#a79ab4601c4a95c0902ac04e779e5f54d">add_edge</a>(u - 1, v - 1);</div>
|
||||
<div class="line"><a id="l00525" name="l00525"></a><span class="lineno"> 525</span> }</div>
|
||||
<div class="line"><a id="l00526" name="l00526"></a><span class="lineno"> 526</span> hld.<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="l00527" name="l00527"></a><span class="lineno"> 527</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &q : queries) {</div>
|
||||
<div class="line"><a id="l00528" name="l00528"></a><span class="lineno"> 528</span> <span class="keywordtype">int</span> type = q[0];</div>
|
||||
<div class="line"><a id="l00529" name="l00529"></a><span class="lineno"> 529</span> <span class="keywordflow">if</span> (type == 1) {</div>
|
||||
<div class="line"><a id="l00530" name="l00530"></a><span class="lineno"> 530</span> <span class="keywordtype">int</span> p = q[1], x = q[2];</div>
|
||||
<div class="line"><a id="l00531" name="l00531"></a><span class="lineno"> 531</span> hld.<a class="code hl_function" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html#a9f1cb54ed09fde931bf3220d75ee4c57">update</a>(p - 1, x);</div>
|
||||
<div class="line"><a id="l00532" name="l00532"></a><span class="lineno"> 532</span> } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (type == 2) {</div>
|
||||
<div class="line"><a id="l00533" name="l00533"></a><span class="lineno"> 533</span> <span class="keywordtype">int</span> a = q[1], b = q[2];</div>
|
||||
<div class="line"><a id="l00534" name="l00534"></a><span class="lineno"> 534</span> code_result.push_back(hld.<a class="code hl_function" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html#a4dfbf5d9df825eeb63b294c6849bdcab">query</a>(a - 1, b - 1));</div>
|
||||
<div class="line"><a id="l00535" name="l00535"></a><span class="lineno"> 535</span> } <span class="keywordflow">else</span> {</div>
|
||||
<div class="line"><a id="l00536" name="l00536"></a><span class="lineno"> 536</span> <span class="keywordflow">continue</span>;</div>
|
||||
<div class="line"><a id="l00537" name="l00537"></a><span class="lineno"> 537</span> }</div>
|
||||
<div class="line"><a id="l00538" name="l00538"></a><span class="lineno"> 538</span> }</div>
|
||||
<div class="line"><a id="l00539" name="l00539"></a><span class="lineno"> 539</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < static_cast<int>(expected_result.size()); i++) {</div>
|
||||
<div class="line"><a id="l00540" name="l00540"></a><span class="lineno"> 540</span> assert(expected_result[i] == code_result[i]);</div>
|
||||
<div class="line"><a id="l00541" name="l00541"></a><span class="lineno"> 541</span> }</div>
|
||||
<div class="line"><a id="l00542" name="l00542"></a><span class="lineno"> 542</span> std::cout << <span class="stringliteral">"\nTest 1 passed!\n"</span>;</div>
|
||||
<div class="line"><a id="l00543" name="l00543"></a><span class="lineno"> 543</span>}</div>
|
||||
<div class="line"><a id="l00504" name="l00504"></a><span class="lineno"> 504</span>} <span class="comment">// namespace heavy_light_decomposition</span></div>
|
||||
<div class="line"><a id="l00505" name="l00505"></a><span class="lineno"> 505</span>} <span class="comment">// namespace range_queries</span></div>
|
||||
<div class="line"><a id="l00506" name="l00506"></a><span class="lineno"> 506</span></div>
|
||||
<div class="foldopen" id="foldopen00511" data-start="{" data-end="}">
|
||||
<div class="line"><a id="l00511" name="l00511"></a><span class="lineno"><a class="line" href="../../d2/de9/heavy__light__decomposition_8cpp.html#a34b8683a2b429de5cce57e6d733ec817"> 511</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="l00512" name="l00512"></a><span class="lineno"> 512</span> std::cout << <span class="stringliteral">"Test 1:\n"</span>;</div>
|
||||
<div class="line"><a id="l00513" name="l00513"></a><span class="lineno"> 513</span> </div>
|
||||
<div class="line"><a id="l00514" name="l00514"></a><span class="lineno"> 514</span> <span class="comment">// Test details</span></div>
|
||||
<div class="line"><a id="l00515" name="l00515"></a><span class="lineno"> 515</span> <span class="keywordtype">int</span> n = 5;</div>
|
||||
<div class="line"><a id="l00516" name="l00516"></a><span class="lineno"> 516</span> std::vector<int64_t> node_values = {4, 2, 5, 2, 1};</div>
|
||||
<div class="line"><a id="l00517" name="l00517"></a><span class="lineno"> 517</span> std::vector<std::vector<int>> edges = {{1, 2}, {1, 3}, {3, 4}, {3, 5}};</div>
|
||||
<div class="line"><a id="l00518" name="l00518"></a><span class="lineno"> 518</span> std::vector<std::vector<int>> queries = {</div>
|
||||
<div class="line"><a id="l00519" name="l00519"></a><span class="lineno"> 519</span> {2, 1, 4},</div>
|
||||
<div class="line"><a id="l00520" name="l00520"></a><span class="lineno"> 520</span> {1, 3, 2},</div>
|
||||
<div class="line"><a id="l00521" name="l00521"></a><span class="lineno"> 521</span> {2, 1, 4},</div>
|
||||
<div class="line"><a id="l00522" name="l00522"></a><span class="lineno"> 522</span> };</div>
|
||||
<div class="line"><a id="l00523" name="l00523"></a><span class="lineno"> 523</span> std::vector<int> expected_result = {11, 8};</div>
|
||||
<div class="line"><a id="l00524" name="l00524"></a><span class="lineno"> 524</span> std::vector<int> code_result;</div>
|
||||
<div class="line"><a id="l00525" name="l00525"></a><span class="lineno"> 525</span> </div>
|
||||
<div class="line"><a id="l00526" name="l00526"></a><span class="lineno"> 526</span> <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">range_queries::heavy_light_decomposition::HLD<int64_t></a> hld(n);</div>
|
||||
<div class="line"><a id="l00527" name="l00527"></a><span class="lineno"> 527</span> hld.<a class="code hl_function" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#a04cd96efaba147b19d3afc769b90ff70">set_node_val</a>(node_values);</div>
|
||||
<div class="line"><a id="l00528" name="l00528"></a><span class="lineno"> 528</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < n - 1; i++) {</div>
|
||||
<div class="line"><a id="l00529" name="l00529"></a><span class="lineno"> 529</span> <span class="keywordtype">int</span> u = edges[i][0], v = edges[i][1];</div>
|
||||
<div class="line"><a id="l00530" name="l00530"></a><span class="lineno"> 530</span> hld.<a class="code hl_function" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#a79ab4601c4a95c0902ac04e779e5f54d">add_edge</a>(u - 1, v - 1);</div>
|
||||
<div class="line"><a id="l00531" name="l00531"></a><span class="lineno"> 531</span> }</div>
|
||||
<div class="line"><a id="l00532" name="l00532"></a><span class="lineno"> 532</span> hld.<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="l00533" name="l00533"></a><span class="lineno"> 533</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &q : queries) {</div>
|
||||
<div class="line"><a id="l00534" name="l00534"></a><span class="lineno"> 534</span> <span class="keywordtype">int</span> type = q[0];</div>
|
||||
<div class="line"><a id="l00535" name="l00535"></a><span class="lineno"> 535</span> <span class="keywordflow">if</span> (type == 1) {</div>
|
||||
<div class="line"><a id="l00536" name="l00536"></a><span class="lineno"> 536</span> <span class="keywordtype">int</span> p = q[1], x = q[2];</div>
|
||||
<div class="line"><a id="l00537" name="l00537"></a><span class="lineno"> 537</span> hld.<a class="code hl_function" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html#a9f1cb54ed09fde931bf3220d75ee4c57">update</a>(p - 1, x);</div>
|
||||
<div class="line"><a id="l00538" name="l00538"></a><span class="lineno"> 538</span> } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (type == 2) {</div>
|
||||
<div class="line"><a id="l00539" name="l00539"></a><span class="lineno"> 539</span> <span class="keywordtype">int</span> a = q[1], b = q[2];</div>
|
||||
<div class="line"><a id="l00540" name="l00540"></a><span class="lineno"> 540</span> code_result.push_back(hld.<a class="code hl_function" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html#a4dfbf5d9df825eeb63b294c6849bdcab">query</a>(a - 1, b - 1));</div>
|
||||
<div class="line"><a id="l00541" name="l00541"></a><span class="lineno"> 541</span> } <span class="keywordflow">else</span> {</div>
|
||||
<div class="line"><a id="l00542" name="l00542"></a><span class="lineno"> 542</span> <span class="keywordflow">continue</span>;</div>
|
||||
<div class="line"><a id="l00543" name="l00543"></a><span class="lineno"> 543</span> }</div>
|
||||
<div class="line"><a id="l00544" name="l00544"></a><span class="lineno"> 544</span> }</div>
|
||||
<div class="line"><a id="l00545" name="l00545"></a><span class="lineno"> 545</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < static_cast<int>(expected_result.size()); i++) {</div>
|
||||
<div class="line"><a id="l00546" name="l00546"></a><span class="lineno"> 546</span> assert(expected_result[i] == code_result[i]);</div>
|
||||
<div class="line"><a id="l00547" name="l00547"></a><span class="lineno"> 547</span> }</div>
|
||||
<div class="line"><a id="l00548" name="l00548"></a><span class="lineno"> 548</span> std::cout << <span class="stringliteral">"\nTest 1 passed!\n"</span>;</div>
|
||||
<div class="line"><a id="l00549" name="l00549"></a><span class="lineno"> 549</span>}</div>
|
||||
</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 << <span class="stringliteral">"Test 2:\n"</span>;</div>
|
||||
<div class="line"><a id="l00551" name="l00551"></a><span class="lineno"> 551</span> </div>
|
||||
<div class="line"><a id="l00552" name="l00552"></a><span class="lineno"> 552</span> <span class="comment">// Test details (Bamboo)</span></div>
|
||||
<div class="line"><a id="l00553" name="l00553"></a><span class="lineno"> 553</span> <span class="keywordtype">int</span> n = 10;</div>
|
||||
<div class="line"><a id="l00554" name="l00554"></a><span class="lineno"> 554</span> std::vector<int64_t> node_values = {1, 8, 6, 8, 6, 2, 9, 2, 3, 2};</div>
|
||||
<div class="line"><a id="l00555" name="l00555"></a><span class="lineno"> 555</span> std::vector<std::vector<int>> edges = {</div>
|
||||
<div class="line"><a id="l00556" name="l00556"></a><span class="lineno"> 556</span> {10, 5}, {6, 2}, {10, 7}, {5, 2}, {3, 9}, {8, 3}, {1, 4}, {6, 4}, {8, 7}};</div>
|
||||
<div class="line"><a id="l00557" name="l00557"></a><span class="lineno"> 557</span> std::vector<std::vector<int>> queries = {</div>
|
||||
<div class="line"><a id="l00558" name="l00558"></a><span class="lineno"> 558</span> {2, 1, 10}, {2, 1, 6}, {1, 3, 4}, {2, 1, 9}, {1, 5, 3},</div>
|
||||
<div class="line"><a id="l00559" name="l00559"></a><span class="lineno"> 559</span> {1, 7, 8}, {2, 1, 4}, {2, 1, 8}, {1, 1, 4}, {1, 2, 7}};</div>
|
||||
<div class="line"><a id="l00560" name="l00560"></a><span class="lineno"> 560</span> std::vector<int> expected_result = {27, 11, 45, 9, 34};</div>
|
||||
<div class="line"><a id="l00561" name="l00561"></a><span class="lineno"> 561</span> std::vector<int> code_result;</div>
|
||||
<div class="line"><a id="l00562" name="l00562"></a><span class="lineno"> 562</span> </div>
|
||||
<div class="line"><a id="l00563" name="l00563"></a><span class="lineno"> 563</span> <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">range_queries::heavy_light_decomposition::HLD<int64_t></a> hld(n);</div>
|
||||
<div class="line"><a id="l00564" name="l00564"></a><span class="lineno"> 564</span> hld.<a class="code hl_function" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#a04cd96efaba147b19d3afc769b90ff70">set_node_val</a>(node_values);</div>
|
||||
<div class="line"><a id="l00565" name="l00565"></a><span class="lineno"> 565</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < n - 1; i++) {</div>
|
||||
<div class="line"><a id="l00566" name="l00566"></a><span class="lineno"> 566</span> <span class="keywordtype">int</span> u = edges[i][0], v = edges[i][1];</div>
|
||||
<div class="line"><a id="l00567" name="l00567"></a><span class="lineno"> 567</span> hld.<a class="code hl_function" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#a79ab4601c4a95c0902ac04e779e5f54d">add_edge</a>(u - 1, v - 1);</div>
|
||||
<div class="line"><a id="l00568" name="l00568"></a><span class="lineno"> 568</span> }</div>
|
||||
<div class="line"><a id="l00569" name="l00569"></a><span class="lineno"> 569</span> hld.<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="l00570" name="l00570"></a><span class="lineno"> 570</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &q : queries) {</div>
|
||||
<div class="line"><a id="l00571" name="l00571"></a><span class="lineno"> 571</span> <span class="keywordtype">int</span> type = q[0];</div>
|
||||
<div class="line"><a id="l00572" name="l00572"></a><span class="lineno"> 572</span> <span class="keywordflow">if</span> (type == 1) {</div>
|
||||
<div class="line"><a id="l00573" name="l00573"></a><span class="lineno"> 573</span> <span class="keywordtype">int</span> p = q[1], x = q[2];</div>
|
||||
<div class="line"><a id="l00574" name="l00574"></a><span class="lineno"> 574</span> hld.<a class="code hl_function" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html#a9f1cb54ed09fde931bf3220d75ee4c57">update</a>(p - 1, x);</div>
|
||||
<div class="line"><a id="l00575" name="l00575"></a><span class="lineno"> 575</span> } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (type == 2) {</div>
|
||||
<div class="line"><a id="l00576" name="l00576"></a><span class="lineno"> 576</span> <span class="keywordtype">int</span> a = q[1], b = q[2];</div>
|
||||
<div class="line"><a id="l00577" name="l00577"></a><span class="lineno"> 577</span> code_result.push_back(hld.<a class="code hl_function" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html#a4dfbf5d9df825eeb63b294c6849bdcab">query</a>(a - 1, b - 1));</div>
|
||||
<div class="line"><a id="l00578" name="l00578"></a><span class="lineno"> 578</span> } <span class="keywordflow">else</span> {</div>
|
||||
<div class="line"><a id="l00579" name="l00579"></a><span class="lineno"> 579</span> <span class="keywordflow">continue</span>;</div>
|
||||
<div class="line"><a id="l00580" name="l00580"></a><span class="lineno"> 580</span> }</div>
|
||||
<div class="line"><a id="l00581" name="l00581"></a><span class="lineno"> 581</span> }</div>
|
||||
<div class="line"><a id="l00582" name="l00582"></a><span class="lineno"> 582</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < static_cast<int>(expected_result.size()); i++) {</div>
|
||||
<div class="line"><a id="l00583" name="l00583"></a><span class="lineno"> 583</span> assert(expected_result[i] == code_result[i]);</div>
|
||||
<div class="line"><a id="l00584" name="l00584"></a><span class="lineno"> 584</span> }</div>
|
||||
<div class="line"><a id="l00585" name="l00585"></a><span class="lineno"> 585</span> std::cout << <span class="stringliteral">"\nTest2 passed!\n"</span>;</div>
|
||||
<div class="line"><a id="l00586" name="l00586"></a><span class="lineno"> 586</span>}</div>
|
||||
<div class="line"><a id="l00550" name="l00550"></a><span class="lineno"> 550</span></div>
|
||||
<div class="foldopen" id="foldopen00555" data-start="{" data-end="}">
|
||||
<div class="line"><a id="l00555" name="l00555"></a><span class="lineno"><a class="line" href="../../d2/de9/heavy__light__decomposition_8cpp.html#a458410412185a5f09199deaff7157a8d"> 555</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="l00556" name="l00556"></a><span class="lineno"> 556</span> std::cout << <span class="stringliteral">"Test 2:\n"</span>;</div>
|
||||
<div class="line"><a id="l00557" name="l00557"></a><span class="lineno"> 557</span> </div>
|
||||
<div class="line"><a id="l00558" name="l00558"></a><span class="lineno"> 558</span> <span class="comment">// Test details (Bamboo)</span></div>
|
||||
<div class="line"><a id="l00559" name="l00559"></a><span class="lineno"> 559</span> <span class="keywordtype">int</span> n = 10;</div>
|
||||
<div class="line"><a id="l00560" name="l00560"></a><span class="lineno"> 560</span> std::vector<int64_t> node_values = {1, 8, 6, 8, 6, 2, 9, 2, 3, 2};</div>
|
||||
<div class="line"><a id="l00561" name="l00561"></a><span class="lineno"> 561</span> std::vector<std::vector<int>> edges = {{10, 5}, {6, 2}, {10, 7},</div>
|
||||
<div class="line"><a id="l00562" name="l00562"></a><span class="lineno"> 562</span> {5, 2}, {3, 9}, {8, 3},</div>
|
||||
<div class="line"><a id="l00563" name="l00563"></a><span class="lineno"> 563</span> {1, 4}, {6, 4}, {8, 7}};</div>
|
||||
<div class="line"><a id="l00564" name="l00564"></a><span class="lineno"> 564</span> std::vector<std::vector<int>> queries = {</div>
|
||||
<div class="line"><a id="l00565" name="l00565"></a><span class="lineno"> 565</span> {2, 1, 10}, {2, 1, 6}, {1, 3, 4}, {2, 1, 9}, {1, 5, 3},</div>
|
||||
<div class="line"><a id="l00566" name="l00566"></a><span class="lineno"> 566</span> {1, 7, 8}, {2, 1, 4}, {2, 1, 8}, {1, 1, 4}, {1, 2, 7}};</div>
|
||||
<div class="line"><a id="l00567" name="l00567"></a><span class="lineno"> 567</span> std::vector<int> expected_result = {27, 11, 45, 9, 34};</div>
|
||||
<div class="line"><a id="l00568" name="l00568"></a><span class="lineno"> 568</span> std::vector<int> code_result;</div>
|
||||
<div class="line"><a id="l00569" name="l00569"></a><span class="lineno"> 569</span> </div>
|
||||
<div class="line"><a id="l00570" name="l00570"></a><span class="lineno"> 570</span> <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">range_queries::heavy_light_decomposition::HLD<int64_t></a> hld(n);</div>
|
||||
<div class="line"><a id="l00571" name="l00571"></a><span class="lineno"> 571</span> hld.<a class="code hl_function" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#a04cd96efaba147b19d3afc769b90ff70">set_node_val</a>(node_values);</div>
|
||||
<div class="line"><a id="l00572" name="l00572"></a><span class="lineno"> 572</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < n - 1; i++) {</div>
|
||||
<div class="line"><a id="l00573" name="l00573"></a><span class="lineno"> 573</span> <span class="keywordtype">int</span> u = edges[i][0], v = edges[i][1];</div>
|
||||
<div class="line"><a id="l00574" name="l00574"></a><span class="lineno"> 574</span> hld.<a class="code hl_function" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#a79ab4601c4a95c0902ac04e779e5f54d">add_edge</a>(u - 1, v - 1);</div>
|
||||
<div class="line"><a id="l00575" name="l00575"></a><span class="lineno"> 575</span> }</div>
|
||||
<div class="line"><a id="l00576" name="l00576"></a><span class="lineno"> 576</span> hld.<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="l00577" name="l00577"></a><span class="lineno"> 577</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &q : queries) {</div>
|
||||
<div class="line"><a id="l00578" name="l00578"></a><span class="lineno"> 578</span> <span class="keywordtype">int</span> type = q[0];</div>
|
||||
<div class="line"><a id="l00579" name="l00579"></a><span class="lineno"> 579</span> <span class="keywordflow">if</span> (type == 1) {</div>
|
||||
<div class="line"><a id="l00580" name="l00580"></a><span class="lineno"> 580</span> <span class="keywordtype">int</span> p = q[1], x = q[2];</div>
|
||||
<div class="line"><a id="l00581" name="l00581"></a><span class="lineno"> 581</span> hld.<a class="code hl_function" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html#a9f1cb54ed09fde931bf3220d75ee4c57">update</a>(p - 1, x);</div>
|
||||
<div class="line"><a id="l00582" name="l00582"></a><span class="lineno"> 582</span> } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (type == 2) {</div>
|
||||
<div class="line"><a id="l00583" name="l00583"></a><span class="lineno"> 583</span> <span class="keywordtype">int</span> a = q[1], b = q[2];</div>
|
||||
<div class="line"><a id="l00584" name="l00584"></a><span class="lineno"> 584</span> code_result.push_back(hld.<a class="code hl_function" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html#a4dfbf5d9df825eeb63b294c6849bdcab">query</a>(a - 1, b - 1));</div>
|
||||
<div class="line"><a id="l00585" name="l00585"></a><span class="lineno"> 585</span> } <span class="keywordflow">else</span> {</div>
|
||||
<div class="line"><a id="l00586" name="l00586"></a><span class="lineno"> 586</span> <span class="keywordflow">continue</span>;</div>
|
||||
<div class="line"><a id="l00587" name="l00587"></a><span class="lineno"> 587</span> }</div>
|
||||
<div class="line"><a id="l00588" name="l00588"></a><span class="lineno"> 588</span> }</div>
|
||||
<div class="line"><a id="l00589" name="l00589"></a><span class="lineno"> 589</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < static_cast<int>(expected_result.size()); i++) {</div>
|
||||
<div class="line"><a id="l00590" name="l00590"></a><span class="lineno"> 590</span> assert(expected_result[i] == code_result[i]);</div>
|
||||
<div class="line"><a id="l00591" name="l00591"></a><span class="lineno"> 591</span> }</div>
|
||||
<div class="line"><a id="l00592" name="l00592"></a><span class="lineno"> 592</span> std::cout << <span class="stringliteral">"\nTest2 passed!\n"</span>;</div>
|
||||
<div class="line"><a id="l00593" name="l00593"></a><span class="lineno"> 593</span>}</div>
|
||||
</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 << <span class="stringliteral">"Test 3:\n"</span>;</div>
|
||||
<div class="line"><a id="l00594" name="l00594"></a><span class="lineno"> 594</span> </div>
|
||||
<div class="line"><a id="l00595" name="l00595"></a><span class="lineno"> 595</span> <span class="comment">// Test details</span></div>
|
||||
<div class="line"><a id="l00596" name="l00596"></a><span class="lineno"> 596</span> <span class="keywordtype">int</span> n = 8;</div>
|
||||
<div class="line"><a id="l00597" name="l00597"></a><span class="lineno"> 597</span> std::vector<int64_t> node_values = {1, 8, 6, 8, 6, 2, 9, 2};</div>
|
||||
<div class="line"><a id="l00598" name="l00598"></a><span class="lineno"> 598</span> std::vector<std::vector<int>> edges = {{1, 2}, {2, 3}, {3, 4}, {1, 5},</div>
|
||||
<div class="line"><a id="l00599" name="l00599"></a><span class="lineno"> 599</span> {6, 3}, {7, 5}, {8, 7}};</div>
|
||||
<div class="line"><a id="l00600" name="l00600"></a><span class="lineno"> 600</span> std::vector<std::vector<int>> queries = {</div>
|
||||
<div class="line"><a id="l00601" name="l00601"></a><span class="lineno"> 601</span> {2, 6, 8}, {2, 3, 6}, {1, 3, 4}, {2, 7, 1}, {1, 5, 3},</div>
|
||||
<div class="line"><a id="l00602" name="l00602"></a><span class="lineno"> 602</span> {1, 7, 8}, {2, 6, 4}, {2, 7, 8}, {1, 1, 4}, {1, 2, 7}};</div>
|
||||
<div class="line"><a id="l00603" name="l00603"></a><span class="lineno"> 603</span> std::vector<int> expected_result = {34, 8, 16, 14, 10};</div>
|
||||
<div class="line"><a id="l00604" name="l00604"></a><span class="lineno"> 604</span> std::vector<int> code_result;</div>
|
||||
<div class="line"><a id="l00605" name="l00605"></a><span class="lineno"> 605</span> </div>
|
||||
<div class="line"><a id="l00606" name="l00606"></a><span class="lineno"> 606</span> <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">range_queries::heavy_light_decomposition::HLD<int64_t></a> hld(n);</div>
|
||||
<div class="line"><a id="l00607" name="l00607"></a><span class="lineno"> 607</span> hld.<a class="code hl_function" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#a04cd96efaba147b19d3afc769b90ff70">set_node_val</a>(node_values);</div>
|
||||
<div class="line"><a id="l00608" name="l00608"></a><span class="lineno"> 608</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < n - 1; i++) {</div>
|
||||
<div class="line"><a id="l00609" name="l00609"></a><span class="lineno"> 609</span> <span class="keywordtype">int</span> u = edges[i][0], v = edges[i][1];</div>
|
||||
<div class="line"><a id="l00610" name="l00610"></a><span class="lineno"> 610</span> hld.<a class="code hl_function" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#a79ab4601c4a95c0902ac04e779e5f54d">add_edge</a>(u - 1, v - 1);</div>
|
||||
<div class="line"><a id="l00611" name="l00611"></a><span class="lineno"> 611</span> }</div>
|
||||
<div class="line"><a id="l00612" name="l00612"></a><span class="lineno"> 612</span> hld.<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="l00613" name="l00613"></a><span class="lineno"> 613</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &q : queries) {</div>
|
||||
<div class="line"><a id="l00614" name="l00614"></a><span class="lineno"> 614</span> <span class="keywordtype">int</span> type = q[0];</div>
|
||||
<div class="line"><a id="l00615" name="l00615"></a><span class="lineno"> 615</span> <span class="keywordflow">if</span> (type == 1) {</div>
|
||||
<div class="line"><a id="l00616" name="l00616"></a><span class="lineno"> 616</span> <span class="keywordtype">int</span> p = q[1], x = q[2];</div>
|
||||
<div class="line"><a id="l00617" name="l00617"></a><span class="lineno"> 617</span> hld.<a class="code hl_function" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html#a9f1cb54ed09fde931bf3220d75ee4c57">update</a>(p - 1, x);</div>
|
||||
<div class="line"><a id="l00618" name="l00618"></a><span class="lineno"> 618</span> } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (type == 2) {</div>
|
||||
<div class="line"><a id="l00619" name="l00619"></a><span class="lineno"> 619</span> <span class="keywordtype">int</span> a = q[1], b = q[2];</div>
|
||||
<div class="line"><a id="l00620" name="l00620"></a><span class="lineno"> 620</span> code_result.push_back(hld.<a class="code hl_function" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html#a4dfbf5d9df825eeb63b294c6849bdcab">query</a>(a - 1, b - 1));</div>
|
||||
<div class="line"><a id="l00621" name="l00621"></a><span class="lineno"> 621</span> } <span class="keywordflow">else</span> {</div>
|
||||
<div class="line"><a id="l00622" name="l00622"></a><span class="lineno"> 622</span> <span class="keywordflow">continue</span>;</div>
|
||||
<div class="line"><a id="l00623" name="l00623"></a><span class="lineno"> 623</span> }</div>
|
||||
<div class="line"><a id="l00624" name="l00624"></a><span class="lineno"> 624</span> }</div>
|
||||
<div class="line"><a id="l00625" name="l00625"></a><span class="lineno"> 625</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < static_cast<int>(expected_result.size()); i++) {</div>
|
||||
<div class="line"><a id="l00626" name="l00626"></a><span class="lineno"> 626</span> assert(expected_result[i] == code_result[i]);</div>
|
||||
<div class="line"><a id="l00627" name="l00627"></a><span class="lineno"> 627</span> }</div>
|
||||
<div class="line"><a id="l00628" name="l00628"></a><span class="lineno"> 628</span> std::cout << <span class="stringliteral">"\nTest3 passed!\n"</span>;</div>
|
||||
<div class="line"><a id="l00629" name="l00629"></a><span class="lineno"> 629</span>}</div>
|
||||
<div class="line"><a id="l00594" name="l00594"></a><span class="lineno"> 594</span></div>
|
||||
<div class="foldopen" id="foldopen00599" data-start="{" data-end="}">
|
||||
<div class="line"><a id="l00599" name="l00599"></a><span class="lineno"><a class="line" href="../../d2/de9/heavy__light__decomposition_8cpp.html#af31ec5409537703d9c8a47350386b32a"> 599</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="l00600" name="l00600"></a><span class="lineno"> 600</span> std::cout << <span class="stringliteral">"Test 3:\n"</span>;</div>
|
||||
<div class="line"><a id="l00601" name="l00601"></a><span class="lineno"> 601</span> </div>
|
||||
<div class="line"><a id="l00602" name="l00602"></a><span class="lineno"> 602</span> <span class="comment">// Test details</span></div>
|
||||
<div class="line"><a id="l00603" name="l00603"></a><span class="lineno"> 603</span> <span class="keywordtype">int</span> n = 8;</div>
|
||||
<div class="line"><a id="l00604" name="l00604"></a><span class="lineno"> 604</span> std::vector<int64_t> node_values = {1, 8, 6, 8, 6, 2, 9, 2};</div>
|
||||
<div class="line"><a id="l00605" name="l00605"></a><span class="lineno"> 605</span> std::vector<std::vector<int>> edges = {{1, 2}, {2, 3}, {3, 4}, {1, 5},</div>
|
||||
<div class="line"><a id="l00606" name="l00606"></a><span class="lineno"> 606</span> {6, 3}, {7, 5}, {8, 7}};</div>
|
||||
<div class="line"><a id="l00607" name="l00607"></a><span class="lineno"> 607</span> std::vector<std::vector<int>> queries = {</div>
|
||||
<div class="line"><a id="l00608" name="l00608"></a><span class="lineno"> 608</span> {2, 6, 8}, {2, 3, 6}, {1, 3, 4}, {2, 7, 1}, {1, 5, 3},</div>
|
||||
<div class="line"><a id="l00609" name="l00609"></a><span class="lineno"> 609</span> {1, 7, 8}, {2, 6, 4}, {2, 7, 8}, {1, 1, 4}, {1, 2, 7}};</div>
|
||||
<div class="line"><a id="l00610" name="l00610"></a><span class="lineno"> 610</span> std::vector<int> expected_result = {34, 8, 16, 14, 10};</div>
|
||||
<div class="line"><a id="l00611" name="l00611"></a><span class="lineno"> 611</span> std::vector<int> code_result;</div>
|
||||
<div class="line"><a id="l00612" name="l00612"></a><span class="lineno"> 612</span> </div>
|
||||
<div class="line"><a id="l00613" name="l00613"></a><span class="lineno"> 613</span> <a class="code hl_class" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html">range_queries::heavy_light_decomposition::HLD<int64_t></a> hld(n);</div>
|
||||
<div class="line"><a id="l00614" name="l00614"></a><span class="lineno"> 614</span> hld.<a class="code hl_function" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#a04cd96efaba147b19d3afc769b90ff70">set_node_val</a>(node_values);</div>
|
||||
<div class="line"><a id="l00615" name="l00615"></a><span class="lineno"> 615</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < n - 1; i++) {</div>
|
||||
<div class="line"><a id="l00616" name="l00616"></a><span class="lineno"> 616</span> <span class="keywordtype">int</span> u = edges[i][0], v = edges[i][1];</div>
|
||||
<div class="line"><a id="l00617" name="l00617"></a><span class="lineno"> 617</span> hld.<a class="code hl_function" href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#a79ab4601c4a95c0902ac04e779e5f54d">add_edge</a>(u - 1, v - 1);</div>
|
||||
<div class="line"><a id="l00618" name="l00618"></a><span class="lineno"> 618</span> }</div>
|
||||
<div class="line"><a id="l00619" name="l00619"></a><span class="lineno"> 619</span> hld.<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="l00620" name="l00620"></a><span class="lineno"> 620</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &q : queries) {</div>
|
||||
<div class="line"><a id="l00621" name="l00621"></a><span class="lineno"> 621</span> <span class="keywordtype">int</span> type = q[0];</div>
|
||||
<div class="line"><a id="l00622" name="l00622"></a><span class="lineno"> 622</span> <span class="keywordflow">if</span> (type == 1) {</div>
|
||||
<div class="line"><a id="l00623" name="l00623"></a><span class="lineno"> 623</span> <span class="keywordtype">int</span> p = q[1], x = q[2];</div>
|
||||
<div class="line"><a id="l00624" name="l00624"></a><span class="lineno"> 624</span> hld.<a class="code hl_function" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html#a9f1cb54ed09fde931bf3220d75ee4c57">update</a>(p - 1, x);</div>
|
||||
<div class="line"><a id="l00625" name="l00625"></a><span class="lineno"> 625</span> } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (type == 2) {</div>
|
||||
<div class="line"><a id="l00626" name="l00626"></a><span class="lineno"> 626</span> <span class="keywordtype">int</span> a = q[1], b = q[2];</div>
|
||||
<div class="line"><a id="l00627" name="l00627"></a><span class="lineno"> 627</span> code_result.push_back(hld.<a class="code hl_function" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html#a4dfbf5d9df825eeb63b294c6849bdcab">query</a>(a - 1, b - 1));</div>
|
||||
<div class="line"><a id="l00628" name="l00628"></a><span class="lineno"> 628</span> } <span class="keywordflow">else</span> {</div>
|
||||
<div class="line"><a id="l00629" name="l00629"></a><span class="lineno"> 629</span> <span class="keywordflow">continue</span>;</div>
|
||||
<div class="line"><a id="l00630" name="l00630"></a><span class="lineno"> 630</span> }</div>
|
||||
<div class="line"><a id="l00631" name="l00631"></a><span class="lineno"> 631</span> }</div>
|
||||
<div class="line"><a id="l00632" name="l00632"></a><span class="lineno"> 632</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < static_cast<int>(expected_result.size()); i++) {</div>
|
||||
<div class="line"><a id="l00633" name="l00633"></a><span class="lineno"> 633</span> assert(expected_result[i] == code_result[i]);</div>
|
||||
<div class="line"><a id="l00634" name="l00634"></a><span class="lineno"> 634</span> }</div>
|
||||
<div class="line"><a id="l00635" name="l00635"></a><span class="lineno"> 635</span> std::cout << <span class="stringliteral">"\nTest3 passed!\n"</span>;</div>
|
||||
<div class="line"><a id="l00636" name="l00636"></a><span class="lineno"> 636</span>}</div>
|
||||
</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>
|
||||
<div class="line"><a id="l00636" name="l00636"></a><span class="lineno"> 636</span> <a class="code hl_function" href="../../d2/de9/heavy__light__decomposition_8cpp.html#a458410412185a5f09199deaff7157a8d">test_2</a>();</div>
|
||||
<div class="line"><a id="l00637" name="l00637"></a><span class="lineno"> 637</span> <a class="code hl_function" href="../../d2/de9/heavy__light__decomposition_8cpp.html#af31ec5409537703d9c8a47350386b32a">test_3</a>();</div>
|
||||
<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 class="line"><a id="l00637" name="l00637"></a><span class="lineno"> 637</span></div>
|
||||
<div class="foldopen" id="foldopen00641" data-start="{" data-end="}">
|
||||
<div class="line"><a id="l00641" name="l00641"></a><span class="lineno"><a class="line" href="../../d2/de9/heavy__light__decomposition_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4"> 641</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="l00642" name="l00642"></a><span class="lineno"> 642</span> <a class="code hl_function" href="../../d2/de9/heavy__light__decomposition_8cpp.html#a34b8683a2b429de5cce57e6d733ec817">test_1</a>();</div>
|
||||
<div class="line"><a id="l00643" name="l00643"></a><span class="lineno"> 643</span> <a class="code hl_function" href="../../d2/de9/heavy__light__decomposition_8cpp.html#a458410412185a5f09199deaff7157a8d">test_2</a>();</div>
|
||||
<div class="line"><a id="l00644" name="l00644"></a><span class="lineno"> 644</span> <a class="code hl_function" href="../../d2/de9/heavy__light__decomposition_8cpp.html#af31ec5409537703d9c8a47350386b32a">test_3</a>();</div>
|
||||
<div class="line"><a id="l00645" name="l00645"></a><span class="lineno"> 645</span> <span class="keywordflow">return</span> 0;</div>
|
||||
<div class="line"><a id="l00646" name="l00646"></a><span class="lineno"> 646</span>}</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< int > 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< int > 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>
|
||||
<div class="ttc" id="aclassrange__queries_1_1heavy__light__decomposition_1_1_h_l_d_html_a9f1cb54ed09fde931bf3220d75ee4c57"><div class="ttname"><a href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html#a9f1cb54ed09fde931bf3220d75ee4c57">range_queries::heavy_light_decomposition::HLD::update</a></div><div class="ttdeci">void update(int node, X val)</div><div class="ttdoc">This function updates the value at node with val.</div><div class="ttdef"><b>Definition</b> <a href="#l00475">heavy_light_decomposition.cpp:475</a></div></div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1heavy__light__decomposition_1_1_h_l_d_html_aa86a91ae0cd7898990a8170a2f2c9cda"><div class="ttname"><a href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html#aa86a91ae0cd7898990a8170a2f2c9cda">range_queries::heavy_light_decomposition::HLD::h_label</a></div><div class="ttdeci">std::vector< int > h_label</div><div class="ttdoc">stores the label of a node</div><div class="ttdef"><b>Definition</b> <a href="#l00339">heavy_light_decomposition.cpp:339</a></div></div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1heavy__light__decomposition_1_1_h_l_d_html_ae9e979edd69678b85665c01e2ee97828"><div class="ttname"><a href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html#ae9e979edd69678b85665c01e2ee97828">range_queries::heavy_light_decomposition::HLD::init</a></div><div class="ttdeci">void init()</div><div class="ttdoc">This function must be called after the tree adjacency list and node values are populated The function...</div><div class="ttdef"><b>Definition</b> <a href="#l00450">heavy_light_decomposition.cpp:450</a></div></div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1heavy__light__decomposition_1_1_h_l_d_html_af64848d6630c39d0f09ce2359cc7c4f8"><div class="ttname"><a href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html#af64848d6630c39d0f09ce2359cc7c4f8">range_queries::heavy_light_decomposition::HLD::dfs_hc</a></div><div class="ttdeci">void dfs_hc(int u, int p=-1)</div><div class="ttdoc">Utility function to assign heavy child to each node (-1 for a leaf node)</div><div class="ttdef"><b>Definition</b> <a href="#l00350">heavy_light_decomposition.cpp:350</a></div></div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1heavy__light__decomposition_1_1_s_g_html"><div class="ttname"><a href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html">range_queries::heavy_light_decomposition::SG</a></div><div class="ttdoc">Segment Tree, to store heavy chains.</div><div class="ttdef"><b>Definition</b> <a href="#l00254">heavy_light_decomposition.cpp:254</a></div></div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1heavy__light__decomposition_1_1_s_g_html_a1fda852e6e522707fd97f61cdb0a2591"><div class="ttname"><a href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html#a1fda852e6e522707fd97f61cdb0a2591">range_queries::heavy_light_decomposition::SG::query</a></div><div class="ttdeci">X query(int l, int r)</div><div class="ttdoc">Make a range query from node label l to node label r.</div><div class="ttdef"><b>Definition</b> <a href="#l00305">heavy_light_decomposition.cpp:305</a></div></div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1heavy__light__decomposition_1_1_s_g_html_a3c75bf5770790f8eba8cc92227b5400c"><div class="ttname"><a href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html#a3c75bf5770790f8eba8cc92227b5400c">range_queries::heavy_light_decomposition::SG::update</a></div><div class="ttdeci">void update(int p, X v)</div><div class="ttdoc">Update the value at a node.</div><div class="ttdef"><b>Definition</b> <a href="#l00293">heavy_light_decomposition.cpp:293</a></div></div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1heavy__light__decomposition_1_1_s_g_html_a41c733f5f5e262b308f7cb95c88c1e74"><div class="ttname"><a href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html#a41c733f5f5e262b308f7cb95c88c1e74">range_queries::heavy_light_decomposition::SG::combine</a></div><div class="ttdeci">X combine(X lhs, X rhs)</div><div class="ttdoc">Function that specifies the type of operation involved when segments are combined.</div><div class="ttdef"><b>Definition</b> <a href="#l00274">heavy_light_decomposition.cpp:274</a></div></div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1heavy__light__decomposition_1_1_s_g_html_aa7f93971a9f891e0bbb7023081f379d5"><div class="ttname"><a href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html#aa7f93971a9f891e0bbb7023081f379d5">range_queries::heavy_light_decomposition::SG::sret_init</a></div><div class="ttdeci">X sret_init</div><div class="ttdoc">inital query return value</div><div class="ttdef"><b>Definition</b> <a href="#l00264">heavy_light_decomposition.cpp:264</a></div></div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1heavy__light__decomposition_1_1_s_g_html_ac6d912bbfafa3a7509f66bbc1729ca25"><div class="ttname"><a href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html#ac6d912bbfafa3a7509f66bbc1729ca25">range_queries::heavy_light_decomposition::SG::s_size</a></div><div class="ttdeci">int s_size</div><div class="ttdoc">number of leaves in the segment tree</div><div class="ttdef"><b>Definition</b> <a href="#l00263">heavy_light_decomposition.cpp:263</a></div></div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1heavy__light__decomposition_1_1_s_g_html_ad3b942be27a1b0fe3cff6cb6edf01294"><div class="ttname"><a href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html#ad3b942be27a1b0fe3cff6cb6edf01294">range_queries::heavy_light_decomposition::SG::set_sret_init</a></div><div class="ttdeci">void set_sret_init(X new_sret_init)</div><div class="ttdoc">Set the initialization for the query data type, based on requirement.</div><div class="ttdef"><b>Definition</b> <a href="#l00329">heavy_light_decomposition.cpp:329</a></div></div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1heavy__light__decomposition_1_1_s_g_html_afba5c1225ba04c0025c7786c09ff28f1"><div class="ttname"><a href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html#afba5c1225ba04c0025c7786c09ff28f1">range_queries::heavy_light_decomposition::SG::SG</a></div><div class="ttdeci">SG(int size)</div><div class="ttdoc">Class parameterized constructor. Resizes the and initilizes the data members.</div><div class="ttdef"><b>Definition</b> <a href="#l00282">heavy_light_decomposition.cpp:282</a></div></div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1heavy__light__decomposition_1_1_s_g_html_afbf8a9cb9449d5ca844f4e141a801e6a"><div class="ttname"><a href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html#afbf8a9cb9449d5ca844f4e141a801e6a">range_queries::heavy_light_decomposition::SG::s_tree</a></div><div class="ttdeci">std::vector< X > s_tree</div><div class="ttdoc">Everything here is private, and can only be accessed through the methods, in the derived class (HLD)</div><div class="ttdef"><b>Definition</b> <a href="#l00262">heavy_light_decomposition.cpp:262</a></div></div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1heavy__light__decomposition_1_1_tree_html"><div class="ttname"><a href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html">range_queries::heavy_light_decomposition::Tree</a></div><div class="ttdoc">A Basic Tree, which supports binary lifting.</div><div class="ttdef"><b>Definition</b> <a href="#l00078">heavy_light_decomposition.cpp:78</a></div></div>
|
||||
<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< X > &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< int > 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< X > 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< std::vector< int > > 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_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 &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>
|
||||
<div class="ttc" id="aclassrange__queries_1_1heavy__light__decomposition_1_1_tree_html_aa339c31ec74cd86a4842a8b09653d460"><div class="ttname"><a href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#aa339c31ec74cd86a4842a8b09653d460">range_queries::heavy_light_decomposition::Tree::dfs_size</a></div><div class="ttdeci">void dfs_size(int u, int p=-1)</div><div class="ttdoc">Utility function to compute sub-tree sizes.</div><div class="ttdef"><b>Definition</b> <a href="#l00101">heavy_light_decomposition.cpp:101</a></div></div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1heavy__light__decomposition_1_1_tree_html_aa6c37e840355b9fb2105181c578694e8"><div class="ttname"><a href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#aa6c37e840355b9fb2105181c578694e8">range_queries::heavy_light_decomposition::Tree::t_root</a></div><div class="ttdeci">int t_root</div><div class="ttdoc">the root of the tree</div><div class="ttdef"><b>Definition</b> <a href="#l00091">heavy_light_decomposition.cpp:91</a></div></div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1heavy__light__decomposition_1_1_tree_html_ab1aeaefa1bd97b867c652ba916fbdb43"><div class="ttname"><a href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#ab1aeaefa1bd97b867c652ba916fbdb43">range_queries::heavy_light_decomposition::Tree::t_adj</a></div><div class="ttdeci">std::vector< std::list< int > > t_adj</div><div class="ttdoc">an adjacency list to stores the tree edges</div><div class="ttdef"><b>Definition</b> <a href="#l00083">heavy_light_decomposition.cpp:83</a></div></div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1heavy__light__decomposition_1_1_tree_html_ab2ab020f798d00be2613ecf63074b7c1"><div class="ttname"><a href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#ab2ab020f798d00be2613ecf63074b7c1">range_queries::heavy_light_decomposition::Tree::t_maxlift</a></div><div class="ttdeci">const int t_maxlift</div><div class="ttdoc">maximum possible height of the tree</div><div class="ttdef"><b>Definition</b> <a href="#l00085">heavy_light_decomposition.cpp:85</a></div></div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1heavy__light__decomposition_1_1_tree_html_ab916d554afa8ca5230b4310c2c69fae0"><div class="ttname"><a href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#ab916d554afa8ca5230b4310c2c69fae0">range_queries::heavy_light_decomposition::Tree::change_root</a></div><div class="ttdeci">void change_root(int new_root)</div><div class="ttdoc">Set the root for the tree.</div><div class="ttdef"><b>Definition</b> <a href="#l00167">heavy_light_decomposition.cpp:167</a></div></div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1heavy__light__decomposition_1_1_tree_html_ac7761255f2ba06b398b9aae5e4dce5f3"><div class="ttname"><a href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#ac7761255f2ba06b398b9aae5e4dce5f3">range_queries::heavy_light_decomposition::Tree::lift</a></div><div class="ttdeci">void lift(int *const p, int dist)</div><div class="ttdoc">The function lifts a node, k units up the tree. The lifting is done in place, and the result is store...</div><div class="ttdef"><b>Definition</b> <a href="#l00200">heavy_light_decomposition.cpp:200</a></div></div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1heavy__light__decomposition_1_1_tree_html_ad22d760a5a33545a70e7ea5e1786c8dc"><div class="ttname"><a href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#ad22d760a5a33545a70e7ea5e1786c8dc">range_queries::heavy_light_decomposition::Tree::init</a></div><div class="ttdeci">void init()</div><div class="ttdoc">This function must be called after the tree adjacency list and node values are populated The function...</div><div class="ttdef"><b>Definition</b> <a href="#l00186">heavy_light_decomposition.cpp:186</a></div></div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1heavy__light__decomposition_1_1_tree_html_ada1494fccbc7f1f07b2f9be9f7e07ad5"><div class="ttname"><a href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#ada1494fccbc7f1f07b2f9be9f7e07ad5">range_queries::heavy_light_decomposition::Tree::t_size</a></div><div class="ttdeci">std::vector< int > t_size</div><div class="ttdoc">a vector to store the subtree size rooted at node</div><div class="ttdef"><b>Definition</b> <a href="#l00089">heavy_light_decomposition.cpp:89</a></div></div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1heavy__light__decomposition_1_1_tree_html_ae2b407e64aaf9878fbee7ee6efe9c7d4"><div class="ttname"><a href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#ae2b407e64aaf9878fbee7ee6efe9c7d4">range_queries::heavy_light_decomposition::Tree::lca</a></div><div class="ttdeci">int lca(int a, int b)</div><div class="ttdoc">The function returns the least common ancestor of two nodes.</div><div class="ttdef"><b>Definition</b> <a href="#l00229">heavy_light_decomposition.cpp:229</a></div></div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1heavy__light__decomposition_1_1_tree_html_ae4630fa70a80a1dc65a875488a67178a"><div class="ttname"><a href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#ae4630fa70a80a1dc65a875488a67178a">range_queries::heavy_light_decomposition::Tree::t_nodes</a></div><div class="ttdeci">const int t_nodes</div><div class="ttdoc">number of nodes</div><div class="ttdef"><b>Definition</b> <a href="#l00084">heavy_light_decomposition.cpp:84</a></div></div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1heavy__light__decomposition_1_1_tree_html_ae8de7aefcb6635d3dacdd174cd4890c4"><div class="ttname"><a href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#ae8de7aefcb6635d3dacdd174cd4890c4">range_queries::heavy_light_decomposition::Tree::dfs_lca</a></div><div class="ttdeci">void dfs_lca(int u, int p=-1)</div><div class="ttdoc">Utility function to populate the t_par vector.</div><div class="ttdef"><b>Definition</b> <a href="#l00116">heavy_light_decomposition.cpp:116</a></div></div>
|
||||
<div class="ttc" id="aheavy__light__decomposition_8cpp_html_a34b8683a2b429de5cce57e6d733ec817"><div class="ttname"><a href="../../d2/de9/heavy__light__decomposition_8cpp.html#a34b8683a2b429de5cce57e6d733ec817">test_1</a></div><div class="ttdeci">static void test_1()</div><div class="ttdef"><b>Definition</b> <a href="#l00505">heavy_light_decomposition.cpp:505</a></div></div>
|
||||
<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="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="#l00342">heavy_light_decomposition.cpp:342</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="#l00396">heavy_light_decomposition.cpp:396</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< int > 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="#l00347">heavy_light_decomposition.cpp:347</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="#l00377">heavy_light_decomposition.cpp:377</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="#l00495">heavy_light_decomposition.cpp:495</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="#l00441">heavy_light_decomposition.cpp:441</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="#l00344">heavy_light_decomposition.cpp:344</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="#l00415">heavy_light_decomposition.cpp:415</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< int > h_heavychlid</div><div class="ttdoc">stores the heavy child of a node</div><div class="ttdef"><b>Definition</b> <a href="#l00346">heavy_light_decomposition.cpp:346</a></div></div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1heavy__light__decomposition_1_1_h_l_d_html_a9f1cb54ed09fde931bf3220d75ee4c57"><div class="ttname"><a href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html#a9f1cb54ed09fde931bf3220d75ee4c57">range_queries::heavy_light_decomposition::HLD::update</a></div><div class="ttdeci">void update(int node, X val)</div><div class="ttdoc">This function updates the value at node with val.</div><div class="ttdef"><b>Definition</b> <a href="#l00481">heavy_light_decomposition.cpp:481</a></div></div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1heavy__light__decomposition_1_1_h_l_d_html_aa86a91ae0cd7898990a8170a2f2c9cda"><div class="ttname"><a href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html#aa86a91ae0cd7898990a8170a2f2c9cda">range_queries::heavy_light_decomposition::HLD::h_label</a></div><div class="ttdeci">std::vector< int > h_label</div><div class="ttdoc">stores the label of a node</div><div class="ttdef"><b>Definition</b> <a href="#l00345">heavy_light_decomposition.cpp:345</a></div></div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1heavy__light__decomposition_1_1_h_l_d_html_ae9e979edd69678b85665c01e2ee97828"><div class="ttname"><a href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html#ae9e979edd69678b85665c01e2ee97828">range_queries::heavy_light_decomposition::HLD::init</a></div><div class="ttdeci">void init()</div><div class="ttdoc">This function must be called after the tree adjacency list and node values are populated The function...</div><div class="ttdef"><b>Definition</b> <a href="#l00456">heavy_light_decomposition.cpp:456</a></div></div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1heavy__light__decomposition_1_1_h_l_d_html_af64848d6630c39d0f09ce2359cc7c4f8"><div class="ttname"><a href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html#af64848d6630c39d0f09ce2359cc7c4f8">range_queries::heavy_light_decomposition::HLD::dfs_hc</a></div><div class="ttdeci">void dfs_hc(int u, int p=-1)</div><div class="ttdoc">Utility function to assign heavy child to each node (-1 for a leaf node)</div><div class="ttdef"><b>Definition</b> <a href="#l00356">heavy_light_decomposition.cpp:356</a></div></div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1heavy__light__decomposition_1_1_s_g_html_a1fda852e6e522707fd97f61cdb0a2591"><div class="ttname"><a href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html#a1fda852e6e522707fd97f61cdb0a2591">range_queries::heavy_light_decomposition::SG::query</a></div><div class="ttdeci">X query(int l, int r)</div><div class="ttdoc">Make a range query from node label l to node label r.</div><div class="ttdef"><b>Definition</b> <a href="#l00309">heavy_light_decomposition.cpp:309</a></div></div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1heavy__light__decomposition_1_1_s_g_html_a3c75bf5770790f8eba8cc92227b5400c"><div class="ttname"><a href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html#a3c75bf5770790f8eba8cc92227b5400c">range_queries::heavy_light_decomposition::SG::update</a></div><div class="ttdeci">void update(int p, X v)</div><div class="ttdoc">Update the value at a node.</div><div class="ttdef"><b>Definition</b> <a href="#l00297">heavy_light_decomposition.cpp:297</a></div></div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1heavy__light__decomposition_1_1_s_g_html_a41c733f5f5e262b308f7cb95c88c1e74"><div class="ttname"><a href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html#a41c733f5f5e262b308f7cb95c88c1e74">range_queries::heavy_light_decomposition::SG::combine</a></div><div class="ttdeci">X combine(X lhs, X rhs)</div><div class="ttdoc">Function that specifies the type of operation involved when segments are combined.</div><div class="ttdef"><b>Definition</b> <a href="#l00278">heavy_light_decomposition.cpp:278</a></div></div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1heavy__light__decomposition_1_1_s_g_html_aa7f93971a9f891e0bbb7023081f379d5"><div class="ttname"><a href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html#aa7f93971a9f891e0bbb7023081f379d5">range_queries::heavy_light_decomposition::SG::sret_init</a></div><div class="ttdeci">X sret_init</div><div class="ttdoc">inital query return value</div><div class="ttdef"><b>Definition</b> <a href="#l00267">heavy_light_decomposition.cpp:267</a></div></div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1heavy__light__decomposition_1_1_s_g_html_ac6d912bbfafa3a7509f66bbc1729ca25"><div class="ttname"><a href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html#ac6d912bbfafa3a7509f66bbc1729ca25">range_queries::heavy_light_decomposition::SG::s_size</a></div><div class="ttdeci">int s_size</div><div class="ttdoc">number of leaves in the segment tree</div><div class="ttdef"><b>Definition</b> <a href="#l00266">heavy_light_decomposition.cpp:266</a></div></div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1heavy__light__decomposition_1_1_s_g_html_ad3b942be27a1b0fe3cff6cb6edf01294"><div class="ttname"><a href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html#ad3b942be27a1b0fe3cff6cb6edf01294">range_queries::heavy_light_decomposition::SG::set_sret_init</a></div><div class="ttdeci">void set_sret_init(X new_sret_init)</div><div class="ttdoc">Set the initialization for the query data type, based on requirement.</div><div class="ttdef"><b>Definition</b> <a href="#l00334">heavy_light_decomposition.cpp:334</a></div></div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1heavy__light__decomposition_1_1_s_g_html_afba5c1225ba04c0025c7786c09ff28f1"><div class="ttname"><a href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html#afba5c1225ba04c0025c7786c09ff28f1">range_queries::heavy_light_decomposition::SG::SG</a></div><div class="ttdeci">SG(int size)</div><div class="ttdoc">Class parameterized constructor. Resizes the and initilizes the data members.</div><div class="ttdef"><b>Definition</b> <a href="#l00286">heavy_light_decomposition.cpp:286</a></div></div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1heavy__light__decomposition_1_1_s_g_html_afbf8a9cb9449d5ca844f4e141a801e6a"><div class="ttname"><a href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html#afbf8a9cb9449d5ca844f4e141a801e6a">range_queries::heavy_light_decomposition::SG::s_tree</a></div><div class="ttdeci">std::vector< X > s_tree</div><div class="ttdoc">Everything here is private, and can only be accessed through the methods, in the derived class (HLD)</div><div class="ttdef"><b>Definition</b> <a href="#l00265">heavy_light_decomposition.cpp:265</a></div></div>
|
||||
<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< X > &node_val)</div><div class="ttdoc">Set the values for all the nodes.</div><div class="ttdef"><b>Definition</b> <a href="#l00177">heavy_light_decomposition.cpp:177</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< int > t_depth</div><div class="ttdoc">a vector to store the depth of a node,</div><div class="ttdef"><b>Definition</b> <a href="#l00089">heavy_light_decomposition.cpp:89</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< X > t_val</div><div class="ttdoc">values of nodes</div><div class="ttdef"><b>Definition</b> <a href="#l00093">heavy_light_decomposition.cpp:93</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< std::vector< int > > 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="#l00088">heavy_light_decomposition.cpp:88</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="#l00159">heavy_light_decomposition.cpp:159</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="#l00142">heavy_light_decomposition.cpp:142</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 &dist)</div><div class="ttdoc">The function returns the kth ancestor of a node.</div><div class="ttdef"><b>Definition</b> <a href="#l00220">heavy_light_decomposition.cpp:220</a></div></div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1heavy__light__decomposition_1_1_tree_html_aa339c31ec74cd86a4842a8b09653d460"><div class="ttname"><a href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#aa339c31ec74cd86a4842a8b09653d460">range_queries::heavy_light_decomposition::Tree::dfs_size</a></div><div class="ttdeci">void dfs_size(int u, int p=-1)</div><div class="ttdoc">Utility function to compute sub-tree sizes.</div><div class="ttdef"><b>Definition</b> <a href="#l00103">heavy_light_decomposition.cpp:103</a></div></div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1heavy__light__decomposition_1_1_tree_html_aa6c37e840355b9fb2105181c578694e8"><div class="ttname"><a href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#aa6c37e840355b9fb2105181c578694e8">range_queries::heavy_light_decomposition::Tree::t_root</a></div><div class="ttdeci">int t_root</div><div class="ttdoc">the root of the tree</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_ab1aeaefa1bd97b867c652ba916fbdb43"><div class="ttname"><a href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#ab1aeaefa1bd97b867c652ba916fbdb43">range_queries::heavy_light_decomposition::Tree::t_adj</a></div><div class="ttdeci">std::vector< std::list< int > > t_adj</div><div class="ttdoc">an adjacency list to stores the tree edges</div><div class="ttdef"><b>Definition</b> <a href="#l00084">heavy_light_decomposition.cpp:84</a></div></div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1heavy__light__decomposition_1_1_tree_html_ab2ab020f798d00be2613ecf63074b7c1"><div class="ttname"><a href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#ab2ab020f798d00be2613ecf63074b7c1">range_queries::heavy_light_decomposition::Tree::t_maxlift</a></div><div class="ttdeci">const int t_maxlift</div><div class="ttdoc">maximum possible height of the tree</div><div class="ttdef"><b>Definition</b> <a href="#l00086">heavy_light_decomposition.cpp:86</a></div></div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1heavy__light__decomposition_1_1_tree_html_ab916d554afa8ca5230b4310c2c69fae0"><div class="ttname"><a href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#ab916d554afa8ca5230b4310c2c69fae0">range_queries::heavy_light_decomposition::Tree::change_root</a></div><div class="ttdeci">void change_root(int new_root)</div><div class="ttdoc">Set the root for the tree.</div><div class="ttdef"><b>Definition</b> <a href="#l00169">heavy_light_decomposition.cpp:169</a></div></div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1heavy__light__decomposition_1_1_tree_html_ac7761255f2ba06b398b9aae5e4dce5f3"><div class="ttname"><a href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#ac7761255f2ba06b398b9aae5e4dce5f3">range_queries::heavy_light_decomposition::Tree::lift</a></div><div class="ttdeci">void lift(int *const p, int dist)</div><div class="ttdoc">The function lifts a node, k units up the tree. The lifting is done in place, and the result is store...</div><div class="ttdef"><b>Definition</b> <a href="#l00202">heavy_light_decomposition.cpp:202</a></div></div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1heavy__light__decomposition_1_1_tree_html_ad22d760a5a33545a70e7ea5e1786c8dc"><div class="ttname"><a href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#ad22d760a5a33545a70e7ea5e1786c8dc">range_queries::heavy_light_decomposition::Tree::init</a></div><div class="ttdeci">void init()</div><div class="ttdoc">This function must be called after the tree adjacency list and node values are populated The function...</div><div class="ttdef"><b>Definition</b> <a href="#l00188">heavy_light_decomposition.cpp:188</a></div></div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1heavy__light__decomposition_1_1_tree_html_ada1494fccbc7f1f07b2f9be9f7e07ad5"><div class="ttname"><a href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#ada1494fccbc7f1f07b2f9be9f7e07ad5">range_queries::heavy_light_decomposition::Tree::t_size</a></div><div class="ttdeci">std::vector< int > t_size</div><div class="ttdoc">a vector to store the subtree size rooted at node</div><div class="ttdef"><b>Definition</b> <a href="#l00090">heavy_light_decomposition.cpp:90</a></div></div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1heavy__light__decomposition_1_1_tree_html_ae2b407e64aaf9878fbee7ee6efe9c7d4"><div class="ttname"><a href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#ae2b407e64aaf9878fbee7ee6efe9c7d4">range_queries::heavy_light_decomposition::Tree::lca</a></div><div class="ttdeci">int lca(int a, int b)</div><div class="ttdoc">The function returns the least common ancestor of two nodes.</div><div class="ttdef"><b>Definition</b> <a href="#l00231">heavy_light_decomposition.cpp:231</a></div></div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1heavy__light__decomposition_1_1_tree_html_ae4630fa70a80a1dc65a875488a67178a"><div class="ttname"><a href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#ae4630fa70a80a1dc65a875488a67178a">range_queries::heavy_light_decomposition::Tree::t_nodes</a></div><div class="ttdeci">const int t_nodes</div><div class="ttdoc">number of nodes</div><div class="ttdef"><b>Definition</b> <a href="#l00085">heavy_light_decomposition.cpp:85</a></div></div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1heavy__light__decomposition_1_1_tree_html_ae8de7aefcb6635d3dacdd174cd4890c4"><div class="ttname"><a href="../../d1/d51/classrange__queries_1_1heavy__light__decomposition_1_1_tree.html#ae8de7aefcb6635d3dacdd174cd4890c4">range_queries::heavy_light_decomposition::Tree::dfs_lca</a></div><div class="ttdeci">void dfs_lca(int u, int p=-1)</div><div class="ttdoc">Utility function to populate the t_par vector.</div><div class="ttdef"><b>Definition</b> <a href="#l00118">heavy_light_decomposition.cpp:118</a></div></div>
|
||||
<div class="ttc" id="aheavy__light__decomposition_8cpp_html_a34b8683a2b429de5cce57e6d733ec817"><div class="ttname"><a href="../../d2/de9/heavy__light__decomposition_8cpp.html#a34b8683a2b429de5cce57e6d733ec817">test_1</a></div><div class="ttdeci">static void test_1()</div><div class="ttdef"><b>Definition</b> <a href="#l00511">heavy_light_decomposition.cpp:511</a></div></div>
|
||||
<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="#l00555">heavy_light_decomposition.cpp:555</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="#l00641">heavy_light_decomposition.cpp:641</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="#l00599">heavy_light_decomposition.cpp:599</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>
|
||||
|
||||
@@ -128,7 +128,7 @@ Public Member Functions</h2></td></tr>
|
||||
<div class="textblock"><div class="compoundTemplParams">template<typename Puzzle><br />
|
||||
struct machine_learning::aystar_search::AyStarSearch< Puzzle >::comparison_operator</div><p>Custom comparator for open_list. </p>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html#l00370">370</a> of file <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html">a_star_search.cpp</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html#l00372">372</a> of file <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html">a_star_search.cpp</a>.</p>
|
||||
</div><a name="doc-func-members" id="doc-func-members"></a><h2 id="header-doc-func-members" class="groupheader">Member Function Documentation</h2>
|
||||
<a id="ae1dab9186db26e65979ec71f46821904" name="ae1dab9186db26e65979ec71f46821904"></a>
|
||||
<h2 class="memtitle"><span class="permalink"><a href="#ae1dab9186db26e65979ec71f46821904">◆ </a></span>operator()()</h2>
|
||||
@@ -159,11 +159,11 @@ template<typename Puzzle> </div>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html#l00371">371</a> of file <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html">a_star_search.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 372</span> {</div>
|
||||
<div class="line"><span class="lineno"> 373</span> <span class="keywordflow">return</span> *(<a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">a</a>->state) < *(<a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">b</a>->state);</div>
|
||||
<div class="line"><span class="lineno"> 374</span> }</div>
|
||||
<div class="ttc" id="aclassmachine__learning_1_1aystar__search_1_1_ay_star_search_html"><div class="ttname"><a href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">machine_learning::aystar_search::AyStarSearch</a></div><div class="ttdoc">A class defining A* search algorithm. for some initial state and final state.</div><div class="ttdef"><b>Definition</b> <a href="../../dd/dec/a__star__search_8cpp_source.html#l00288">a_star_search.cpp:288</a></div></div>
|
||||
<p class="definition">Definition at line <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html#l00373">373</a> of file <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html">a_star_search.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 374</span> {</div>
|
||||
<div class="line"><span class="lineno"> 375</span> <span class="keywordflow">return</span> *(<a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">a</a>->state) < *(<a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">b</a>->state);</div>
|
||||
<div class="line"><span class="lineno"> 376</span> }</div>
|
||||
<div class="ttc" id="aclassmachine__learning_1_1aystar__search_1_1_ay_star_search_html"><div class="ttname"><a href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">machine_learning::aystar_search::AyStarSearch</a></div><div class="ttdoc">A class defining A* search algorithm. for some initial state and final state.</div><div class="ttdef"><b>Definition</b> <a href="../../dd/dec/a__star__search_8cpp_source.html#l00290">a_star_search.cpp:290</a></div></div>
|
||||
</div><!-- fragment -->
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -119,13 +119,14 @@ $(function(){initNavTree('d5/d58/persistent__seg__tree__lazy__prop_8cpp.html','.
|
||||
|
||||
<p><a href="https://en.wikipedia.org/wiki/Persistent_data_structure" target="_blank">Persistent segment tree with range updates (lazy propagation)</a>
|
||||
<a href="#details">More...</a></p>
|
||||
<div class="textblock"><code>#include <iostream></code><br />
|
||||
<div class="textblock"><code>#include <cstdint></code><br />
|
||||
<code>#include <iostream></code><br />
|
||||
<code>#include <memory></code><br />
|
||||
<code>#include <vector></code><br />
|
||||
</div><div class="textblock"><div class="dynheader">
|
||||
Include dependency graph for persistent_seg_tree_lazy_prop.cpp:</div>
|
||||
<div class="dyncontent">
|
||||
<div class="center"><iframe scrolling="no" loading="lazy" frameborder="0" src="../../d2/d86/persistent__seg__tree__lazy__prop_8cpp__incl.svg" width="255" height="126"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe></div>
|
||||
<div class="center"><iframe scrolling="no" loading="lazy" frameborder="0" src="../../d2/d86/persistent__seg__tree__lazy__prop_8cpp__incl.svg" width="339" height="126"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe></div>
|
||||
</div>
|
||||
</div>
|
||||
<p><a href="../../d5/d58/persistent__seg__tree__lazy__prop_8cpp_source.html">Go to the source code of this file.</a></p>
|
||||
@@ -173,12 +174,12 @@ Functions</h2></td></tr>
|
||||
<p>Main function. </p>
|
||||
<dl class="section return"><dt>Returns</dt><dd>0 on exit </dd></dl>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d5/d58/persistent__seg__tree__lazy__prop_8cpp_source.html#l00318">318</a> of file <a class="el" href="../../d5/d58/persistent__seg__tree__lazy__prop_8cpp_source.html">persistent_seg_tree_lazy_prop.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 318</span> {</div>
|
||||
<div class="line"><span class="lineno"> 319</span> <a class="code hl_function" href="#aa8dca7b867074164d5f45b0f3851269d">test</a>(); <span class="comment">// run self-test implementations</span></div>
|
||||
<div class="line"><span class="lineno"> 320</span> <span class="keywordflow">return</span> 0;</div>
|
||||
<div class="line"><span class="lineno"> 321</span>}</div>
|
||||
<div class="ttc" id="apersistent__seg__tree__lazy__prop_8cpp_html_aa8dca7b867074164d5f45b0f3851269d"><div class="ttname"><a href="#aa8dca7b867074164d5f45b0f3851269d">test</a></div><div class="ttdeci">static void test()</div><div class="ttdoc">Test implementations.</div><div class="ttdef"><b>Definition</b> <a href="../../d5/d58/persistent__seg__tree__lazy__prop_8cpp_source.html#l00268">persistent_seg_tree_lazy_prop.cpp:268</a></div></div>
|
||||
<p class="definition">Definition at line <a class="el" href="../../d5/d58/persistent__seg__tree__lazy__prop_8cpp_source.html#l00319">319</a> of file <a class="el" href="../../d5/d58/persistent__seg__tree__lazy__prop_8cpp_source.html">persistent_seg_tree_lazy_prop.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 319</span> {</div>
|
||||
<div class="line"><span class="lineno"> 320</span> <a class="code hl_function" href="#aa8dca7b867074164d5f45b0f3851269d">test</a>(); <span class="comment">// run self-test implementations</span></div>
|
||||
<div class="line"><span class="lineno"> 321</span> <span class="keywordflow">return</span> 0;</div>
|
||||
<div class="line"><span class="lineno"> 322</span>}</div>
|
||||
<div class="ttc" id="apersistent__seg__tree__lazy__prop_8cpp_html_aa8dca7b867074164d5f45b0f3851269d"><div class="ttname"><a href="#aa8dca7b867074164d5f45b0f3851269d">test</a></div><div class="ttdeci">static void test()</div><div class="ttdoc">Test implementations.</div><div class="ttdef"><b>Definition</b> <a href="../../d5/d58/persistent__seg__tree__lazy__prop_8cpp_source.html#l00269">persistent_seg_tree_lazy_prop.cpp:269</a></div></div>
|
||||
</div><!-- fragment -->
|
||||
</div>
|
||||
</div>
|
||||
@@ -208,57 +209,57 @@ Functions</h2></td></tr>
|
||||
<p>Test implementations. </p>
|
||||
<dl class="section return"><dt>Returns</dt><dd>void </dd></dl>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d5/d58/persistent__seg__tree__lazy__prop_8cpp_source.html#l00268">268</a> of file <a class="el" href="../../d5/d58/persistent__seg__tree__lazy__prop_8cpp_source.html">persistent_seg_tree_lazy_prop.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 268</span> {</div>
|
||||
<div class="line"><span class="lineno"> 269</span> std::vector<int64_t> arr = {-5, 2, 3, 11, -2, 7, 0, 1};</div>
|
||||
<div class="line"><span class="lineno"> 270</span> <a class="code hl_class" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html">range_queries::perSegTree</a> tree;</div>
|
||||
<div class="line"><span class="lineno"> 271</span> std::cout << <span class="stringliteral">"Elements before any updates are {"</span>;</div>
|
||||
<div class="line"><span class="lineno"> 272</span> <span class="keywordflow">for</span> (uint32_t i = 0; i < arr.size(); ++i) {</div>
|
||||
<div class="line"><span class="lineno"> 273</span> std::cout << arr[i];</div>
|
||||
<div class="line"><span class="lineno"> 274</span> <span class="keywordflow">if</span> (i != arr.size() - 1) {</div>
|
||||
<div class="line"><span class="lineno"> 275</span> std::cout << <span class="stringliteral">","</span>;</div>
|
||||
<div class="line"><span class="lineno"> 276</span> }</div>
|
||||
<div class="line"><span class="lineno"> 277</span> }</div>
|
||||
<div class="line"><span class="lineno"> 278</span> std::cout << <span class="stringliteral">"}\n"</span>;</div>
|
||||
<div class="line"><span class="lineno"> 279</span> tree.<a class="code hl_function" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#a6d3f2465a7c5803a1ff16c5378bcc5e4">construct</a>(</div>
|
||||
<div class="line"><span class="lineno"> 280</span> arr); <span class="comment">// constructing the original segment tree (version = 0)</span></div>
|
||||
<div class="line"><span class="lineno"> 281</span> std::cout << <span class="stringliteral">"Querying range sum on version 0 from index 2 to 4 = 3+11-2 = "</span></div>
|
||||
<div class="line"><span class="lineno"> 282</span> << tree.<a class="code hl_function" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#ae8ae4b1835e5e8aec32f68c5059ed4d4">query</a>(2, 4, 0) << <span class="charliteral">'\n'</span>;</div>
|
||||
<div class="line"><span class="lineno"> 283</span> std::cout</div>
|
||||
<div class="line"><span class="lineno"> 284</span> << <span class="stringliteral">"Subtract 7 from all elements from index 1 to index 5 inclusive\n"</span>;</div>
|
||||
<div class="line"><span class="lineno"> 285</span> tree.<a class="code hl_function" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#a24487eda25123bc4d112e8430821a6c6">update</a>(1, 5, -7); <span class="comment">// subtracting 7 from index 1 to index 5</span></div>
|
||||
<div class="line"><span class="lineno"> 286</span> std::cout << <span class="stringliteral">"Elements of the segment tree whose version = 1 (after 1 "</span></div>
|
||||
<div class="line"><span class="lineno"> 287</span> <span class="stringliteral">"update) are {"</span>;</div>
|
||||
<div class="line"><span class="lineno"> 288</span> <span class="keywordflow">for</span> (uint32_t i = 0; i < arr.size(); ++i) {</div>
|
||||
<div class="line"><span class="lineno"> 289</span> std::cout << tree.<a class="code hl_function" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#ae8ae4b1835e5e8aec32f68c5059ed4d4">query</a>(i, i, 1);</div>
|
||||
<div class="line"><span class="lineno"> 290</span> <span class="keywordflow">if</span> (i != arr.size() - 1) {</div>
|
||||
<div class="line"><span class="lineno"> 291</span> std::cout << <span class="stringliteral">","</span>;</div>
|
||||
<div class="line"><span class="lineno"> 292</span> }</div>
|
||||
<div class="line"><span class="lineno"> 293</span> }</div>
|
||||
<div class="line"><span class="lineno"> 294</span> std::cout << <span class="stringliteral">"}\n"</span>;</div>
|
||||
<div class="line"><span class="lineno"> 295</span> std::cout << <span class="stringliteral">"Add 10 to all elements from index 0 to index 7 inclusive\n"</span>;</div>
|
||||
<div class="line"><span class="lineno"> 296</span> tree.<a class="code hl_function" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#a24487eda25123bc4d112e8430821a6c6">update</a>(0, 7, 10); <span class="comment">// adding 10 to all elements</span></div>
|
||||
<div class="line"><span class="lineno"> 297</span> std::cout << <span class="stringliteral">"Elements of the segment tree whose version = 2 (after 2 "</span></div>
|
||||
<div class="line"><span class="lineno"> 298</span> <span class="stringliteral">"updates) are {"</span>;</div>
|
||||
<div class="line"><span class="lineno"> 299</span> <span class="keywordflow">for</span> (uint32_t i = 0; i < arr.size(); ++i) {</div>
|
||||
<div class="line"><span class="lineno"> 300</span> std::cout << tree.<a class="code hl_function" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#ae8ae4b1835e5e8aec32f68c5059ed4d4">query</a>(i, i, 2);</div>
|
||||
<div class="line"><span class="lineno"> 301</span> <span class="keywordflow">if</span> (i != arr.size() - 1) {</div>
|
||||
<div class="line"><span class="lineno"> 302</span> std::cout << <span class="stringliteral">","</span>;</div>
|
||||
<div class="line"><span class="lineno"> 303</span> }</div>
|
||||
<div class="line"><span class="lineno"> 304</span> }</div>
|
||||
<div class="line"><span class="lineno"> 305</span> std::cout << <span class="stringliteral">"}\n"</span>;</div>
|
||||
<div class="line"><span class="lineno"> 306</span> std::cout << <span class="stringliteral">"Number of segment trees (versions) now = "</span> << tree.<a class="code hl_function" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#a0fe4e431f3e09c274ecd7d2d58dcb865">size</a>()</div>
|
||||
<div class="line"><span class="lineno"> 307</span> << <span class="charliteral">'\n'</span>;</div>
|
||||
<div class="line"><span class="lineno"> 308</span> std::cout << <span class="stringliteral">"Querying range sum on version 0 from index 3 to 5 = 11-2+7 = "</span></div>
|
||||
<div class="line"><span class="lineno"> 309</span> << tree.<a class="code hl_function" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#ae8ae4b1835e5e8aec32f68c5059ed4d4">query</a>(3, 5, 0) << <span class="charliteral">'\n'</span>;</div>
|
||||
<div class="line"><span class="lineno"> 310</span> std::cout << <span class="stringliteral">"Querying range sum on version 1 from index 3 to 5 = 4-9+0 = "</span></div>
|
||||
<div class="line"><span class="lineno"> 311</span> << tree.<a class="code hl_function" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#ae8ae4b1835e5e8aec32f68c5059ed4d4">query</a>(3, 5, 1) << <span class="charliteral">'\n'</span>;</div>
|
||||
<div class="line"><span class="lineno"> 312</span>}</div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1per_seg_tree_html"><div class="ttname"><a href="../../d8/d28/classrange__queries_1_1per_seg_tree.html">range_queries::perSegTree</a></div><div class="ttdoc">Range query here is range sum, but the code can be modified to make different queries like range max ...</div><div class="ttdef"><b>Definition</b> <a href="../../d5/d58/persistent__seg__tree__lazy__prop_8cpp_source.html#l00039">persistent_seg_tree_lazy_prop.cpp:39</a></div></div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1per_seg_tree_html_a0fe4e431f3e09c274ecd7d2d58dcb865"><div class="ttname"><a href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#a0fe4e431f3e09c274ecd7d2d58dcb865">range_queries::perSegTree::size</a></div><div class="ttdeci">uint32_t size()</div><div class="ttdoc">Getting the number of versions after updates so far which is equal to the size of the pointers vector...</div><div class="ttdef"><b>Definition</b> <a href="../../d5/d58/persistent__seg__tree__lazy__prop_8cpp_source.html#l00255">persistent_seg_tree_lazy_prop.cpp:255</a></div></div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1per_seg_tree_html_a24487eda25123bc4d112e8430821a6c6"><div class="ttname"><a href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#a24487eda25123bc4d112e8430821a6c6">range_queries::perSegTree::update</a></div><div class="ttdeci">std::shared_ptr< Node > update(const uint32_t &i, const uint32_t &j, const uint32_t &l, const uint32_t &r, const int64_t &value, std::shared_ptr< Node > const &curr)</div><div class="ttdoc">Doing range update, checking at every node if it has some value to be propagated. All nodes affected ...</div><div class="ttdef"><b>Definition</b> <a href="../../d5/d58/persistent__seg__tree__lazy__prop_8cpp_source.html#l00135">persistent_seg_tree_lazy_prop.cpp:135</a></div></div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1per_seg_tree_html_a6d3f2465a7c5803a1ff16c5378bcc5e4"><div class="ttname"><a href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#a6d3f2465a7c5803a1ff16c5378bcc5e4">range_queries::perSegTree::construct</a></div><div class="ttdeci">std::shared_ptr< Node > construct(const uint32_t &i, const uint32_t &j)</div><div class="ttdoc">Constructing the segment tree with the early passed vector. Every call creates a node to hold the sum...</div><div class="ttdef"><b>Definition</b> <a href="../../d5/d58/persistent__seg__tree__lazy__prop_8cpp_source.html#l00106">persistent_seg_tree_lazy_prop.cpp:106</a></div></div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1per_seg_tree_html_ae8ae4b1835e5e8aec32f68c5059ed4d4"><div class="ttname"><a href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#ae8ae4b1835e5e8aec32f68c5059ed4d4">range_queries::perSegTree::query</a></div><div class="ttdeci">int64_t query(const uint32_t &i, const uint32_t &j, const uint32_t &l, const uint32_t &r, std::shared_ptr< Node > const &curr)</div><div class="ttdoc">Querying the range from index l to index r, checking at every node if it has some value to be propaga...</div><div class="ttdef"><b>Definition</b> <a href="../../d5/d58/persistent__seg__tree__lazy__prop_8cpp_source.html#l00171">persistent_seg_tree_lazy_prop.cpp:171</a></div></div>
|
||||
<p class="definition">Definition at line <a class="el" href="../../d5/d58/persistent__seg__tree__lazy__prop_8cpp_source.html#l00269">269</a> of file <a class="el" href="../../d5/d58/persistent__seg__tree__lazy__prop_8cpp_source.html">persistent_seg_tree_lazy_prop.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 269</span> {</div>
|
||||
<div class="line"><span class="lineno"> 270</span> std::vector<int64_t> arr = {-5, 2, 3, 11, -2, 7, 0, 1};</div>
|
||||
<div class="line"><span class="lineno"> 271</span> <a class="code hl_class" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html">range_queries::perSegTree</a> tree;</div>
|
||||
<div class="line"><span class="lineno"> 272</span> std::cout << <span class="stringliteral">"Elements before any updates are {"</span>;</div>
|
||||
<div class="line"><span class="lineno"> 273</span> <span class="keywordflow">for</span> (uint32_t i = 0; i < arr.size(); ++i) {</div>
|
||||
<div class="line"><span class="lineno"> 274</span> std::cout << arr[i];</div>
|
||||
<div class="line"><span class="lineno"> 275</span> <span class="keywordflow">if</span> (i != arr.size() - 1) {</div>
|
||||
<div class="line"><span class="lineno"> 276</span> std::cout << <span class="stringliteral">","</span>;</div>
|
||||
<div class="line"><span class="lineno"> 277</span> }</div>
|
||||
<div class="line"><span class="lineno"> 278</span> }</div>
|
||||
<div class="line"><span class="lineno"> 279</span> std::cout << <span class="stringliteral">"}\n"</span>;</div>
|
||||
<div class="line"><span class="lineno"> 280</span> tree.<a class="code hl_function" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#a6d3f2465a7c5803a1ff16c5378bcc5e4">construct</a>(</div>
|
||||
<div class="line"><span class="lineno"> 281</span> arr); <span class="comment">// constructing the original segment tree (version = 0)</span></div>
|
||||
<div class="line"><span class="lineno"> 282</span> std::cout << <span class="stringliteral">"Querying range sum on version 0 from index 2 to 4 = 3+11-2 = "</span></div>
|
||||
<div class="line"><span class="lineno"> 283</span> << tree.<a class="code hl_function" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#ae8ae4b1835e5e8aec32f68c5059ed4d4">query</a>(2, 4, 0) << <span class="charliteral">'\n'</span>;</div>
|
||||
<div class="line"><span class="lineno"> 284</span> std::cout</div>
|
||||
<div class="line"><span class="lineno"> 285</span> << <span class="stringliteral">"Subtract 7 from all elements from index 1 to index 5 inclusive\n"</span>;</div>
|
||||
<div class="line"><span class="lineno"> 286</span> tree.<a class="code hl_function" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#a24487eda25123bc4d112e8430821a6c6">update</a>(1, 5, -7); <span class="comment">// subtracting 7 from index 1 to index 5</span></div>
|
||||
<div class="line"><span class="lineno"> 287</span> std::cout << <span class="stringliteral">"Elements of the segment tree whose version = 1 (after 1 "</span></div>
|
||||
<div class="line"><span class="lineno"> 288</span> <span class="stringliteral">"update) are {"</span>;</div>
|
||||
<div class="line"><span class="lineno"> 289</span> <span class="keywordflow">for</span> (uint32_t i = 0; i < arr.size(); ++i) {</div>
|
||||
<div class="line"><span class="lineno"> 290</span> std::cout << tree.<a class="code hl_function" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#ae8ae4b1835e5e8aec32f68c5059ed4d4">query</a>(i, i, 1);</div>
|
||||
<div class="line"><span class="lineno"> 291</span> <span class="keywordflow">if</span> (i != arr.size() - 1) {</div>
|
||||
<div class="line"><span class="lineno"> 292</span> std::cout << <span class="stringliteral">","</span>;</div>
|
||||
<div class="line"><span class="lineno"> 293</span> }</div>
|
||||
<div class="line"><span class="lineno"> 294</span> }</div>
|
||||
<div class="line"><span class="lineno"> 295</span> std::cout << <span class="stringliteral">"}\n"</span>;</div>
|
||||
<div class="line"><span class="lineno"> 296</span> std::cout << <span class="stringliteral">"Add 10 to all elements from index 0 to index 7 inclusive\n"</span>;</div>
|
||||
<div class="line"><span class="lineno"> 297</span> tree.<a class="code hl_function" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#a24487eda25123bc4d112e8430821a6c6">update</a>(0, 7, 10); <span class="comment">// adding 10 to all elements</span></div>
|
||||
<div class="line"><span class="lineno"> 298</span> std::cout << <span class="stringliteral">"Elements of the segment tree whose version = 2 (after 2 "</span></div>
|
||||
<div class="line"><span class="lineno"> 299</span> <span class="stringliteral">"updates) are {"</span>;</div>
|
||||
<div class="line"><span class="lineno"> 300</span> <span class="keywordflow">for</span> (uint32_t i = 0; i < arr.size(); ++i) {</div>
|
||||
<div class="line"><span class="lineno"> 301</span> std::cout << tree.<a class="code hl_function" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#ae8ae4b1835e5e8aec32f68c5059ed4d4">query</a>(i, i, 2);</div>
|
||||
<div class="line"><span class="lineno"> 302</span> <span class="keywordflow">if</span> (i != arr.size() - 1) {</div>
|
||||
<div class="line"><span class="lineno"> 303</span> std::cout << <span class="stringliteral">","</span>;</div>
|
||||
<div class="line"><span class="lineno"> 304</span> }</div>
|
||||
<div class="line"><span class="lineno"> 305</span> }</div>
|
||||
<div class="line"><span class="lineno"> 306</span> std::cout << <span class="stringliteral">"}\n"</span>;</div>
|
||||
<div class="line"><span class="lineno"> 307</span> std::cout << <span class="stringliteral">"Number of segment trees (versions) now = "</span> << tree.<a class="code hl_function" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#a0fe4e431f3e09c274ecd7d2d58dcb865">size</a>()</div>
|
||||
<div class="line"><span class="lineno"> 308</span> << <span class="charliteral">'\n'</span>;</div>
|
||||
<div class="line"><span class="lineno"> 309</span> std::cout << <span class="stringliteral">"Querying range sum on version 0 from index 3 to 5 = 11-2+7 = "</span></div>
|
||||
<div class="line"><span class="lineno"> 310</span> << tree.<a class="code hl_function" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#ae8ae4b1835e5e8aec32f68c5059ed4d4">query</a>(3, 5, 0) << <span class="charliteral">'\n'</span>;</div>
|
||||
<div class="line"><span class="lineno"> 311</span> std::cout << <span class="stringliteral">"Querying range sum on version 1 from index 3 to 5 = 4-9+0 = "</span></div>
|
||||
<div class="line"><span class="lineno"> 312</span> << tree.<a class="code hl_function" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#ae8ae4b1835e5e8aec32f68c5059ed4d4">query</a>(3, 5, 1) << <span class="charliteral">'\n'</span>;</div>
|
||||
<div class="line"><span class="lineno"> 313</span>}</div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1per_seg_tree_html"><div class="ttname"><a href="../../d8/d28/classrange__queries_1_1per_seg_tree.html">range_queries::perSegTree</a></div><div class="ttdoc">Range query here is range sum, but the code can be modified to make different queries like range max ...</div><div class="ttdef"><b>Definition</b> <a href="../../d5/d58/persistent__seg__tree__lazy__prop_8cpp_source.html#l00040">persistent_seg_tree_lazy_prop.cpp:40</a></div></div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1per_seg_tree_html_a0fe4e431f3e09c274ecd7d2d58dcb865"><div class="ttname"><a href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#a0fe4e431f3e09c274ecd7d2d58dcb865">range_queries::perSegTree::size</a></div><div class="ttdeci">uint32_t size()</div><div class="ttdoc">Getting the number of versions after updates so far which is equal to the size of the pointers vector...</div><div class="ttdef"><b>Definition</b> <a href="../../d5/d58/persistent__seg__tree__lazy__prop_8cpp_source.html#l00256">persistent_seg_tree_lazy_prop.cpp:256</a></div></div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1per_seg_tree_html_a24487eda25123bc4d112e8430821a6c6"><div class="ttname"><a href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#a24487eda25123bc4d112e8430821a6c6">range_queries::perSegTree::update</a></div><div class="ttdeci">std::shared_ptr< Node > update(const uint32_t &i, const uint32_t &j, const uint32_t &l, const uint32_t &r, const int64_t &value, std::shared_ptr< Node > const &curr)</div><div class="ttdoc">Doing range update, checking at every node if it has some value to be propagated. All nodes affected ...</div><div class="ttdef"><b>Definition</b> <a href="../../d5/d58/persistent__seg__tree__lazy__prop_8cpp_source.html#l00136">persistent_seg_tree_lazy_prop.cpp:136</a></div></div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1per_seg_tree_html_a6d3f2465a7c5803a1ff16c5378bcc5e4"><div class="ttname"><a href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#a6d3f2465a7c5803a1ff16c5378bcc5e4">range_queries::perSegTree::construct</a></div><div class="ttdeci">std::shared_ptr< Node > construct(const uint32_t &i, const uint32_t &j)</div><div class="ttdoc">Constructing the segment tree with the early passed vector. Every call creates a node to hold the sum...</div><div class="ttdef"><b>Definition</b> <a href="../../d5/d58/persistent__seg__tree__lazy__prop_8cpp_source.html#l00107">persistent_seg_tree_lazy_prop.cpp:107</a></div></div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1per_seg_tree_html_ae8ae4b1835e5e8aec32f68c5059ed4d4"><div class="ttname"><a href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#ae8ae4b1835e5e8aec32f68c5059ed4d4">range_queries::perSegTree::query</a></div><div class="ttdeci">int64_t query(const uint32_t &i, const uint32_t &j, const uint32_t &l, const uint32_t &r, std::shared_ptr< Node > const &curr)</div><div class="ttdoc">Querying the range from index l to index r, checking at every node if it has some value to be propaga...</div><div class="ttdef"><b>Definition</b> <a href="../../d5/d58/persistent__seg__tree__lazy__prop_8cpp_source.html#l00172">persistent_seg_tree_lazy_prop.cpp:172</a></div></div>
|
||||
</div><!-- fragment -->
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -117,239 +117,240 @@ $(function(){initNavTree('d5/d58/persistent__seg__tree__lazy__prop_8cpp_source.h
|
||||
</div><!--header-->
|
||||
<div class="contents">
|
||||
<a href="../../d5/d58/persistent__seg__tree__lazy__prop_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="l00025" name="l00025"></a><span class="lineno"> 25</span><span class="preprocessor">#include <iostream></span> </div>
|
||||
<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span><span class="preprocessor">#include <memory></span> </div>
|
||||
<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span><span class="preprocessor">#include <vector></span> </div>
|
||||
<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span></div>
|
||||
<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</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="l00034" name="l00034"></a><span class="lineno"> 34</span></div>
|
||||
<div class="foldopen" id="foldopen00039" data-start="{" data-end="};">
|
||||
<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"><a class="line" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html"> 39</a></span><span class="keyword">class </span><a class="code hl_class" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html">perSegTree</a> {</div>
|
||||
<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span> <span class="keyword">private</span>:</div>
|
||||
<div class="foldopen" id="foldopen00041" data-start="{" data-end="};">
|
||||
<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"><a class="line" href="../../d5/d66/classrange__queries_1_1per_seg_tree_1_1_node.html"> 41</a></span> <span class="keyword">class </span><a class="code hl_class" href="../../d5/d66/classrange__queries_1_1per_seg_tree_1_1_node.html">Node</a> {</div>
|
||||
<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span> <span class="keyword">public</span>:</div>
|
||||
<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span> std::shared_ptr<Node> left = <span class="keyword">nullptr</span>; </div>
|
||||
<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"><a class="line" href="../../d5/d66/classrange__queries_1_1per_seg_tree_1_1_node.html#a9adb4639a0797e94a3e556b6b902c088"> 44</a></span> std::shared_ptr<Node> <a class="code hl_variable" href="../../d5/d66/classrange__queries_1_1per_seg_tree_1_1_node.html#a9adb4639a0797e94a3e556b6b902c088">right</a> = <span class="keyword">nullptr</span>; </div>
|
||||
<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"><a class="line" href="../../d5/d66/classrange__queries_1_1per_seg_tree_1_1_node.html#acc044f787c90b815773726d7fdfdaccf"> 45</a></span> int64_t <a class="code hl_variable" href="../../d5/d66/classrange__queries_1_1per_seg_tree_1_1_node.html#acc044f787c90b815773726d7fdfdaccf">val</a> = 0,</div>
|
||||
<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span> prop = 0; </div>
|
||||
<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> };</div>
|
||||
<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span><span class="preprocessor">#include <cstdint></span> </div>
|
||||
<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span><span class="preprocessor">#include <iostream></span> </div>
|
||||
<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span><span class="preprocessor">#include <memory></span> </div>
|
||||
<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span><span class="preprocessor">#include <vector></span> </div>
|
||||
<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span></div>
|
||||
<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</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="l00035" name="l00035"></a><span class="lineno"> 35</span></div>
|
||||
<div class="foldopen" id="foldopen00040" data-start="{" data-end="};">
|
||||
<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"><a class="line" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html"> 40</a></span><span class="keyword">class </span><a class="code hl_class" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html">perSegTree</a> {</div>
|
||||
<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span> <span class="keyword">private</span>:</div>
|
||||
<div class="foldopen" id="foldopen00042" data-start="{" data-end="};">
|
||||
<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"><a class="line" href="../../d5/d66/classrange__queries_1_1per_seg_tree_1_1_node.html"> 42</a></span> <span class="keyword">class </span><a class="code hl_class" href="../../d5/d66/classrange__queries_1_1per_seg_tree_1_1_node.html">Node</a> {</div>
|
||||
<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span> <span class="keyword">public</span>:</div>
|
||||
<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span> std::shared_ptr<Node> left = <span class="keyword">nullptr</span>; </div>
|
||||
<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"><a class="line" href="../../d5/d66/classrange__queries_1_1per_seg_tree_1_1_node.html#a9adb4639a0797e94a3e556b6b902c088"> 45</a></span> std::shared_ptr<Node> <a class="code hl_variable" href="../../d5/d66/classrange__queries_1_1per_seg_tree_1_1_node.html#a9adb4639a0797e94a3e556b6b902c088">right</a> = <span class="keyword">nullptr</span>; </div>
|
||||
<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"><a class="line" href="../../d5/d66/classrange__queries_1_1per_seg_tree_1_1_node.html#acc044f787c90b815773726d7fdfdaccf"> 46</a></span> int64_t <a class="code hl_variable" href="../../d5/d66/classrange__queries_1_1per_seg_tree_1_1_node.html#acc044f787c90b815773726d7fdfdaccf">val</a> = 0,</div>
|
||||
<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span> prop = 0; </div>
|
||||
<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> };</div>
|
||||
</div>
|
||||
<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> </div>
|
||||
<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span> uint32_t n = 0; </div>
|
||||
<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span> std::vector<std::shared_ptr<Node>></div>
|
||||
<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"><a class="line" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#a1eac9cf0613dfc8e2b0195009dd5c9d5"> 54</a></span> <a class="code hl_variable" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#a1eac9cf0613dfc8e2b0195009dd5c9d5">ptrs</a>{}; </div>
|
||||
<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"><a class="line" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#a8ff495d2f389b4aaa54449c26c6078f3"> 57</a></span> std::vector<int64_t> <a class="code hl_variable" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#a8ff495d2f389b4aaa54449c26c6078f3">vec</a>{}; </div>
|
||||
<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span></div>
|
||||
<div class="foldopen" id="foldopen00065" data-start="{" data-end="}">
|
||||
<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"><a class="line" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#a0cec4b77d264521717cf9b0482c45817"> 65</a></span> std::shared_ptr<Node> <a class="code hl_function" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#a0cec4b77d264521717cf9b0482c45817">newKid</a>(std::shared_ptr<Node> <span class="keyword">const</span> &curr) {</div>
|
||||
<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span> <span class="keyword">auto</span> newNode = std::make_shared<Node>(<a class="code hl_class" href="../../d5/d66/classrange__queries_1_1per_seg_tree_1_1_node.html">Node</a>());</div>
|
||||
<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> newNode->left = curr->left;</div>
|
||||
<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span> newNode->right = curr->right;</div>
|
||||
<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span> newNode->prop = curr->prop;</div>
|
||||
<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span> newNode->val = curr->val;</div>
|
||||
<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> <span class="keywordflow">return</span> newNode;</div>
|
||||
<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span> }</div>
|
||||
<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span> </div>
|
||||
<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span> uint32_t n = 0; </div>
|
||||
<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span> std::vector<std::shared_ptr<Node>></div>
|
||||
<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"><a class="line" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#a1eac9cf0613dfc8e2b0195009dd5c9d5"> 55</a></span> <a class="code hl_variable" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#a1eac9cf0613dfc8e2b0195009dd5c9d5">ptrs</a>{}; </div>
|
||||
<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"><a class="line" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#a8ff495d2f389b4aaa54449c26c6078f3"> 58</a></span> std::vector<int64_t> <a class="code hl_variable" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#a8ff495d2f389b4aaa54449c26c6078f3">vec</a>{}; </div>
|
||||
<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span></div>
|
||||
<div class="foldopen" id="foldopen00066" data-start="{" data-end="}">
|
||||
<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"><a class="line" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#a0cec4b77d264521717cf9b0482c45817"> 66</a></span> std::shared_ptr<Node> <a class="code hl_function" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#a0cec4b77d264521717cf9b0482c45817">newKid</a>(std::shared_ptr<Node> <span class="keyword">const</span> &curr) {</div>
|
||||
<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> <span class="keyword">auto</span> newNode = std::make_shared<Node>(<a class="code hl_class" href="../../d5/d66/classrange__queries_1_1per_seg_tree_1_1_node.html">Node</a>());</div>
|
||||
<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span> newNode->left = curr->left;</div>
|
||||
<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span> newNode->right = curr->right;</div>
|
||||
<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span> newNode->prop = curr->prop;</div>
|
||||
<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> newNode->val = curr->val;</div>
|
||||
<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span> <span class="keywordflow">return</span> newNode;</div>
|
||||
<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> }</div>
|
||||
</div>
|
||||
<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span></div>
|
||||
<div class="foldopen" id="foldopen00083" data-start="{" data-end="}">
|
||||
<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"><a class="line" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#ace7f57935b3bb9446f11c239fd89ae79"> 83</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#ace7f57935b3bb9446f11c239fd89ae79">lazy</a>(<span class="keyword">const</span> uint32_t &i, <span class="keyword">const</span> uint32_t &j,</div>
|
||||
<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span> std::shared_ptr<Node> <span class="keyword">const</span> &curr) {</div>
|
||||
<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span> <span class="keywordflow">if</span> (!curr->prop) {</div>
|
||||
<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span> <span class="keywordflow">return</span>;</div>
|
||||
<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span> }</div>
|
||||
<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span> curr->val += (j - i + 1) * curr->prop;</div>
|
||||
<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span> <span class="keywordflow">if</span> (i != j) {</div>
|
||||
<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span> curr->left = <a class="code hl_function" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#a0cec4b77d264521717cf9b0482c45817">newKid</a>(curr->left);</div>
|
||||
<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span> curr->right = <a class="code hl_function" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#a0cec4b77d264521717cf9b0482c45817">newKid</a>(curr->right);</div>
|
||||
<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span> curr->left->prop += curr->prop;</div>
|
||||
<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span> curr->right->prop += curr->prop;</div>
|
||||
<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span> }</div>
|
||||
<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> curr->prop = 0;</div>
|
||||
<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span> }</div>
|
||||
<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span></div>
|
||||
<div class="foldopen" id="foldopen00084" data-start="{" data-end="}">
|
||||
<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"><a class="line" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#ace7f57935b3bb9446f11c239fd89ae79"> 84</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#ace7f57935b3bb9446f11c239fd89ae79">lazy</a>(<span class="keyword">const</span> uint32_t &i, <span class="keyword">const</span> uint32_t &j,</div>
|
||||
<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span> std::shared_ptr<Node> <span class="keyword">const</span> &curr) {</div>
|
||||
<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span> <span class="keywordflow">if</span> (!curr->prop) {</div>
|
||||
<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span> <span class="keywordflow">return</span>;</div>
|
||||
<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span> }</div>
|
||||
<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span> curr->val += (j - i + 1) * curr->prop;</div>
|
||||
<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span> <span class="keywordflow">if</span> (i != j) {</div>
|
||||
<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span> curr->left = <a class="code hl_function" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#a0cec4b77d264521717cf9b0482c45817">newKid</a>(curr->left);</div>
|
||||
<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span> curr->right = <a class="code hl_function" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#a0cec4b77d264521717cf9b0482c45817">newKid</a>(curr->right);</div>
|
||||
<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span> curr->left->prop += curr->prop;</div>
|
||||
<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span> curr->right->prop += curr->prop;</div>
|
||||
<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> }</div>
|
||||
<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span> curr->prop = 0;</div>
|
||||
<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span> }</div>
|
||||
</div>
|
||||
<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span></div>
|
||||
<div class="foldopen" id="foldopen00106" data-start="{" data-end="}">
|
||||
<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"><a class="line" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#a6d3f2465a7c5803a1ff16c5378bcc5e4"> 106</a></span> std::shared_ptr<Node> <a class="code hl_function" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#a6d3f2465a7c5803a1ff16c5378bcc5e4">construct</a>(<span class="keyword">const</span> uint32_t &i, <span class="keyword">const</span> uint32_t &j) {</div>
|
||||
<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span> <span class="keyword">auto</span> newNode = std::make_shared<Node>(<a class="code hl_class" href="../../d5/d66/classrange__queries_1_1per_seg_tree_1_1_node.html">Node</a>());</div>
|
||||
<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span> <span class="keywordflow">if</span> (i == j) {</div>
|
||||
<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span> newNode->val = <a class="code hl_variable" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#a8ff495d2f389b4aaa54449c26c6078f3">vec</a>[i];</div>
|
||||
<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span> } <span class="keywordflow">else</span> {</div>
|
||||
<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span> uint32_t mid = i + (j - i) / 2;</div>
|
||||
<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span> <span class="keyword">auto</span> leftt = <a class="code hl_function" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#a6d3f2465a7c5803a1ff16c5378bcc5e4">construct</a>(i, mid);</div>
|
||||
<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span> <span class="keyword">auto</span> right = <a class="code hl_function" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#a6d3f2465a7c5803a1ff16c5378bcc5e4">construct</a>(mid + 1, j);</div>
|
||||
<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span> newNode->val = leftt->val + right->val;</div>
|
||||
<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span> newNode->left = leftt;</div>
|
||||
<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span> newNode->right = right;</div>
|
||||
<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span> }</div>
|
||||
<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span> <span class="keywordflow">return</span> newNode;</div>
|
||||
<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span> }</div>
|
||||
<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span></div>
|
||||
<div class="foldopen" id="foldopen00107" data-start="{" data-end="}">
|
||||
<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"><a class="line" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#a6d3f2465a7c5803a1ff16c5378bcc5e4"> 107</a></span> std::shared_ptr<Node> <a class="code hl_function" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#a6d3f2465a7c5803a1ff16c5378bcc5e4">construct</a>(<span class="keyword">const</span> uint32_t &i, <span class="keyword">const</span> uint32_t &j) {</div>
|
||||
<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span> <span class="keyword">auto</span> newNode = std::make_shared<Node>(<a class="code hl_class" href="../../d5/d66/classrange__queries_1_1per_seg_tree_1_1_node.html">Node</a>());</div>
|
||||
<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span> <span class="keywordflow">if</span> (i == j) {</div>
|
||||
<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span> newNode->val = <a class="code hl_variable" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#a8ff495d2f389b4aaa54449c26c6078f3">vec</a>[i];</div>
|
||||
<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span> } <span class="keywordflow">else</span> {</div>
|
||||
<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span> uint32_t mid = i + (j - i) / 2;</div>
|
||||
<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span> <span class="keyword">auto</span> leftt = <a class="code hl_function" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#a6d3f2465a7c5803a1ff16c5378bcc5e4">construct</a>(i, mid);</div>
|
||||
<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span> <span class="keyword">auto</span> right = <a class="code hl_function" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#a6d3f2465a7c5803a1ff16c5378bcc5e4">construct</a>(mid + 1, j);</div>
|
||||
<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span> newNode->val = leftt->val + right->val;</div>
|
||||
<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span> newNode->left = leftt;</div>
|
||||
<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span> newNode->right = right;</div>
|
||||
<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span> }</div>
|
||||
<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span> <span class="keywordflow">return</span> newNode;</div>
|
||||
<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span> }</div>
|
||||
</div>
|
||||
<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span></div>
|
||||
<div class="foldopen" id="foldopen00135" data-start="{" data-end="}">
|
||||
<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"><a class="line" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#a24487eda25123bc4d112e8430821a6c6"> 135</a></span> std::shared_ptr<Node> <a class="code hl_function" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#a24487eda25123bc4d112e8430821a6c6">update</a>(<span class="keyword">const</span> uint32_t &i, <span class="keyword">const</span> uint32_t &j,</div>
|
||||
<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span> <span class="keyword">const</span> uint32_t &l, <span class="keyword">const</span> uint32_t &r,</div>
|
||||
<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"> 137</span> <span class="keyword">const</span> int64_t &value,</div>
|
||||
<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span> std::shared_ptr<Node> <span class="keyword">const</span> &curr) {</div>
|
||||
<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span> <a class="code hl_function" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#ace7f57935b3bb9446f11c239fd89ae79">lazy</a>(i, j, curr);</div>
|
||||
<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span> <span class="keywordflow">if</span> (i >= l && j <= r) {</div>
|
||||
<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span> std::shared_ptr<Node> newNode = <a class="code hl_function" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#a0cec4b77d264521717cf9b0482c45817">newKid</a>(curr);</div>
|
||||
<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span> newNode->prop += value;</div>
|
||||
<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span> <a class="code hl_function" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#ace7f57935b3bb9446f11c239fd89ae79">lazy</a>(i, j, newNode);</div>
|
||||
<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span> <span class="keywordflow">return</span> newNode;</div>
|
||||
<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span> }</div>
|
||||
<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span> <span class="keywordflow">if</span> (i > r || j < l) {</div>
|
||||
<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span> <span class="keywordflow">return</span> curr;</div>
|
||||
<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span> }</div>
|
||||
<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span> <span class="keyword">auto</span> newNode = std::make_shared<Node>(<a class="code hl_class" href="../../d5/d66/classrange__queries_1_1per_seg_tree_1_1_node.html">Node</a>());</div>
|
||||
<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span> uint32_t mid = i + (j - i) / 2;</div>
|
||||
<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span> newNode->left = <a class="code hl_function" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#a24487eda25123bc4d112e8430821a6c6">update</a>(i, mid, l, r, value, curr->left);</div>
|
||||
<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span> newNode->right = <a class="code hl_function" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#a24487eda25123bc4d112e8430821a6c6">update</a>(mid + 1, j, l, r, value, curr->right);</div>
|
||||
<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span> newNode->val = newNode->left->val + newNode->right->val;</div>
|
||||
<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span> <span class="keywordflow">return</span> newNode;</div>
|
||||
<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"> 155</span> }</div>
|
||||
<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span></div>
|
||||
<div class="foldopen" id="foldopen00136" data-start="{" data-end="}">
|
||||
<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"><a class="line" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#a24487eda25123bc4d112e8430821a6c6"> 136</a></span> std::shared_ptr<Node> <a class="code hl_function" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#a24487eda25123bc4d112e8430821a6c6">update</a>(<span class="keyword">const</span> uint32_t &i, <span class="keyword">const</span> uint32_t &j,</div>
|
||||
<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"> 137</span> <span class="keyword">const</span> uint32_t &l, <span class="keyword">const</span> uint32_t &r,</div>
|
||||
<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span> <span class="keyword">const</span> int64_t &value,</div>
|
||||
<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span> std::shared_ptr<Node> <span class="keyword">const</span> &curr) {</div>
|
||||
<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span> <a class="code hl_function" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#ace7f57935b3bb9446f11c239fd89ae79">lazy</a>(i, j, curr);</div>
|
||||
<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span> <span class="keywordflow">if</span> (i >= l && j <= r) {</div>
|
||||
<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span> std::shared_ptr<Node> newNode = <a class="code hl_function" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#a0cec4b77d264521717cf9b0482c45817">newKid</a>(curr);</div>
|
||||
<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span> newNode->prop += value;</div>
|
||||
<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span> <a class="code hl_function" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#ace7f57935b3bb9446f11c239fd89ae79">lazy</a>(i, j, newNode);</div>
|
||||
<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span> <span class="keywordflow">return</span> newNode;</div>
|
||||
<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span> }</div>
|
||||
<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span> <span class="keywordflow">if</span> (i > r || j < l) {</div>
|
||||
<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span> <span class="keywordflow">return</span> curr;</div>
|
||||
<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span> }</div>
|
||||
<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span> <span class="keyword">auto</span> newNode = std::make_shared<Node>(<a class="code hl_class" href="../../d5/d66/classrange__queries_1_1per_seg_tree_1_1_node.html">Node</a>());</div>
|
||||
<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span> uint32_t mid = i + (j - i) / 2;</div>
|
||||
<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span> newNode->left = <a class="code hl_function" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#a24487eda25123bc4d112e8430821a6c6">update</a>(i, mid, l, r, value, curr->left);</div>
|
||||
<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span> newNode->right = <a class="code hl_function" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#a24487eda25123bc4d112e8430821a6c6">update</a>(mid + 1, j, l, r, value, curr->right);</div>
|
||||
<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span> newNode->val = newNode->left->val + newNode->right->val;</div>
|
||||
<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"> 155</span> <span class="keywordflow">return</span> newNode;</div>
|
||||
<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"> 156</span> }</div>
|
||||
</div>
|
||||
<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"> 156</span></div>
|
||||
<div class="foldopen" id="foldopen00171" data-start="{" data-end="}">
|
||||
<div class="line"><a id="l00171" name="l00171"></a><span class="lineno"><a class="line" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#ae8ae4b1835e5e8aec32f68c5059ed4d4"> 171</a></span> int64_t <a class="code hl_function" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#ae8ae4b1835e5e8aec32f68c5059ed4d4">query</a>(<span class="keyword">const</span> uint32_t &i, <span class="keyword">const</span> uint32_t &j, <span class="keyword">const</span> uint32_t &l,</div>
|
||||
<div class="line"><a id="l00172" name="l00172"></a><span class="lineno"> 172</span> <span class="keyword">const</span> uint32_t &r, std::shared_ptr<Node> <span class="keyword">const</span> &curr) {</div>
|
||||
<div class="line"><a id="l00173" name="l00173"></a><span class="lineno"> 173</span> <a class="code hl_function" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#ace7f57935b3bb9446f11c239fd89ae79">lazy</a>(i, j, curr);</div>
|
||||
<div class="line"><a id="l00174" name="l00174"></a><span class="lineno"> 174</span> <span class="keywordflow">if</span> (j < l || r < i) {</div>
|
||||
<div class="line"><a id="l00175" name="l00175"></a><span class="lineno"> 175</span> <span class="keywordflow">return</span> 0;</div>
|
||||
<div class="line"><a id="l00176" name="l00176"></a><span class="lineno"> 176</span> }</div>
|
||||
<div class="line"><a id="l00177" name="l00177"></a><span class="lineno"> 177</span> <span class="keywordflow">if</span> (i >= l && j <= r) {</div>
|
||||
<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"> 178</span> <span class="keywordflow">return</span> curr->val;</div>
|
||||
<div class="line"><a id="l00179" name="l00179"></a><span class="lineno"> 179</span> }</div>
|
||||
<div class="line"><a id="l00180" name="l00180"></a><span class="lineno"> 180</span> uint32_t mid = i + (j - i) / 2;</div>
|
||||
<div class="line"><a id="l00181" name="l00181"></a><span class="lineno"> 181</span> <span class="keywordflow">return</span> <a class="code hl_function" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#ae8ae4b1835e5e8aec32f68c5059ed4d4">query</a>(i, mid, l, r, curr->left) +</div>
|
||||
<div class="line"><a id="l00182" name="l00182"></a><span class="lineno"> 182</span> <a class="code hl_function" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#ae8ae4b1835e5e8aec32f68c5059ed4d4">query</a>(mid + 1, j, l, r, curr->right);</div>
|
||||
<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"> 183</span> }</div>
|
||||
<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</span></div>
|
||||
<div class="foldopen" id="foldopen00172" data-start="{" data-end="}">
|
||||
<div class="line"><a id="l00172" name="l00172"></a><span class="lineno"><a class="line" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#ae8ae4b1835e5e8aec32f68c5059ed4d4"> 172</a></span> int64_t <a class="code hl_function" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#ae8ae4b1835e5e8aec32f68c5059ed4d4">query</a>(<span class="keyword">const</span> uint32_t &i, <span class="keyword">const</span> uint32_t &j, <span class="keyword">const</span> uint32_t &l,</div>
|
||||
<div class="line"><a id="l00173" name="l00173"></a><span class="lineno"> 173</span> <span class="keyword">const</span> uint32_t &r, std::shared_ptr<Node> <span class="keyword">const</span> &curr) {</div>
|
||||
<div class="line"><a id="l00174" name="l00174"></a><span class="lineno"> 174</span> <a class="code hl_function" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#ace7f57935b3bb9446f11c239fd89ae79">lazy</a>(i, j, curr);</div>
|
||||
<div class="line"><a id="l00175" name="l00175"></a><span class="lineno"> 175</span> <span class="keywordflow">if</span> (j < l || r < i) {</div>
|
||||
<div class="line"><a id="l00176" name="l00176"></a><span class="lineno"> 176</span> <span class="keywordflow">return</span> 0;</div>
|
||||
<div class="line"><a id="l00177" name="l00177"></a><span class="lineno"> 177</span> }</div>
|
||||
<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"> 178</span> <span class="keywordflow">if</span> (i >= l && j <= r) {</div>
|
||||
<div class="line"><a id="l00179" name="l00179"></a><span class="lineno"> 179</span> <span class="keywordflow">return</span> curr->val;</div>
|
||||
<div class="line"><a id="l00180" name="l00180"></a><span class="lineno"> 180</span> }</div>
|
||||
<div class="line"><a id="l00181" name="l00181"></a><span class="lineno"> 181</span> uint32_t mid = i + (j - i) / 2;</div>
|
||||
<div class="line"><a id="l00182" name="l00182"></a><span class="lineno"> 182</span> <span class="keywordflow">return</span> <a class="code hl_function" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#ae8ae4b1835e5e8aec32f68c5059ed4d4">query</a>(i, mid, l, r, curr->left) +</div>
|
||||
<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"> 183</span> <a class="code hl_function" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#ae8ae4b1835e5e8aec32f68c5059ed4d4">query</a>(mid + 1, j, l, r, curr->right);</div>
|
||||
<div class="line"><a id="l00184" name="l00184"></a><span class="lineno"> 184</span> }</div>
|
||||
</div>
|
||||
<div class="line"><a id="l00184" name="l00184"></a><span class="lineno"> 184</span></div>
|
||||
<div class="line"><a id="l00189" name="l00189"></a><span class="lineno"> 189</span> <span class="keyword">public</span>:</div>
|
||||
<div class="foldopen" id="foldopen00197" data-start="{" data-end="}">
|
||||
<div class="line"><a id="l00197" name="l00197"></a><span class="lineno"><a class="line" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#ac83bcabf5a8db8b0d8d156a4c1bcd4c3"> 197</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#ac83bcabf5a8db8b0d8d156a4c1bcd4c3">construct</a>(<span class="keyword">const</span> std::vector<int64_t></div>
|
||||
<div class="line"><a id="l00198" name="l00198"></a><span class="lineno"> 198</span> &<a class="code hl_variable" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#a8ff495d2f389b4aaa54449c26c6078f3">vec</a>) <span class="comment">// the segment tree will be built from the values</span></div>
|
||||
<div class="line"><a id="l00199" name="l00199"></a><span class="lineno"> 199</span> <span class="comment">// in "vec", "vec" is 0 indexed</span></div>
|
||||
<div class="line"><a id="l00200" name="l00200"></a><span class="lineno"> 200</span> {</div>
|
||||
<div class="line"><a id="l00201" name="l00201"></a><span class="lineno"> 201</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#a8ff495d2f389b4aaa54449c26c6078f3">vec</a>.empty()) {</div>
|
||||
<div class="line"><a id="l00202" name="l00202"></a><span class="lineno"> 202</span> <span class="keywordflow">return</span>;</div>
|
||||
<div class="line"><a id="l00203" name="l00203"></a><span class="lineno"> 203</span> }</div>
|
||||
<div class="line"><a id="l00204" name="l00204"></a><span class="lineno"> 204</span> n = <a class="code hl_variable" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#a8ff495d2f389b4aaa54449c26c6078f3">vec</a>.size();</div>
|
||||
<div class="line"><a id="l00205" name="l00205"></a><span class="lineno"> 205</span> this->vec = <a class="code hl_variable" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#a8ff495d2f389b4aaa54449c26c6078f3">vec</a>;</div>
|
||||
<div class="line"><a id="l00206" name="l00206"></a><span class="lineno"> 206</span> <span class="keyword">auto</span> root = <a class="code hl_function" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#a6d3f2465a7c5803a1ff16c5378bcc5e4">construct</a>(0, n - 1);</div>
|
||||
<div class="line"><a id="l00207" name="l00207"></a><span class="lineno"> 207</span> <a class="code hl_variable" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#a1eac9cf0613dfc8e2b0195009dd5c9d5">ptrs</a>.push_back(root);</div>
|
||||
<div class="line"><a id="l00208" name="l00208"></a><span class="lineno"> 208</span> }</div>
|
||||
<div class="line"><a id="l00185" name="l00185"></a><span class="lineno"> 185</span></div>
|
||||
<div class="line"><a id="l00190" name="l00190"></a><span class="lineno"> 190</span> <span class="keyword">public</span>:</div>
|
||||
<div class="foldopen" id="foldopen00198" data-start="{" data-end="}">
|
||||
<div class="line"><a id="l00198" name="l00198"></a><span class="lineno"><a class="line" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#ac83bcabf5a8db8b0d8d156a4c1bcd4c3"> 198</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#ac83bcabf5a8db8b0d8d156a4c1bcd4c3">construct</a>(<span class="keyword">const</span> std::vector<int64_t></div>
|
||||
<div class="line"><a id="l00199" name="l00199"></a><span class="lineno"> 199</span> &<a class="code hl_variable" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#a8ff495d2f389b4aaa54449c26c6078f3">vec</a>) <span class="comment">// the segment tree will be built from the values</span></div>
|
||||
<div class="line"><a id="l00200" name="l00200"></a><span class="lineno"> 200</span> <span class="comment">// in "vec", "vec" is 0 indexed</span></div>
|
||||
<div class="line"><a id="l00201" name="l00201"></a><span class="lineno"> 201</span> {</div>
|
||||
<div class="line"><a id="l00202" name="l00202"></a><span class="lineno"> 202</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#a8ff495d2f389b4aaa54449c26c6078f3">vec</a>.empty()) {</div>
|
||||
<div class="line"><a id="l00203" name="l00203"></a><span class="lineno"> 203</span> <span class="keywordflow">return</span>;</div>
|
||||
<div class="line"><a id="l00204" name="l00204"></a><span class="lineno"> 204</span> }</div>
|
||||
<div class="line"><a id="l00205" name="l00205"></a><span class="lineno"> 205</span> n = <a class="code hl_variable" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#a8ff495d2f389b4aaa54449c26c6078f3">vec</a>.size();</div>
|
||||
<div class="line"><a id="l00206" name="l00206"></a><span class="lineno"> 206</span> this->vec = <a class="code hl_variable" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#a8ff495d2f389b4aaa54449c26c6078f3">vec</a>;</div>
|
||||
<div class="line"><a id="l00207" name="l00207"></a><span class="lineno"> 207</span> <span class="keyword">auto</span> root = <a class="code hl_function" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#a6d3f2465a7c5803a1ff16c5378bcc5e4">construct</a>(0, n - 1);</div>
|
||||
<div class="line"><a id="l00208" name="l00208"></a><span class="lineno"> 208</span> <a class="code hl_variable" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#a1eac9cf0613dfc8e2b0195009dd5c9d5">ptrs</a>.push_back(root);</div>
|
||||
<div class="line"><a id="l00209" name="l00209"></a><span class="lineno"> 209</span> }</div>
|
||||
</div>
|
||||
<div class="line"><a id="l00209" name="l00209"></a><span class="lineno"> 209</span></div>
|
||||
<div class="foldopen" id="foldopen00219" data-start="{" data-end="}">
|
||||
<div class="line"><a id="l00219" name="l00219"></a><span class="lineno"><a class="line" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#af87494e6cf012d28c4f5b9d1c15f9c5d"> 219</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#af87494e6cf012d28c4f5b9d1c15f9c5d">update</a>(<span class="keyword">const</span> uint32_t &l, <span class="keyword">const</span> uint32_t &r,</div>
|
||||
<div class="line"><a id="l00220" name="l00220"></a><span class="lineno"> 220</span> <span class="keyword">const</span> int64_t</div>
|
||||
<div class="line"><a id="l00221" name="l00221"></a><span class="lineno"> 221</span> &value) <span class="comment">// all elements from index "l" to index "r" would</span></div>
|
||||
<div class="line"><a id="l00222" name="l00222"></a><span class="lineno"> 222</span> <span class="comment">// by updated by "value", "l" and "r" are 0 indexed</span></div>
|
||||
<div class="line"><a id="l00223" name="l00223"></a><span class="lineno"> 223</span> {</div>
|
||||
<div class="line"><a id="l00224" name="l00224"></a><span class="lineno"> 224</span> <a class="code hl_variable" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#a1eac9cf0613dfc8e2b0195009dd5c9d5">ptrs</a>.push_back(<a class="code hl_function" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#a24487eda25123bc4d112e8430821a6c6">update</a>(</div>
|
||||
<div class="line"><a id="l00225" name="l00225"></a><span class="lineno"> 225</span> 0, n - 1, l, r, value,</div>
|
||||
<div class="line"><a id="l00226" name="l00226"></a><span class="lineno"> 226</span> <a class="code hl_variable" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#a1eac9cf0613dfc8e2b0195009dd5c9d5">ptrs</a>[<a class="code hl_variable" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#a1eac9cf0613dfc8e2b0195009dd5c9d5">ptrs</a>.size() -</div>
|
||||
<div class="line"><a id="l00227" name="l00227"></a><span class="lineno"> 227</span> 1])); <span class="comment">// saving the root pointer to the new segment tree</span></div>
|
||||
<div class="line"><a id="l00228" name="l00228"></a><span class="lineno"> 228</span> }</div>
|
||||
<div class="line"><a id="l00210" name="l00210"></a><span class="lineno"> 210</span></div>
|
||||
<div class="foldopen" id="foldopen00220" data-start="{" data-end="}">
|
||||
<div class="line"><a id="l00220" name="l00220"></a><span class="lineno"><a class="line" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#af87494e6cf012d28c4f5b9d1c15f9c5d"> 220</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#af87494e6cf012d28c4f5b9d1c15f9c5d">update</a>(<span class="keyword">const</span> uint32_t &l, <span class="keyword">const</span> uint32_t &r,</div>
|
||||
<div class="line"><a id="l00221" name="l00221"></a><span class="lineno"> 221</span> <span class="keyword">const</span> int64_t</div>
|
||||
<div class="line"><a id="l00222" name="l00222"></a><span class="lineno"> 222</span> &value) <span class="comment">// all elements from index "l" to index "r" would</span></div>
|
||||
<div class="line"><a id="l00223" name="l00223"></a><span class="lineno"> 223</span> <span class="comment">// by updated by "value", "l" and "r" are 0 indexed</span></div>
|
||||
<div class="line"><a id="l00224" name="l00224"></a><span class="lineno"> 224</span> {</div>
|
||||
<div class="line"><a id="l00225" name="l00225"></a><span class="lineno"> 225</span> <a class="code hl_variable" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#a1eac9cf0613dfc8e2b0195009dd5c9d5">ptrs</a>.push_back(<a class="code hl_function" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#a24487eda25123bc4d112e8430821a6c6">update</a>(</div>
|
||||
<div class="line"><a id="l00226" name="l00226"></a><span class="lineno"> 226</span> 0, n - 1, l, r, value,</div>
|
||||
<div class="line"><a id="l00227" name="l00227"></a><span class="lineno"> 227</span> <a class="code hl_variable" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#a1eac9cf0613dfc8e2b0195009dd5c9d5">ptrs</a>[<a class="code hl_variable" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#a1eac9cf0613dfc8e2b0195009dd5c9d5">ptrs</a>.size() -</div>
|
||||
<div class="line"><a id="l00228" name="l00228"></a><span class="lineno"> 228</span> 1])); <span class="comment">// saving the root pointer to the new segment tree</span></div>
|
||||
<div class="line"><a id="l00229" name="l00229"></a><span class="lineno"> 229</span> }</div>
|
||||
</div>
|
||||
<div class="line"><a id="l00229" name="l00229"></a><span class="lineno"> 229</span></div>
|
||||
<div class="foldopen" id="foldopen00241" data-start="{" data-end="}">
|
||||
<div class="line"><a id="l00241" name="l00241"></a><span class="lineno"><a class="line" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#ad484002bcb701820d55f32ea5d525571"> 241</a></span> int64_t <a class="code hl_function" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#ad484002bcb701820d55f32ea5d525571">query</a>(</div>
|
||||
<div class="line"><a id="l00242" name="l00242"></a><span class="lineno"> 242</span> <span class="keyword">const</span> uint32_t &l, <span class="keyword">const</span> uint32_t &r,</div>
|
||||
<div class="line"><a id="l00243" name="l00243"></a><span class="lineno"> 243</span> <span class="keyword">const</span> uint32_t</div>
|
||||
<div class="line"><a id="l00244" name="l00244"></a><span class="lineno"> 244</span> &version) <span class="comment">// querying the range from "l" to "r" in a segment tree</span></div>
|
||||
<div class="line"><a id="l00245" name="l00245"></a><span class="lineno"> 245</span> <span class="comment">// after "version" updates, "l" and "r" are 0 indexed</span></div>
|
||||
<div class="line"><a id="l00246" name="l00246"></a><span class="lineno"> 246</span> {</div>
|
||||
<div class="line"><a id="l00247" name="l00247"></a><span class="lineno"> 247</span> <span class="keywordflow">return</span> <a class="code hl_function" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#ae8ae4b1835e5e8aec32f68c5059ed4d4">query</a>(0, n - 1, l, r, <a class="code hl_variable" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#a1eac9cf0613dfc8e2b0195009dd5c9d5">ptrs</a>[version]);</div>
|
||||
<div class="line"><a id="l00248" name="l00248"></a><span class="lineno"> 248</span> }</div>
|
||||
<div class="line"><a id="l00230" name="l00230"></a><span class="lineno"> 230</span></div>
|
||||
<div class="foldopen" id="foldopen00242" data-start="{" data-end="}">
|
||||
<div class="line"><a id="l00242" name="l00242"></a><span class="lineno"><a class="line" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#ad484002bcb701820d55f32ea5d525571"> 242</a></span> int64_t <a class="code hl_function" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#ad484002bcb701820d55f32ea5d525571">query</a>(</div>
|
||||
<div class="line"><a id="l00243" name="l00243"></a><span class="lineno"> 243</span> <span class="keyword">const</span> uint32_t &l, <span class="keyword">const</span> uint32_t &r,</div>
|
||||
<div class="line"><a id="l00244" name="l00244"></a><span class="lineno"> 244</span> <span class="keyword">const</span> uint32_t</div>
|
||||
<div class="line"><a id="l00245" name="l00245"></a><span class="lineno"> 245</span> &version) <span class="comment">// querying the range from "l" to "r" in a segment tree</span></div>
|
||||
<div class="line"><a id="l00246" name="l00246"></a><span class="lineno"> 246</span> <span class="comment">// after "version" updates, "l" and "r" are 0 indexed</span></div>
|
||||
<div class="line"><a id="l00247" name="l00247"></a><span class="lineno"> 247</span> {</div>
|
||||
<div class="line"><a id="l00248" name="l00248"></a><span class="lineno"> 248</span> <span class="keywordflow">return</span> <a class="code hl_function" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#ae8ae4b1835e5e8aec32f68c5059ed4d4">query</a>(0, n - 1, l, r, <a class="code hl_variable" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#a1eac9cf0613dfc8e2b0195009dd5c9d5">ptrs</a>[version]);</div>
|
||||
<div class="line"><a id="l00249" name="l00249"></a><span class="lineno"> 249</span> }</div>
|
||||
</div>
|
||||
<div class="line"><a id="l00249" name="l00249"></a><span class="lineno"> 249</span></div>
|
||||
<div class="foldopen" id="foldopen00255" data-start="{" data-end="}">
|
||||
<div class="line"><a id="l00255" name="l00255"></a><span class="lineno"><a class="line" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#a0fe4e431f3e09c274ecd7d2d58dcb865"> 255</a></span> uint32_t <a class="code hl_function" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#a0fe4e431f3e09c274ecd7d2d58dcb865">size</a>() <span class="comment">// returns the number of segment trees (versions) , the</span></div>
|
||||
<div class="line"><a id="l00256" name="l00256"></a><span class="lineno"> 256</span> <span class="comment">// number of updates done so far = returned value - 1</span></div>
|
||||
<div class="line"><a id="l00257" name="l00257"></a><span class="lineno"> 257</span> <span class="comment">// ,because one of the trees is the original segment tree</span></div>
|
||||
<div class="line"><a id="l00258" name="l00258"></a><span class="lineno"> 258</span> {</div>
|
||||
<div class="line"><a id="l00259" name="l00259"></a><span class="lineno"> 259</span> <span class="keywordflow">return</span> <a class="code hl_variable" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#a1eac9cf0613dfc8e2b0195009dd5c9d5">ptrs</a>.size();</div>
|
||||
<div class="line"><a id="l00260" name="l00260"></a><span class="lineno"> 260</span> }</div>
|
||||
<div class="line"><a id="l00250" name="l00250"></a><span class="lineno"> 250</span></div>
|
||||
<div class="foldopen" id="foldopen00256" data-start="{" data-end="}">
|
||||
<div class="line"><a id="l00256" name="l00256"></a><span class="lineno"><a class="line" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#a0fe4e431f3e09c274ecd7d2d58dcb865"> 256</a></span> uint32_t <a class="code hl_function" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#a0fe4e431f3e09c274ecd7d2d58dcb865">size</a>() <span class="comment">// returns the number of segment trees (versions) , the</span></div>
|
||||
<div class="line"><a id="l00257" name="l00257"></a><span class="lineno"> 257</span> <span class="comment">// number of updates done so far = returned value - 1</span></div>
|
||||
<div class="line"><a id="l00258" name="l00258"></a><span class="lineno"> 258</span> <span class="comment">// ,because one of the trees is the original segment tree</span></div>
|
||||
<div class="line"><a id="l00259" name="l00259"></a><span class="lineno"> 259</span> {</div>
|
||||
<div class="line"><a id="l00260" name="l00260"></a><span class="lineno"> 260</span> <span class="keywordflow">return</span> <a class="code hl_variable" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#a1eac9cf0613dfc8e2b0195009dd5c9d5">ptrs</a>.size();</div>
|
||||
<div class="line"><a id="l00261" name="l00261"></a><span class="lineno"> 261</span> }</div>
|
||||
</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"> 262</span>};</div>
|
||||
</div>
|
||||
<div class="line"><a id="l00262" name="l00262"></a><span class="lineno"> 262</span>} <span class="comment">// namespace range_queries</span></div>
|
||||
<div class="line"><a id="l00263" name="l00263"></a><span class="lineno"> 263</span></div>
|
||||
<div class="foldopen" id="foldopen00268" data-start="{" data-end="}">
|
||||
<div class="line"><a id="l00268" name="l00268"></a><span class="lineno"><a class="line" href="../../d5/d58/persistent__seg__tree__lazy__prop_8cpp.html#aa8dca7b867074164d5f45b0f3851269d"> 268</a></span><span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code hl_function" href="../../d5/d58/persistent__seg__tree__lazy__prop_8cpp.html#aa8dca7b867074164d5f45b0f3851269d">test</a>() {</div>
|
||||
<div class="line"><a id="l00269" name="l00269"></a><span class="lineno"> 269</span> std::vector<int64_t> arr = {-5, 2, 3, 11, -2, 7, 0, 1};</div>
|
||||
<div class="line"><a id="l00270" name="l00270"></a><span class="lineno"> 270</span> <a class="code hl_class" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html">range_queries::perSegTree</a> tree;</div>
|
||||
<div class="line"><a id="l00271" name="l00271"></a><span class="lineno"> 271</span> std::cout << <span class="stringliteral">"Elements before any updates are {"</span>;</div>
|
||||
<div class="line"><a id="l00272" name="l00272"></a><span class="lineno"> 272</span> <span class="keywordflow">for</span> (uint32_t i = 0; i < arr.size(); ++i) {</div>
|
||||
<div class="line"><a id="l00273" name="l00273"></a><span class="lineno"> 273</span> std::cout << arr[i];</div>
|
||||
<div class="line"><a id="l00274" name="l00274"></a><span class="lineno"> 274</span> <span class="keywordflow">if</span> (i != arr.size() - 1) {</div>
|
||||
<div class="line"><a id="l00275" name="l00275"></a><span class="lineno"> 275</span> std::cout << <span class="stringliteral">","</span>;</div>
|
||||
<div class="line"><a id="l00276" name="l00276"></a><span class="lineno"> 276</span> }</div>
|
||||
<div class="line"><a id="l00277" name="l00277"></a><span class="lineno"> 277</span> }</div>
|
||||
<div class="line"><a id="l00278" name="l00278"></a><span class="lineno"> 278</span> std::cout << <span class="stringliteral">"}\n"</span>;</div>
|
||||
<div class="line"><a id="l00279" name="l00279"></a><span class="lineno"> 279</span> tree.<a class="code hl_function" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#a6d3f2465a7c5803a1ff16c5378bcc5e4">construct</a>(</div>
|
||||
<div class="line"><a id="l00280" name="l00280"></a><span class="lineno"> 280</span> arr); <span class="comment">// constructing the original segment tree (version = 0)</span></div>
|
||||
<div class="line"><a id="l00281" name="l00281"></a><span class="lineno"> 281</span> std::cout << <span class="stringliteral">"Querying range sum on version 0 from index 2 to 4 = 3+11-2 = "</span></div>
|
||||
<div class="line"><a id="l00282" name="l00282"></a><span class="lineno"> 282</span> << tree.<a class="code hl_function" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#ae8ae4b1835e5e8aec32f68c5059ed4d4">query</a>(2, 4, 0) << <span class="charliteral">'\n'</span>;</div>
|
||||
<div class="line"><a id="l00283" name="l00283"></a><span class="lineno"> 283</span> std::cout</div>
|
||||
<div class="line"><a id="l00284" name="l00284"></a><span class="lineno"> 284</span> << <span class="stringliteral">"Subtract 7 from all elements from index 1 to index 5 inclusive\n"</span>;</div>
|
||||
<div class="line"><a id="l00285" name="l00285"></a><span class="lineno"> 285</span> tree.<a class="code hl_function" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#a24487eda25123bc4d112e8430821a6c6">update</a>(1, 5, -7); <span class="comment">// subtracting 7 from index 1 to index 5</span></div>
|
||||
<div class="line"><a id="l00286" name="l00286"></a><span class="lineno"> 286</span> std::cout << <span class="stringliteral">"Elements of the segment tree whose version = 1 (after 1 "</span></div>
|
||||
<div class="line"><a id="l00287" name="l00287"></a><span class="lineno"> 287</span> <span class="stringliteral">"update) are {"</span>;</div>
|
||||
<div class="line"><a id="l00288" name="l00288"></a><span class="lineno"> 288</span> <span class="keywordflow">for</span> (uint32_t i = 0; i < arr.size(); ++i) {</div>
|
||||
<div class="line"><a id="l00289" name="l00289"></a><span class="lineno"> 289</span> std::cout << tree.<a class="code hl_function" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#ae8ae4b1835e5e8aec32f68c5059ed4d4">query</a>(i, i, 1);</div>
|
||||
<div class="line"><a id="l00290" name="l00290"></a><span class="lineno"> 290</span> <span class="keywordflow">if</span> (i != arr.size() - 1) {</div>
|
||||
<div class="line"><a id="l00291" name="l00291"></a><span class="lineno"> 291</span> std::cout << <span class="stringliteral">","</span>;</div>
|
||||
<div class="line"><a id="l00292" name="l00292"></a><span class="lineno"> 292</span> }</div>
|
||||
<div class="line"><a id="l00293" name="l00293"></a><span class="lineno"> 293</span> }</div>
|
||||
<div class="line"><a id="l00294" name="l00294"></a><span class="lineno"> 294</span> std::cout << <span class="stringliteral">"}\n"</span>;</div>
|
||||
<div class="line"><a id="l00295" name="l00295"></a><span class="lineno"> 295</span> std::cout << <span class="stringliteral">"Add 10 to all elements from index 0 to index 7 inclusive\n"</span>;</div>
|
||||
<div class="line"><a id="l00296" name="l00296"></a><span class="lineno"> 296</span> tree.<a class="code hl_function" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#a24487eda25123bc4d112e8430821a6c6">update</a>(0, 7, 10); <span class="comment">// adding 10 to all elements</span></div>
|
||||
<div class="line"><a id="l00297" name="l00297"></a><span class="lineno"> 297</span> std::cout << <span class="stringliteral">"Elements of the segment tree whose version = 2 (after 2 "</span></div>
|
||||
<div class="line"><a id="l00298" name="l00298"></a><span class="lineno"> 298</span> <span class="stringliteral">"updates) are {"</span>;</div>
|
||||
<div class="line"><a id="l00299" name="l00299"></a><span class="lineno"> 299</span> <span class="keywordflow">for</span> (uint32_t i = 0; i < arr.size(); ++i) {</div>
|
||||
<div class="line"><a id="l00300" name="l00300"></a><span class="lineno"> 300</span> std::cout << tree.<a class="code hl_function" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#ae8ae4b1835e5e8aec32f68c5059ed4d4">query</a>(i, i, 2);</div>
|
||||
<div class="line"><a id="l00301" name="l00301"></a><span class="lineno"> 301</span> <span class="keywordflow">if</span> (i != arr.size() - 1) {</div>
|
||||
<div class="line"><a id="l00302" name="l00302"></a><span class="lineno"> 302</span> std::cout << <span class="stringliteral">","</span>;</div>
|
||||
<div class="line"><a id="l00303" name="l00303"></a><span class="lineno"> 303</span> }</div>
|
||||
<div class="line"><a id="l00304" name="l00304"></a><span class="lineno"> 304</span> }</div>
|
||||
<div class="line"><a id="l00305" name="l00305"></a><span class="lineno"> 305</span> std::cout << <span class="stringliteral">"}\n"</span>;</div>
|
||||
<div class="line"><a id="l00306" name="l00306"></a><span class="lineno"> 306</span> std::cout << <span class="stringliteral">"Number of segment trees (versions) now = "</span> << tree.<a class="code hl_function" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#a0fe4e431f3e09c274ecd7d2d58dcb865">size</a>()</div>
|
||||
<div class="line"><a id="l00307" name="l00307"></a><span class="lineno"> 307</span> << <span class="charliteral">'\n'</span>;</div>
|
||||
<div class="line"><a id="l00308" name="l00308"></a><span class="lineno"> 308</span> std::cout << <span class="stringliteral">"Querying range sum on version 0 from index 3 to 5 = 11-2+7 = "</span></div>
|
||||
<div class="line"><a id="l00309" name="l00309"></a><span class="lineno"> 309</span> << tree.<a class="code hl_function" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#ae8ae4b1835e5e8aec32f68c5059ed4d4">query</a>(3, 5, 0) << <span class="charliteral">'\n'</span>;</div>
|
||||
<div class="line"><a id="l00310" name="l00310"></a><span class="lineno"> 310</span> std::cout << <span class="stringliteral">"Querying range sum on version 1 from index 3 to 5 = 4-9+0 = "</span></div>
|
||||
<div class="line"><a id="l00311" name="l00311"></a><span class="lineno"> 311</span> << tree.<a class="code hl_function" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#ae8ae4b1835e5e8aec32f68c5059ed4d4">query</a>(3, 5, 1) << <span class="charliteral">'\n'</span>;</div>
|
||||
<div class="line"><a id="l00312" name="l00312"></a><span class="lineno"> 312</span>}</div>
|
||||
<div class="line"><a id="l00263" name="l00263"></a><span class="lineno"> 263</span>} <span class="comment">// namespace range_queries</span></div>
|
||||
<div class="line"><a id="l00264" name="l00264"></a><span class="lineno"> 264</span></div>
|
||||
<div class="foldopen" id="foldopen00269" data-start="{" data-end="}">
|
||||
<div class="line"><a id="l00269" name="l00269"></a><span class="lineno"><a class="line" href="../../d5/d58/persistent__seg__tree__lazy__prop_8cpp.html#aa8dca7b867074164d5f45b0f3851269d"> 269</a></span><span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code hl_function" href="../../d5/d58/persistent__seg__tree__lazy__prop_8cpp.html#aa8dca7b867074164d5f45b0f3851269d">test</a>() {</div>
|
||||
<div class="line"><a id="l00270" name="l00270"></a><span class="lineno"> 270</span> std::vector<int64_t> arr = {-5, 2, 3, 11, -2, 7, 0, 1};</div>
|
||||
<div class="line"><a id="l00271" name="l00271"></a><span class="lineno"> 271</span> <a class="code hl_class" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html">range_queries::perSegTree</a> tree;</div>
|
||||
<div class="line"><a id="l00272" name="l00272"></a><span class="lineno"> 272</span> std::cout << <span class="stringliteral">"Elements before any updates are {"</span>;</div>
|
||||
<div class="line"><a id="l00273" name="l00273"></a><span class="lineno"> 273</span> <span class="keywordflow">for</span> (uint32_t i = 0; i < arr.size(); ++i) {</div>
|
||||
<div class="line"><a id="l00274" name="l00274"></a><span class="lineno"> 274</span> std::cout << arr[i];</div>
|
||||
<div class="line"><a id="l00275" name="l00275"></a><span class="lineno"> 275</span> <span class="keywordflow">if</span> (i != arr.size() - 1) {</div>
|
||||
<div class="line"><a id="l00276" name="l00276"></a><span class="lineno"> 276</span> std::cout << <span class="stringliteral">","</span>;</div>
|
||||
<div class="line"><a id="l00277" name="l00277"></a><span class="lineno"> 277</span> }</div>
|
||||
<div class="line"><a id="l00278" name="l00278"></a><span class="lineno"> 278</span> }</div>
|
||||
<div class="line"><a id="l00279" name="l00279"></a><span class="lineno"> 279</span> std::cout << <span class="stringliteral">"}\n"</span>;</div>
|
||||
<div class="line"><a id="l00280" name="l00280"></a><span class="lineno"> 280</span> tree.<a class="code hl_function" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#a6d3f2465a7c5803a1ff16c5378bcc5e4">construct</a>(</div>
|
||||
<div class="line"><a id="l00281" name="l00281"></a><span class="lineno"> 281</span> arr); <span class="comment">// constructing the original segment tree (version = 0)</span></div>
|
||||
<div class="line"><a id="l00282" name="l00282"></a><span class="lineno"> 282</span> std::cout << <span class="stringliteral">"Querying range sum on version 0 from index 2 to 4 = 3+11-2 = "</span></div>
|
||||
<div class="line"><a id="l00283" name="l00283"></a><span class="lineno"> 283</span> << tree.<a class="code hl_function" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#ae8ae4b1835e5e8aec32f68c5059ed4d4">query</a>(2, 4, 0) << <span class="charliteral">'\n'</span>;</div>
|
||||
<div class="line"><a id="l00284" name="l00284"></a><span class="lineno"> 284</span> std::cout</div>
|
||||
<div class="line"><a id="l00285" name="l00285"></a><span class="lineno"> 285</span> << <span class="stringliteral">"Subtract 7 from all elements from index 1 to index 5 inclusive\n"</span>;</div>
|
||||
<div class="line"><a id="l00286" name="l00286"></a><span class="lineno"> 286</span> tree.<a class="code hl_function" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#a24487eda25123bc4d112e8430821a6c6">update</a>(1, 5, -7); <span class="comment">// subtracting 7 from index 1 to index 5</span></div>
|
||||
<div class="line"><a id="l00287" name="l00287"></a><span class="lineno"> 287</span> std::cout << <span class="stringliteral">"Elements of the segment tree whose version = 1 (after 1 "</span></div>
|
||||
<div class="line"><a id="l00288" name="l00288"></a><span class="lineno"> 288</span> <span class="stringliteral">"update) are {"</span>;</div>
|
||||
<div class="line"><a id="l00289" name="l00289"></a><span class="lineno"> 289</span> <span class="keywordflow">for</span> (uint32_t i = 0; i < arr.size(); ++i) {</div>
|
||||
<div class="line"><a id="l00290" name="l00290"></a><span class="lineno"> 290</span> std::cout << tree.<a class="code hl_function" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#ae8ae4b1835e5e8aec32f68c5059ed4d4">query</a>(i, i, 1);</div>
|
||||
<div class="line"><a id="l00291" name="l00291"></a><span class="lineno"> 291</span> <span class="keywordflow">if</span> (i != arr.size() - 1) {</div>
|
||||
<div class="line"><a id="l00292" name="l00292"></a><span class="lineno"> 292</span> std::cout << <span class="stringliteral">","</span>;</div>
|
||||
<div class="line"><a id="l00293" name="l00293"></a><span class="lineno"> 293</span> }</div>
|
||||
<div class="line"><a id="l00294" name="l00294"></a><span class="lineno"> 294</span> }</div>
|
||||
<div class="line"><a id="l00295" name="l00295"></a><span class="lineno"> 295</span> std::cout << <span class="stringliteral">"}\n"</span>;</div>
|
||||
<div class="line"><a id="l00296" name="l00296"></a><span class="lineno"> 296</span> std::cout << <span class="stringliteral">"Add 10 to all elements from index 0 to index 7 inclusive\n"</span>;</div>
|
||||
<div class="line"><a id="l00297" name="l00297"></a><span class="lineno"> 297</span> tree.<a class="code hl_function" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#a24487eda25123bc4d112e8430821a6c6">update</a>(0, 7, 10); <span class="comment">// adding 10 to all elements</span></div>
|
||||
<div class="line"><a id="l00298" name="l00298"></a><span class="lineno"> 298</span> std::cout << <span class="stringliteral">"Elements of the segment tree whose version = 2 (after 2 "</span></div>
|
||||
<div class="line"><a id="l00299" name="l00299"></a><span class="lineno"> 299</span> <span class="stringliteral">"updates) are {"</span>;</div>
|
||||
<div class="line"><a id="l00300" name="l00300"></a><span class="lineno"> 300</span> <span class="keywordflow">for</span> (uint32_t i = 0; i < arr.size(); ++i) {</div>
|
||||
<div class="line"><a id="l00301" name="l00301"></a><span class="lineno"> 301</span> std::cout << tree.<a class="code hl_function" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#ae8ae4b1835e5e8aec32f68c5059ed4d4">query</a>(i, i, 2);</div>
|
||||
<div class="line"><a id="l00302" name="l00302"></a><span class="lineno"> 302</span> <span class="keywordflow">if</span> (i != arr.size() - 1) {</div>
|
||||
<div class="line"><a id="l00303" name="l00303"></a><span class="lineno"> 303</span> std::cout << <span class="stringliteral">","</span>;</div>
|
||||
<div class="line"><a id="l00304" name="l00304"></a><span class="lineno"> 304</span> }</div>
|
||||
<div class="line"><a id="l00305" name="l00305"></a><span class="lineno"> 305</span> }</div>
|
||||
<div class="line"><a id="l00306" name="l00306"></a><span class="lineno"> 306</span> std::cout << <span class="stringliteral">"}\n"</span>;</div>
|
||||
<div class="line"><a id="l00307" name="l00307"></a><span class="lineno"> 307</span> std::cout << <span class="stringliteral">"Number of segment trees (versions) now = "</span> << tree.<a class="code hl_function" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#a0fe4e431f3e09c274ecd7d2d58dcb865">size</a>()</div>
|
||||
<div class="line"><a id="l00308" name="l00308"></a><span class="lineno"> 308</span> << <span class="charliteral">'\n'</span>;</div>
|
||||
<div class="line"><a id="l00309" name="l00309"></a><span class="lineno"> 309</span> std::cout << <span class="stringliteral">"Querying range sum on version 0 from index 3 to 5 = 11-2+7 = "</span></div>
|
||||
<div class="line"><a id="l00310" name="l00310"></a><span class="lineno"> 310</span> << tree.<a class="code hl_function" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#ae8ae4b1835e5e8aec32f68c5059ed4d4">query</a>(3, 5, 0) << <span class="charliteral">'\n'</span>;</div>
|
||||
<div class="line"><a id="l00311" name="l00311"></a><span class="lineno"> 311</span> std::cout << <span class="stringliteral">"Querying range sum on version 1 from index 3 to 5 = 4-9+0 = "</span></div>
|
||||
<div class="line"><a id="l00312" name="l00312"></a><span class="lineno"> 312</span> << tree.<a class="code hl_function" href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#ae8ae4b1835e5e8aec32f68c5059ed4d4">query</a>(3, 5, 1) << <span class="charliteral">'\n'</span>;</div>
|
||||
<div class="line"><a id="l00313" name="l00313"></a><span class="lineno"> 313</span>}</div>
|
||||
</div>
|
||||
<div class="line"><a id="l00313" name="l00313"></a><span class="lineno"> 313</span></div>
|
||||
<div class="foldopen" id="foldopen00318" data-start="{" data-end="}">
|
||||
<div class="line"><a id="l00318" name="l00318"></a><span class="lineno"><a class="line" href="../../d5/d58/persistent__seg__tree__lazy__prop_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4"> 318</a></span><span class="keywordtype">int</span> <a class="code hl_function" href="../../d5/d58/persistent__seg__tree__lazy__prop_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4">main</a>() {</div>
|
||||
<div class="line"><a id="l00319" name="l00319"></a><span class="lineno"> 319</span> <a class="code hl_function" href="../../d5/d58/persistent__seg__tree__lazy__prop_8cpp.html#aa8dca7b867074164d5f45b0f3851269d">test</a>(); <span class="comment">// run self-test implementations</span></div>
|
||||
<div class="line"><a id="l00320" name="l00320"></a><span class="lineno"> 320</span> <span class="keywordflow">return</span> 0;</div>
|
||||
<div class="line"><a id="l00321" name="l00321"></a><span class="lineno"> 321</span>}</div>
|
||||
<div class="line"><a id="l00314" name="l00314"></a><span class="lineno"> 314</span></div>
|
||||
<div class="foldopen" id="foldopen00319" data-start="{" data-end="}">
|
||||
<div class="line"><a id="l00319" name="l00319"></a><span class="lineno"><a class="line" href="../../d5/d58/persistent__seg__tree__lazy__prop_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4"> 319</a></span><span class="keywordtype">int</span> <a class="code hl_function" href="../../d5/d58/persistent__seg__tree__lazy__prop_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4">main</a>() {</div>
|
||||
<div class="line"><a id="l00320" name="l00320"></a><span class="lineno"> 320</span> <a class="code hl_function" href="../../d5/d58/persistent__seg__tree__lazy__prop_8cpp.html#aa8dca7b867074164d5f45b0f3851269d">test</a>(); <span class="comment">// run self-test implementations</span></div>
|
||||
<div class="line"><a id="l00321" name="l00321"></a><span class="lineno"> 321</span> <span class="keywordflow">return</span> 0;</div>
|
||||
<div class="line"><a id="l00322" name="l00322"></a><span class="lineno"> 322</span>}</div>
|
||||
</div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1per_seg_tree_1_1_node_html"><div class="ttname"><a href="../../d5/d66/classrange__queries_1_1per_seg_tree_1_1_node.html">range_queries::perSegTree::Node</a></div><div class="ttdef"><b>Definition</b> <a href="#l00041">persistent_seg_tree_lazy_prop.cpp:41</a></div></div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1per_seg_tree_1_1_node_html_a9adb4639a0797e94a3e556b6b902c088"><div class="ttname"><a href="../../d5/d66/classrange__queries_1_1per_seg_tree_1_1_node.html#a9adb4639a0797e94a3e556b6b902c088">range_queries::perSegTree::Node::right</a></div><div class="ttdeci">std::shared_ptr< Node > right</div><div class="ttdoc">pointer to the left node</div><div class="ttdef"><b>Definition</b> <a href="#l00044">persistent_seg_tree_lazy_prop.cpp:44</a></div></div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1per_seg_tree_1_1_node_html_acc044f787c90b815773726d7fdfdaccf"><div class="ttname"><a href="../../d5/d66/classrange__queries_1_1per_seg_tree_1_1_node.html#acc044f787c90b815773726d7fdfdaccf">range_queries::perSegTree::Node::val</a></div><div class="ttdeci">int64_t val</div><div class="ttdoc">pointer to the right node</div><div class="ttdef"><b>Definition</b> <a href="#l00045">persistent_seg_tree_lazy_prop.cpp:45</a></div></div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1per_seg_tree_html"><div class="ttname"><a href="../../d8/d28/classrange__queries_1_1per_seg_tree.html">range_queries::perSegTree</a></div><div class="ttdoc">Range query here is range sum, but the code can be modified to make different queries like range max ...</div><div class="ttdef"><b>Definition</b> <a href="#l00039">persistent_seg_tree_lazy_prop.cpp:39</a></div></div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1per_seg_tree_html_a0cec4b77d264521717cf9b0482c45817"><div class="ttname"><a href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#a0cec4b77d264521717cf9b0482c45817">range_queries::perSegTree::newKid</a></div><div class="ttdeci">std::shared_ptr< Node > newKid(std::shared_ptr< Node > const &curr)</div><div class="ttdoc">Creating a new node with the same values of curr node.</div><div class="ttdef"><b>Definition</b> <a href="#l00065">persistent_seg_tree_lazy_prop.cpp:65</a></div></div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1per_seg_tree_html_a0fe4e431f3e09c274ecd7d2d58dcb865"><div class="ttname"><a href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#a0fe4e431f3e09c274ecd7d2d58dcb865">range_queries::perSegTree::size</a></div><div class="ttdeci">uint32_t size()</div><div class="ttdoc">Getting the number of versions after updates so far which is equal to the size of the pointers vector...</div><div class="ttdef"><b>Definition</b> <a href="#l00255">persistent_seg_tree_lazy_prop.cpp:255</a></div></div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1per_seg_tree_html_a1eac9cf0613dfc8e2b0195009dd5c9d5"><div class="ttname"><a href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#a1eac9cf0613dfc8e2b0195009dd5c9d5">range_queries::perSegTree::ptrs</a></div><div class="ttdeci">std::vector< std::shared_ptr< Node > > ptrs</div><div class="ttdoc">number of elements/leaf nodes in the segment tree</div><div class="ttdef"><b>Definition</b> <a href="#l00054">persistent_seg_tree_lazy_prop.cpp:54</a></div></div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1per_seg_tree_html_a24487eda25123bc4d112e8430821a6c6"><div class="ttname"><a href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#a24487eda25123bc4d112e8430821a6c6">range_queries::perSegTree::update</a></div><div class="ttdeci">std::shared_ptr< Node > update(const uint32_t &i, const uint32_t &j, const uint32_t &l, const uint32_t &r, const int64_t &value, std::shared_ptr< Node > const &curr)</div><div class="ttdoc">Doing range update, checking at every node if it has some value to be propagated. All nodes affected ...</div><div class="ttdef"><b>Definition</b> <a href="#l00135">persistent_seg_tree_lazy_prop.cpp:135</a></div></div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1per_seg_tree_html_a6d3f2465a7c5803a1ff16c5378bcc5e4"><div class="ttname"><a href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#a6d3f2465a7c5803a1ff16c5378bcc5e4">range_queries::perSegTree::construct</a></div><div class="ttdeci">std::shared_ptr< Node > construct(const uint32_t &i, const uint32_t &j)</div><div class="ttdoc">Constructing the segment tree with the early passed vector. Every call creates a node to hold the sum...</div><div class="ttdef"><b>Definition</b> <a href="#l00106">persistent_seg_tree_lazy_prop.cpp:106</a></div></div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1per_seg_tree_html_a8ff495d2f389b4aaa54449c26c6078f3"><div class="ttname"><a href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#a8ff495d2f389b4aaa54449c26c6078f3">range_queries::perSegTree::vec</a></div><div class="ttdeci">std::vector< int64_t > vec</div><div class="ttdef"><b>Definition</b> <a href="#l00057">persistent_seg_tree_lazy_prop.cpp:57</a></div></div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1per_seg_tree_html_ac83bcabf5a8db8b0d8d156a4c1bcd4c3"><div class="ttname"><a href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#ac83bcabf5a8db8b0d8d156a4c1bcd4c3">range_queries::perSegTree::construct</a></div><div class="ttdeci">void construct(const std::vector< int64_t > &vec)</div><div class="ttdoc">Constructing the segment tree with the values in the passed vector. Returned root pointer is pushed i...</div><div class="ttdef"><b>Definition</b> <a href="#l00197">persistent_seg_tree_lazy_prop.cpp:197</a></div></div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1per_seg_tree_html_ace7f57935b3bb9446f11c239fd89ae79"><div class="ttname"><a href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#ace7f57935b3bb9446f11c239fd89ae79">range_queries::perSegTree::lazy</a></div><div class="ttdeci">void lazy(const uint32_t &i, const uint32_t &j, std::shared_ptr< Node > const &curr)</div><div class="ttdoc">If there is some value to be propagated to the passed node, value is added to the node and the childr...</div><div class="ttdef"><b>Definition</b> <a href="#l00083">persistent_seg_tree_lazy_prop.cpp:83</a></div></div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1per_seg_tree_html_ad484002bcb701820d55f32ea5d525571"><div class="ttname"><a href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#ad484002bcb701820d55f32ea5d525571">range_queries::perSegTree::query</a></div><div class="ttdeci">int64_t query(const uint32_t &l, const uint32_t &r, const uint32_t &version)</div><div class="ttdoc">Querying the range from index l to index r, getting the sum of the elements whose index x satisfies l...</div><div class="ttdef"><b>Definition</b> <a href="#l00241">persistent_seg_tree_lazy_prop.cpp:241</a></div></div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1per_seg_tree_html_ae8ae4b1835e5e8aec32f68c5059ed4d4"><div class="ttname"><a href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#ae8ae4b1835e5e8aec32f68c5059ed4d4">range_queries::perSegTree::query</a></div><div class="ttdeci">int64_t query(const uint32_t &i, const uint32_t &j, const uint32_t &l, const uint32_t &r, std::shared_ptr< Node > const &curr)</div><div class="ttdoc">Querying the range from index l to index r, checking at every node if it has some value to be propaga...</div><div class="ttdef"><b>Definition</b> <a href="#l00171">persistent_seg_tree_lazy_prop.cpp:171</a></div></div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1per_seg_tree_html_af87494e6cf012d28c4f5b9d1c15f9c5d"><div class="ttname"><a href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#af87494e6cf012d28c4f5b9d1c15f9c5d">range_queries::perSegTree::update</a></div><div class="ttdeci">void update(const uint32_t &l, const uint32_t &r, const int64_t &value)</div><div class="ttdoc">Doing range update by passing the left and right indexes of the range as well as the value to be adde...</div><div class="ttdef"><b>Definition</b> <a href="#l00219">persistent_seg_tree_lazy_prop.cpp:219</a></div></div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1per_seg_tree_1_1_node_html"><div class="ttname"><a href="../../d5/d66/classrange__queries_1_1per_seg_tree_1_1_node.html">range_queries::perSegTree::Node</a></div><div class="ttdef"><b>Definition</b> <a href="#l00042">persistent_seg_tree_lazy_prop.cpp:42</a></div></div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1per_seg_tree_1_1_node_html_a9adb4639a0797e94a3e556b6b902c088"><div class="ttname"><a href="../../d5/d66/classrange__queries_1_1per_seg_tree_1_1_node.html#a9adb4639a0797e94a3e556b6b902c088">range_queries::perSegTree::Node::right</a></div><div class="ttdeci">std::shared_ptr< Node > right</div><div class="ttdoc">pointer to the left node</div><div class="ttdef"><b>Definition</b> <a href="#l00045">persistent_seg_tree_lazy_prop.cpp:45</a></div></div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1per_seg_tree_1_1_node_html_acc044f787c90b815773726d7fdfdaccf"><div class="ttname"><a href="../../d5/d66/classrange__queries_1_1per_seg_tree_1_1_node.html#acc044f787c90b815773726d7fdfdaccf">range_queries::perSegTree::Node::val</a></div><div class="ttdeci">int64_t val</div><div class="ttdoc">pointer to the right node</div><div class="ttdef"><b>Definition</b> <a href="#l00046">persistent_seg_tree_lazy_prop.cpp:46</a></div></div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1per_seg_tree_html"><div class="ttname"><a href="../../d8/d28/classrange__queries_1_1per_seg_tree.html">range_queries::perSegTree</a></div><div class="ttdoc">Range query here is range sum, but the code can be modified to make different queries like range max ...</div><div class="ttdef"><b>Definition</b> <a href="#l00040">persistent_seg_tree_lazy_prop.cpp:40</a></div></div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1per_seg_tree_html_a0cec4b77d264521717cf9b0482c45817"><div class="ttname"><a href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#a0cec4b77d264521717cf9b0482c45817">range_queries::perSegTree::newKid</a></div><div class="ttdeci">std::shared_ptr< Node > newKid(std::shared_ptr< Node > const &curr)</div><div class="ttdoc">Creating a new node with the same values of curr node.</div><div class="ttdef"><b>Definition</b> <a href="#l00066">persistent_seg_tree_lazy_prop.cpp:66</a></div></div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1per_seg_tree_html_a0fe4e431f3e09c274ecd7d2d58dcb865"><div class="ttname"><a href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#a0fe4e431f3e09c274ecd7d2d58dcb865">range_queries::perSegTree::size</a></div><div class="ttdeci">uint32_t size()</div><div class="ttdoc">Getting the number of versions after updates so far which is equal to the size of the pointers vector...</div><div class="ttdef"><b>Definition</b> <a href="#l00256">persistent_seg_tree_lazy_prop.cpp:256</a></div></div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1per_seg_tree_html_a1eac9cf0613dfc8e2b0195009dd5c9d5"><div class="ttname"><a href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#a1eac9cf0613dfc8e2b0195009dd5c9d5">range_queries::perSegTree::ptrs</a></div><div class="ttdeci">std::vector< std::shared_ptr< Node > > ptrs</div><div class="ttdoc">number of elements/leaf nodes in the segment tree</div><div class="ttdef"><b>Definition</b> <a href="#l00055">persistent_seg_tree_lazy_prop.cpp:55</a></div></div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1per_seg_tree_html_a24487eda25123bc4d112e8430821a6c6"><div class="ttname"><a href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#a24487eda25123bc4d112e8430821a6c6">range_queries::perSegTree::update</a></div><div class="ttdeci">std::shared_ptr< Node > update(const uint32_t &i, const uint32_t &j, const uint32_t &l, const uint32_t &r, const int64_t &value, std::shared_ptr< Node > const &curr)</div><div class="ttdoc">Doing range update, checking at every node if it has some value to be propagated. All nodes affected ...</div><div class="ttdef"><b>Definition</b> <a href="#l00136">persistent_seg_tree_lazy_prop.cpp:136</a></div></div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1per_seg_tree_html_a6d3f2465a7c5803a1ff16c5378bcc5e4"><div class="ttname"><a href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#a6d3f2465a7c5803a1ff16c5378bcc5e4">range_queries::perSegTree::construct</a></div><div class="ttdeci">std::shared_ptr< Node > construct(const uint32_t &i, const uint32_t &j)</div><div class="ttdoc">Constructing the segment tree with the early passed vector. Every call creates a node to hold the sum...</div><div class="ttdef"><b>Definition</b> <a href="#l00107">persistent_seg_tree_lazy_prop.cpp:107</a></div></div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1per_seg_tree_html_a8ff495d2f389b4aaa54449c26c6078f3"><div class="ttname"><a href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#a8ff495d2f389b4aaa54449c26c6078f3">range_queries::perSegTree::vec</a></div><div class="ttdeci">std::vector< int64_t > vec</div><div class="ttdef"><b>Definition</b> <a href="#l00058">persistent_seg_tree_lazy_prop.cpp:58</a></div></div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1per_seg_tree_html_ac83bcabf5a8db8b0d8d156a4c1bcd4c3"><div class="ttname"><a href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#ac83bcabf5a8db8b0d8d156a4c1bcd4c3">range_queries::perSegTree::construct</a></div><div class="ttdeci">void construct(const std::vector< int64_t > &vec)</div><div class="ttdoc">Constructing the segment tree with the values in the passed vector. Returned root pointer is pushed i...</div><div class="ttdef"><b>Definition</b> <a href="#l00198">persistent_seg_tree_lazy_prop.cpp:198</a></div></div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1per_seg_tree_html_ace7f57935b3bb9446f11c239fd89ae79"><div class="ttname"><a href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#ace7f57935b3bb9446f11c239fd89ae79">range_queries::perSegTree::lazy</a></div><div class="ttdeci">void lazy(const uint32_t &i, const uint32_t &j, std::shared_ptr< Node > const &curr)</div><div class="ttdoc">If there is some value to be propagated to the passed node, value is added to the node and the childr...</div><div class="ttdef"><b>Definition</b> <a href="#l00084">persistent_seg_tree_lazy_prop.cpp:84</a></div></div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1per_seg_tree_html_ad484002bcb701820d55f32ea5d525571"><div class="ttname"><a href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#ad484002bcb701820d55f32ea5d525571">range_queries::perSegTree::query</a></div><div class="ttdeci">int64_t query(const uint32_t &l, const uint32_t &r, const uint32_t &version)</div><div class="ttdoc">Querying the range from index l to index r, getting the sum of the elements whose index x satisfies l...</div><div class="ttdef"><b>Definition</b> <a href="#l00242">persistent_seg_tree_lazy_prop.cpp:242</a></div></div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1per_seg_tree_html_ae8ae4b1835e5e8aec32f68c5059ed4d4"><div class="ttname"><a href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#ae8ae4b1835e5e8aec32f68c5059ed4d4">range_queries::perSegTree::query</a></div><div class="ttdeci">int64_t query(const uint32_t &i, const uint32_t &j, const uint32_t &l, const uint32_t &r, std::shared_ptr< Node > const &curr)</div><div class="ttdoc">Querying the range from index l to index r, checking at every node if it has some value to be propaga...</div><div class="ttdef"><b>Definition</b> <a href="#l00172">persistent_seg_tree_lazy_prop.cpp:172</a></div></div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1per_seg_tree_html_af87494e6cf012d28c4f5b9d1c15f9c5d"><div class="ttname"><a href="../../d8/d28/classrange__queries_1_1per_seg_tree.html#af87494e6cf012d28c4f5b9d1c15f9c5d">range_queries::perSegTree::update</a></div><div class="ttdeci">void update(const uint32_t &l, const uint32_t &r, const int64_t &value)</div><div class="ttdoc">Doing range update by passing the left and right indexes of the range as well as the value to be adde...</div><div class="ttdef"><b>Definition</b> <a href="#l00220">persistent_seg_tree_lazy_prop.cpp:220</a></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="apersistent__seg__tree__lazy__prop_8cpp_html_aa8dca7b867074164d5f45b0f3851269d"><div class="ttname"><a href="../../d5/d58/persistent__seg__tree__lazy__prop_8cpp.html#aa8dca7b867074164d5f45b0f3851269d">test</a></div><div class="ttdeci">static void test()</div><div class="ttdoc">Test implementations.</div><div class="ttdef"><b>Definition</b> <a href="#l00268">persistent_seg_tree_lazy_prop.cpp:268</a></div></div>
|
||||
<div class="ttc" id="apersistent__seg__tree__lazy__prop_8cpp_html_ae66f6b31b5ad750f1fe042a706a4e3d4"><div class="ttname"><a href="../../d5/d58/persistent__seg__tree__lazy__prop_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4">main</a></div><div class="ttdeci">int main()</div><div class="ttdoc">Main function.</div><div class="ttdef"><b>Definition</b> <a href="#l00318">persistent_seg_tree_lazy_prop.cpp:318</a></div></div>
|
||||
<div class="ttc" id="apersistent__seg__tree__lazy__prop_8cpp_html_aa8dca7b867074164d5f45b0f3851269d"><div class="ttname"><a href="../../d5/d58/persistent__seg__tree__lazy__prop_8cpp.html#aa8dca7b867074164d5f45b0f3851269d">test</a></div><div class="ttdeci">static void test()</div><div class="ttdoc">Test implementations.</div><div class="ttdef"><b>Definition</b> <a href="#l00269">persistent_seg_tree_lazy_prop.cpp:269</a></div></div>
|
||||
<div class="ttc" id="apersistent__seg__tree__lazy__prop_8cpp_html_ae66f6b31b5ad750f1fe042a706a4e3d4"><div class="ttname"><a href="../../d5/d58/persistent__seg__tree__lazy__prop_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4">main</a></div><div class="ttdeci">int main()</div><div class="ttdoc">Main function.</div><div class="ttdef"><b>Definition</b> <a href="#l00319">persistent_seg_tree_lazy_prop.cpp:319</a></div></div>
|
||||
</div><!-- fragment --></div><!-- contents -->
|
||||
</div><!-- doc-content -->
|
||||
</div><!-- container -->
|
||||
|
||||
@@ -133,7 +133,7 @@ Public Attributes</h2></td></tr>
|
||||
</table>
|
||||
<a name="details" id="details"></a><h2 id="header-details" class="groupheader">Detailed Description</h2>
|
||||
<div class="textblock">
|
||||
<p class="definition">Definition at line <a class="el" href="../../d5/d58/persistent__seg__tree__lazy__prop_8cpp_source.html#l00041">41</a> of file <a class="el" href="../../d5/d58/persistent__seg__tree__lazy__prop_8cpp_source.html">persistent_seg_tree_lazy_prop.cpp</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="../../d5/d58/persistent__seg__tree__lazy__prop_8cpp_source.html#l00042">42</a> of file <a class="el" href="../../d5/d58/persistent__seg__tree__lazy__prop_8cpp_source.html">persistent_seg_tree_lazy_prop.cpp</a>.</p>
|
||||
</div><a name="doc-variable-members" id="doc-variable-members"></a><h2 id="header-doc-variable-members" class="groupheader">Member Data Documentation</h2>
|
||||
<a id="ab3e7bf5a91911c17907b30b250108013" name="ab3e7bf5a91911c17907b30b250108013"></a>
|
||||
<h2 class="memtitle"><span class="permalink"><a href="#ab3e7bf5a91911c17907b30b250108013">◆ </a></span>left</h2>
|
||||
@@ -147,7 +147,7 @@ Public Attributes</h2></td></tr>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d5/d58/persistent__seg__tree__lazy__prop_8cpp_source.html#l00043">43</a> of file <a class="el" href="../../d5/d58/persistent__seg__tree__lazy__prop_8cpp_source.html">persistent_seg_tree_lazy_prop.cpp</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="../../d5/d58/persistent__seg__tree__lazy__prop_8cpp_source.html#l00044">44</a> of file <a class="el" href="../../d5/d58/persistent__seg__tree__lazy__prop_8cpp_source.html">persistent_seg_tree_lazy_prop.cpp</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@@ -163,7 +163,7 @@ Public Attributes</h2></td></tr>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d5/d58/persistent__seg__tree__lazy__prop_8cpp_source.html#l00046">46</a> of file <a class="el" href="../../d5/d58/persistent__seg__tree__lazy__prop_8cpp_source.html">persistent_seg_tree_lazy_prop.cpp</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="../../d5/d58/persistent__seg__tree__lazy__prop_8cpp_source.html#l00047">47</a> of file <a class="el" href="../../d5/d58/persistent__seg__tree__lazy__prop_8cpp_source.html">persistent_seg_tree_lazy_prop.cpp</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@@ -181,7 +181,7 @@ Public Attributes</h2></td></tr>
|
||||
|
||||
<p>pointer to the left node </p>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d5/d58/persistent__seg__tree__lazy__prop_8cpp_source.html#l00044">44</a> of file <a class="el" href="../../d5/d58/persistent__seg__tree__lazy__prop_8cpp_source.html">persistent_seg_tree_lazy_prop.cpp</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="../../d5/d58/persistent__seg__tree__lazy__prop_8cpp_source.html#l00045">45</a> of file <a class="el" href="../../d5/d58/persistent__seg__tree__lazy__prop_8cpp_source.html">persistent_seg_tree_lazy_prop.cpp</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@@ -199,7 +199,7 @@ Public Attributes</h2></td></tr>
|
||||
|
||||
<p>pointer to the right node </p>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d5/d58/persistent__seg__tree__lazy__prop_8cpp_source.html#l00045">45</a> of file <a class="el" href="../../d5/d58/persistent__seg__tree__lazy__prop_8cpp_source.html">persistent_seg_tree_lazy_prop.cpp</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="../../d5/d58/persistent__seg__tree__lazy__prop_8cpp_source.html#l00046">46</a> of file <a class="el" href="../../d5/d58/persistent__seg__tree__lazy__prop_8cpp_source.html">persistent_seg_tree_lazy_prop.cpp</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -234,9 +234,9 @@ Functions</h2></td></tr>
|
||||
<div class="line"><span class="lineno"> 89</span> assert(test_5 == 1110);</div>
|
||||
<div class="line"><span class="lineno"> 90</span> std::cout << <span class="stringliteral">"Passed Test 5!"</span> << std::endl;</div>
|
||||
<div class="line"><span class="lineno"> 91</span>}</div>
|
||||
<div class="ttc" id="aheavy__light__decomposition_8cpp_html_a34b8683a2b429de5cce57e6d733ec817"><div class="ttname"><a href="../../d2/de9/heavy__light__decomposition_8cpp.html#a34b8683a2b429de5cce57e6d733ec817">test_1</a></div><div class="ttdeci">static void test_1()</div><div class="ttdef"><b>Definition</b> <a href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00505">heavy_light_decomposition.cpp:505</a></div></div>
|
||||
<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="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00549">heavy_light_decomposition.cpp:549</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="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00592">heavy_light_decomposition.cpp:592</a></div></div>
|
||||
<div class="ttc" id="aheavy__light__decomposition_8cpp_html_a34b8683a2b429de5cce57e6d733ec817"><div class="ttname"><a href="../../d2/de9/heavy__light__decomposition_8cpp.html#a34b8683a2b429de5cce57e6d733ec817">test_1</a></div><div class="ttdeci">static void test_1()</div><div class="ttdef"><b>Definition</b> <a href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00511">heavy_light_decomposition.cpp:511</a></div></div>
|
||||
<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="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00555">heavy_light_decomposition.cpp:555</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="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00599">heavy_light_decomposition.cpp:599</a></div></div>
|
||||
<div class="ttc" id="anamespacemath_html_a04065193d190d605e1f0d0d93a87e244"><div class="ttname"><a href="../../dd/d47/namespacemath.html#a04065193d190d605e1f0d0d93a87e244">math::lcmSum</a></div><div class="ttdeci">uint64_t lcmSum(const uint16_t &num)</div><div class="ttdef"><b>Definition</b> <a href="../../d5/d83/lcm__sum_8cpp_source.html#l00030">lcm_sum.cpp:30</a></div></div>
|
||||
</div><!-- fragment -->
|
||||
</div>
|
||||
|
||||
@@ -192,9 +192,9 @@ $(function(){initNavTree('d5/d83/lcm__sum_8cpp_source.html','../../',''); });
|
||||
<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span> <span class="keywordflow">return</span> 0;</div>
|
||||
<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span>}</div>
|
||||
</div>
|
||||
<div class="ttc" id="aheavy__light__decomposition_8cpp_html_a34b8683a2b429de5cce57e6d733ec817"><div class="ttname"><a href="../../d2/de9/heavy__light__decomposition_8cpp.html#a34b8683a2b429de5cce57e6d733ec817">test_1</a></div><div class="ttdeci">static void test_1()</div><div class="ttdef"><b>Definition</b> <a href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00505">heavy_light_decomposition.cpp:505</a></div></div>
|
||||
<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="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00549">heavy_light_decomposition.cpp:549</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="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00592">heavy_light_decomposition.cpp:592</a></div></div>
|
||||
<div class="ttc" id="aheavy__light__decomposition_8cpp_html_a34b8683a2b429de5cce57e6d733ec817"><div class="ttname"><a href="../../d2/de9/heavy__light__decomposition_8cpp.html#a34b8683a2b429de5cce57e6d733ec817">test_1</a></div><div class="ttdeci">static void test_1()</div><div class="ttdef"><b>Definition</b> <a href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00511">heavy_light_decomposition.cpp:511</a></div></div>
|
||||
<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="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00555">heavy_light_decomposition.cpp:555</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="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00599">heavy_light_decomposition.cpp:599</a></div></div>
|
||||
<div class="ttc" id="alcm__sum_8cpp_html_aa8dca7b867074164d5f45b0f3851269d"><div class="ttname"><a href="../../d5/d83/lcm__sum_8cpp.html#aa8dca7b867074164d5f45b0f3851269d">test</a></div><div class="ttdeci">static void test()</div><div class="ttdef"><b>Definition</b> <a href="#l00066">lcm_sum.cpp:66</a></div></div>
|
||||
<div class="ttc" id="alcm__sum_8cpp_html_ae66f6b31b5ad750f1fe042a706a4e3d4"><div class="ttname"><a href="../../d5/d83/lcm__sum_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4">main</a></div><div class="ttdeci">int main()</div><div class="ttdoc">Main function.</div><div class="ttdef"><b>Definition</b> <a href="#l00097">lcm_sum.cpp:97</a></div></div>
|
||||
<div class="ttc" id="anamespacemath_html"><div class="ttname"><a href="../../dd/d47/namespacemath.html">math</a></div><div class="ttdoc">for assert</div></div>
|
||||
|
||||
@@ -121,13 +121,14 @@ $(function(){initNavTree('d7/d83/trie__tree_8cpp.html','../../',''); });
|
||||
<a href="#details">More...</a></p>
|
||||
<div class="textblock"><code>#include <array></code><br />
|
||||
<code>#include <cassert></code><br />
|
||||
<code>#include <cstdint></code><br />
|
||||
<code>#include <iostream></code><br />
|
||||
<code>#include <memory></code><br />
|
||||
<code>#include <string></code><br />
|
||||
</div><div class="textblock"><div class="dynheader">
|
||||
Include dependency graph for trie_tree.cpp:</div>
|
||||
<div class="dyncontent">
|
||||
<div class="center"><iframe scrolling="no" loading="lazy" frameborder="0" src="../../de/d99/trie__tree_8cpp__incl.svg" width="415" height="126"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe></div>
|
||||
<div class="center"><iframe scrolling="no" loading="lazy" frameborder="0" src="../../de/d99/trie__tree_8cpp__incl.svg" width="499" height="126"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe></div>
|
||||
</div>
|
||||
</div>
|
||||
<p><a href="../../d7/d83/trie__tree_8cpp_source.html">Go to the source code of this file.</a></p>
|
||||
@@ -177,13 +178,13 @@ Functions</h2></td></tr>
|
||||
<p>Main function. </p>
|
||||
<dl class="section return"><dt>Returns</dt><dd>0 on exit </dd></dl>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d7/d83/trie__tree_8cpp_source.html#l00204">204</a> of file <a class="el" href="../../d7/d83/trie__tree_8cpp_source.html">trie_tree.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 204</span> {</div>
|
||||
<div class="line"><span class="lineno"> 205</span> <a class="code hl_function" href="#aa8dca7b867074164d5f45b0f3851269d">test</a>();</div>
|
||||
<div class="line"><span class="lineno"> 206</span> </div>
|
||||
<div class="line"><span class="lineno"> 207</span> <span class="keywordflow">return</span> 0;</div>
|
||||
<div class="line"><span class="lineno"> 208</span>}</div>
|
||||
<div class="ttc" id="atrie__tree_8cpp_html_aa8dca7b867074164d5f45b0f3851269d"><div class="ttname"><a href="#aa8dca7b867074164d5f45b0f3851269d">test</a></div><div class="ttdeci">static void test()</div><div class="ttdoc">Testing function.</div><div class="ttdef"><b>Definition</b> <a href="../../d7/d83/trie__tree_8cpp_source.html#l00177">trie_tree.cpp:177</a></div></div>
|
||||
<p class="definition">Definition at line <a class="el" href="../../d7/d83/trie__tree_8cpp_source.html#l00205">205</a> of file <a class="el" href="../../d7/d83/trie__tree_8cpp_source.html">trie_tree.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 205</span> {</div>
|
||||
<div class="line"><span class="lineno"> 206</span> <a class="code hl_function" href="#aa8dca7b867074164d5f45b0f3851269d">test</a>();</div>
|
||||
<div class="line"><span class="lineno"> 207</span> </div>
|
||||
<div class="line"><span class="lineno"> 208</span> <span class="keywordflow">return</span> 0;</div>
|
||||
<div class="line"><span class="lineno"> 209</span>}</div>
|
||||
<div class="ttc" id="atrie__tree_8cpp_html_aa8dca7b867074164d5f45b0f3851269d"><div class="ttname"><a href="#aa8dca7b867074164d5f45b0f3851269d">test</a></div><div class="ttdeci">static void test()</div><div class="ttdoc">Testing function.</div><div class="ttdef"><b>Definition</b> <a href="../../d7/d83/trie__tree_8cpp_source.html#l00178">trie_tree.cpp:178</a></div></div>
|
||||
</div><!-- fragment -->
|
||||
</div>
|
||||
</div>
|
||||
@@ -213,31 +214,31 @@ Functions</h2></td></tr>
|
||||
<p>Testing function. </p>
|
||||
<dl class="section return"><dt>Returns</dt><dd>void </dd></dl>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d7/d83/trie__tree_8cpp_source.html#l00177">177</a> of file <a class="el" href="../../d7/d83/trie__tree_8cpp_source.html">trie_tree.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 177</span> {</div>
|
||||
<div class="line"><span class="lineno"> 178</span> <a class="code hl_class" href="../../d0/d3e/classdata__structures_1_1trie.html">data_structures::trie</a> root;</div>
|
||||
<div class="line"><span class="lineno"> 179</span> root.<a class="code hl_function" href="../../d0/d3e/classdata__structures_1_1trie.html#a0ab94bc6417e3f59fab33cea5b64d546">insert</a>(<span class="stringliteral">"Hello"</span>);</div>
|
||||
<div class="line"><span class="lineno"> 180</span> root.insert(<span class="stringliteral">"World"</span>);</div>
|
||||
<div class="line"><span class="lineno"> 181</span> </div>
|
||||
<div class="line"><span class="lineno"> 182</span> assert(!root.search(<span class="stringliteral">"hello"</span>, 0));</div>
|
||||
<div class="line"><span class="lineno"> 183</span> std::cout << <span class="stringliteral">"hello - "</span> << root.search(<span class="stringliteral">"hello"</span>, 0) << <span class="stringliteral">"\n"</span>;</div>
|
||||
<div class="line"><span class="lineno"> 184</span> </div>
|
||||
<div class="line"><span class="lineno"> 185</span> assert(root.search(<span class="stringliteral">"Hello"</span>, 0));</div>
|
||||
<div class="line"><span class="lineno"> 186</span> std::cout << <span class="stringliteral">"Hello - "</span> << root.search(<span class="stringliteral">"Hello"</span>, 0) << <span class="stringliteral">"\n"</span>;</div>
|
||||
<div class="line"><span class="lineno"> 187</span> </div>
|
||||
<div class="line"><span class="lineno"> 188</span> assert(!root.search(<span class="stringliteral">"Word"</span>, 0));</div>
|
||||
<div class="line"><span class="lineno"> 189</span> std::cout << <span class="stringliteral">"Word - "</span> << root.search(<span class="stringliteral">"Word"</span>, 0) << <span class="stringliteral">"\n"</span>;</div>
|
||||
<div class="line"><span class="lineno"> 190</span> </div>
|
||||
<div class="line"><span class="lineno"> 191</span> assert(root.search(<span class="stringliteral">"World"</span>, 0));</div>
|
||||
<div class="line"><span class="lineno"> 192</span> std::cout << <span class="stringliteral">"World - "</span> << root.search(<span class="stringliteral">"World"</span>, 0) << <span class="stringliteral">"\n"</span>;</div>
|
||||
<div class="line"><span class="lineno"> 193</span> </div>
|
||||
<div class="line"><span class="lineno"> 194</span> <span class="comment">// Following lines of code give erroneous output</span></div>
|
||||
<div class="line"><span class="lineno"> 195</span> <span class="comment">// root.deleteString("hello", 0);</span></div>
|
||||
<div class="line"><span class="lineno"> 196</span> <span class="comment">// assert(!root.search("hello", 0));</span></div>
|
||||
<div class="line"><span class="lineno"> 197</span> <span class="comment">// std::cout << "hello - " << root.search("world", 0) << "\n";</span></div>
|
||||
<div class="line"><span class="lineno"> 198</span>}</div>
|
||||
<div class="ttc" id="aclassdata__structures_1_1trie_html"><div class="ttname"><a href="../../d0/d3e/classdata__structures_1_1trie.html">data_structures::trie</a></div><div class="ttdoc">Trie implementation for small-case English alphabets a-z</div><div class="ttdef"><b>Definition</b> <a href="../../d7/d83/trie__tree_8cpp_source.html#l00024">trie_tree.cpp:24</a></div></div>
|
||||
<div class="ttc" id="aclassdata__structures_1_1trie_html_a0ab94bc6417e3f59fab33cea5b64d546"><div class="ttname"><a href="../../d0/d3e/classdata__structures_1_1trie.html#a0ab94bc6417e3f59fab33cea5b64d546">data_structures::trie::insert</a></div><div class="ttdeci">void insert(const std::string &str)</div><div class="ttdef"><b>Definition</b> <a href="../../d7/d83/trie__tree_8cpp_source.html#l00076">trie_tree.cpp:76</a></div></div>
|
||||
<p class="definition">Definition at line <a class="el" href="../../d7/d83/trie__tree_8cpp_source.html#l00178">178</a> of file <a class="el" href="../../d7/d83/trie__tree_8cpp_source.html">trie_tree.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 178</span> {</div>
|
||||
<div class="line"><span class="lineno"> 179</span> <a class="code hl_class" href="../../d0/d3e/classdata__structures_1_1trie.html">data_structures::trie</a> root;</div>
|
||||
<div class="line"><span class="lineno"> 180</span> root.<a class="code hl_function" href="../../d0/d3e/classdata__structures_1_1trie.html#a0ab94bc6417e3f59fab33cea5b64d546">insert</a>(<span class="stringliteral">"Hello"</span>);</div>
|
||||
<div class="line"><span class="lineno"> 181</span> root.insert(<span class="stringliteral">"World"</span>);</div>
|
||||
<div class="line"><span class="lineno"> 182</span> </div>
|
||||
<div class="line"><span class="lineno"> 183</span> assert(!root.search(<span class="stringliteral">"hello"</span>, 0));</div>
|
||||
<div class="line"><span class="lineno"> 184</span> std::cout << <span class="stringliteral">"hello - "</span> << root.search(<span class="stringliteral">"hello"</span>, 0) << <span class="stringliteral">"\n"</span>;</div>
|
||||
<div class="line"><span class="lineno"> 185</span> </div>
|
||||
<div class="line"><span class="lineno"> 186</span> assert(root.search(<span class="stringliteral">"Hello"</span>, 0));</div>
|
||||
<div class="line"><span class="lineno"> 187</span> std::cout << <span class="stringliteral">"Hello - "</span> << root.search(<span class="stringliteral">"Hello"</span>, 0) << <span class="stringliteral">"\n"</span>;</div>
|
||||
<div class="line"><span class="lineno"> 188</span> </div>
|
||||
<div class="line"><span class="lineno"> 189</span> assert(!root.search(<span class="stringliteral">"Word"</span>, 0));</div>
|
||||
<div class="line"><span class="lineno"> 190</span> std::cout << <span class="stringliteral">"Word - "</span> << root.search(<span class="stringliteral">"Word"</span>, 0) << <span class="stringliteral">"\n"</span>;</div>
|
||||
<div class="line"><span class="lineno"> 191</span> </div>
|
||||
<div class="line"><span class="lineno"> 192</span> assert(root.search(<span class="stringliteral">"World"</span>, 0));</div>
|
||||
<div class="line"><span class="lineno"> 193</span> std::cout << <span class="stringliteral">"World - "</span> << root.search(<span class="stringliteral">"World"</span>, 0) << <span class="stringliteral">"\n"</span>;</div>
|
||||
<div class="line"><span class="lineno"> 194</span> </div>
|
||||
<div class="line"><span class="lineno"> 195</span> <span class="comment">// Following lines of code give erroneous output</span></div>
|
||||
<div class="line"><span class="lineno"> 196</span> <span class="comment">// root.deleteString("hello", 0);</span></div>
|
||||
<div class="line"><span class="lineno"> 197</span> <span class="comment">// assert(!root.search("hello", 0));</span></div>
|
||||
<div class="line"><span class="lineno"> 198</span> <span class="comment">// std::cout << "hello - " << root.search("world", 0) << "\n";</span></div>
|
||||
<div class="line"><span class="lineno"> 199</span>}</div>
|
||||
<div class="ttc" id="aclassdata__structures_1_1trie_html"><div class="ttname"><a href="../../d0/d3e/classdata__structures_1_1trie.html">data_structures::trie</a></div><div class="ttdoc">Trie implementation for small-case English alphabets a-z</div><div class="ttdef"><b>Definition</b> <a href="../../d7/d83/trie__tree_8cpp_source.html#l00025">trie_tree.cpp:25</a></div></div>
|
||||
<div class="ttc" id="aclassdata__structures_1_1trie_html_a0ab94bc6417e3f59fab33cea5b64d546"><div class="ttname"><a href="../../d0/d3e/classdata__structures_1_1trie.html#a0ab94bc6417e3f59fab33cea5b64d546">data_structures::trie::insert</a></div><div class="ttdeci">void insert(const std::string &str)</div><div class="ttdef"><b>Definition</b> <a href="../../d7/d83/trie__tree_8cpp_source.html#l00077">trie_tree.cpp:77</a></div></div>
|
||||
</div><!-- fragment -->
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -119,183 +119,184 @@ $(function(){initNavTree('d7/d83/trie__tree_8cpp_source.html','../../',''); });
|
||||
<a href="../../d7/d83/trie__tree_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="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="preprocessor">#include <array></span></div>
|
||||
<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="preprocessor">#include <cassert></span></div>
|
||||
<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="preprocessor">#include <iostream></span></div>
|
||||
<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="preprocessor">#include <memory></span></div>
|
||||
<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="preprocessor">#include <string></span></div>
|
||||
<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span></div>
|
||||
<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span><span class="keyword">namespace </span><a class="code hl_namespace" href="../../d5/d3c/namespacedata__structures.html">data_structures</a> {</div>
|
||||
<div class="foldopen" id="foldopen00024" data-start="{" data-end="};">
|
||||
<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"><a class="line" href="../../d0/d3e/classdata__structures_1_1trie.html"> 24</a></span><span class="keyword">class </span><a class="code hl_function" href="../../d0/d3e/classdata__structures_1_1trie.html#a87d8bf99aea936f9381141753f1e90a8">trie</a> {</div>
|
||||
<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span> <span class="keyword">private</span>:</div>
|
||||
<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"><a class="line" href="../../d0/d3e/classdata__structures_1_1trie.html#a4bfac4be6ed1a34c7159eddb42469191"> 26</a></span> <span class="keyword">static</span> <span class="keyword">constexpr</span> uint8_t <a class="code hl_variable" href="../../d0/d3e/classdata__structures_1_1trie.html#a4bfac4be6ed1a34c7159eddb42469191">NUM_CHARS</a> = 26; </div>
|
||||
<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"><a class="line" href="../../d0/d3e/classdata__structures_1_1trie.html#a362dd78748a1f01ab019e55fd6098a8b"> 28</a></span> std::array<std::shared_ptr<trie>, <a class="code hl_variable" href="../../d0/d3e/classdata__structures_1_1trie.html#a4bfac4be6ed1a34c7159eddb42469191">NUM_CHARS << 1></a> <a class="code hl_variable" href="../../d0/d3e/classdata__structures_1_1trie.html#a362dd78748a1f01ab019e55fd6098a8b">arr</a>;</div>
|
||||
<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"><a class="line" href="../../d0/d3e/classdata__structures_1_1trie.html#a4cb0f775b5a4bc14a6d39b5c93883eb6"> 29</a></span> <span class="keywordtype">bool</span> <a class="code hl_variable" href="../../d0/d3e/classdata__structures_1_1trie.html#a4cb0f775b5a4bc14a6d39b5c93883eb6">isEndofWord</a> = <span class="keyword">false</span>; </div>
|
||||
<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span></div>
|
||||
<div class="foldopen" id="foldopen00037" data-start="{" data-end="}">
|
||||
<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"><a class="line" href="../../d0/d3e/classdata__structures_1_1trie.html#aab373beb3f618b90922528c68797d988"> 37</a></span> uint8_t <a class="code hl_function" href="../../d0/d3e/classdata__structures_1_1trie.html#aab373beb3f618b90922528c68797d988">char_to_int</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>& ch)<span class="keyword"> const </span>{</div>
|
||||
<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span> <span class="keywordflow">if</span> (ch >= <span class="charliteral">'A'</span> && ch <= <span class="charliteral">'Z'</span>) {</div>
|
||||
<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span> <span class="keywordflow">return</span> ch - <span class="charliteral">'A'</span>;</div>
|
||||
<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span> } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (ch >= <span class="charliteral">'a'</span> && ch <= <span class="charliteral">'z'</span>) {</div>
|
||||
<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span> <span class="keywordflow">return</span> ch - <span class="charliteral">'a'</span> + <a class="code hl_variable" href="../../d0/d3e/classdata__structures_1_1trie.html#a4bfac4be6ed1a34c7159eddb42469191">NUM_CHARS</a>;</div>
|
||||
<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</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> std::cerr << <span class="stringliteral">"Invalid character present. Exiting..."</span>;</div>
|
||||
<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span> std::exit(EXIT_FAILURE);</div>
|
||||
<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span> <span class="keywordflow">return</span> 0;</div>
|
||||
<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span> }</div>
|
||||
<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="preprocessor">#include <cstdint></span></div>
|
||||
<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="preprocessor">#include <iostream></span></div>
|
||||
<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="preprocessor">#include <memory></span></div>
|
||||
<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span><span class="preprocessor">#include <string></span></div>
|
||||
<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span></div>
|
||||
<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span><span class="keyword">namespace </span><a class="code hl_namespace" href="../../d5/d3c/namespacedata__structures.html">data_structures</a> {</div>
|
||||
<div class="foldopen" id="foldopen00025" data-start="{" data-end="};">
|
||||
<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"><a class="line" href="../../d0/d3e/classdata__structures_1_1trie.html"> 25</a></span><span class="keyword">class </span><a class="code hl_function" href="../../d0/d3e/classdata__structures_1_1trie.html#a87d8bf99aea936f9381141753f1e90a8">trie</a> {</div>
|
||||
<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span> <span class="keyword">private</span>:</div>
|
||||
<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"><a class="line" href="../../d0/d3e/classdata__structures_1_1trie.html#a4bfac4be6ed1a34c7159eddb42469191"> 27</a></span> <span class="keyword">static</span> <span class="keyword">constexpr</span> uint8_t <a class="code hl_variable" href="../../d0/d3e/classdata__structures_1_1trie.html#a4bfac4be6ed1a34c7159eddb42469191">NUM_CHARS</a> = 26; </div>
|
||||
<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"><a class="line" href="../../d0/d3e/classdata__structures_1_1trie.html#a362dd78748a1f01ab019e55fd6098a8b"> 29</a></span> std::array<std::shared_ptr<trie>, <a class="code hl_variable" href="../../d0/d3e/classdata__structures_1_1trie.html#a4bfac4be6ed1a34c7159eddb42469191">NUM_CHARS << 1></a> <a class="code hl_variable" href="../../d0/d3e/classdata__structures_1_1trie.html#a362dd78748a1f01ab019e55fd6098a8b">arr</a>;</div>
|
||||
<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"><a class="line" href="../../d0/d3e/classdata__structures_1_1trie.html#a4cb0f775b5a4bc14a6d39b5c93883eb6"> 30</a></span> <span class="keywordtype">bool</span> <a class="code hl_variable" href="../../d0/d3e/classdata__structures_1_1trie.html#a4cb0f775b5a4bc14a6d39b5c93883eb6">isEndofWord</a> = <span class="keyword">false</span>; </div>
|
||||
<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span></div>
|
||||
<div class="foldopen" id="foldopen00038" data-start="{" data-end="}">
|
||||
<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"><a class="line" href="../../d0/d3e/classdata__structures_1_1trie.html#aab373beb3f618b90922528c68797d988"> 38</a></span> uint8_t <a class="code hl_function" href="../../d0/d3e/classdata__structures_1_1trie.html#aab373beb3f618b90922528c68797d988">char_to_int</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>& ch)<span class="keyword"> const </span>{</div>
|
||||
<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span> <span class="keywordflow">if</span> (ch >= <span class="charliteral">'A'</span> && ch <= <span class="charliteral">'Z'</span>) {</div>
|
||||
<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span> <span class="keywordflow">return</span> ch - <span class="charliteral">'A'</span>;</div>
|
||||
<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span> } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (ch >= <span class="charliteral">'a'</span> && ch <= <span class="charliteral">'z'</span>) {</div>
|
||||
<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span> <span class="keywordflow">return</span> ch - <span class="charliteral">'a'</span> + <a class="code hl_variable" href="../../d0/d3e/classdata__structures_1_1trie.html#a4bfac4be6ed1a34c7159eddb42469191">NUM_CHARS</a>;</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> </div>
|
||||
<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span> std::cerr << <span class="stringliteral">"Invalid character present. Exiting..."</span>;</div>
|
||||
<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span> std::exit(EXIT_FAILURE);</div>
|
||||
<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span> <span class="keywordflow">return</span> 0;</div>
|
||||
<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span> }</div>
|
||||
</div>
|
||||
<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span></div>
|
||||
<div class="foldopen" id="foldopen00055" data-start="{" data-end="}">
|
||||
<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"><a class="line" href="../../d0/d3e/classdata__structures_1_1trie.html#a961eb5d576d2420f2036009154397c63"> 55</a></span> <span class="keywordtype">bool</span> <a class="code hl_function" href="../../d0/d3e/classdata__structures_1_1trie.html#a961eb5d576d2420f2036009154397c63">search</a>(<span class="keyword">const</span> std::shared_ptr<trie>& root, <span class="keyword">const</span> std::string& str,</div>
|
||||
<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> <span class="keywordtype">int</span> index) {</div>
|
||||
<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> <span class="keywordflow">if</span> (index == str.length()) {</div>
|
||||
<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> <span class="keywordflow">if</span> (!root->isEndofWord) {</div>
|
||||
<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
|
||||
<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> }</div>
|
||||
<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span> <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
|
||||
<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span> }</div>
|
||||
<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span> <span class="keywordtype">int</span> j = <a class="code hl_function" href="../../d0/d3e/classdata__structures_1_1trie.html#aab373beb3f618b90922528c68797d988">char_to_int</a>(str[index]);</div>
|
||||
<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> <span class="keywordflow">if</span> (!root->arr[j]) {</div>
|
||||
<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
|
||||
<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span> }</div>
|
||||
<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> <span class="keywordflow">return</span> <a class="code hl_namespace" href="../../d9/dca/namespacesearch.html">search</a>(root->arr[j], str, index + 1);</div>
|
||||
<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span> }</div>
|
||||
<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span></div>
|
||||
<div class="foldopen" id="foldopen00056" data-start="{" data-end="}">
|
||||
<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"><a class="line" href="../../d0/d3e/classdata__structures_1_1trie.html#a961eb5d576d2420f2036009154397c63"> 56</a></span> <span class="keywordtype">bool</span> <a class="code hl_function" href="../../d0/d3e/classdata__structures_1_1trie.html#a961eb5d576d2420f2036009154397c63">search</a>(<span class="keyword">const</span> std::shared_ptr<trie>& root, <span class="keyword">const</span> std::string& str,</div>
|
||||
<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> <span class="keywordtype">int</span> index) {</div>
|
||||
<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> <span class="keywordflow">if</span> (index == str.length()) {</div>
|
||||
<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> <span class="keywordflow">if</span> (!root->isEndofWord) {</div>
|
||||
<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
|
||||
<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span> }</div>
|
||||
<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span> <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
|
||||
<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span> }</div>
|
||||
<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> <span class="keywordtype">int</span> j = <a class="code hl_function" href="../../d0/d3e/classdata__structures_1_1trie.html#aab373beb3f618b90922528c68797d988">char_to_int</a>(str[index]);</div>
|
||||
<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> <span class="keywordflow">if</span> (!root->arr[j]) {</div>
|
||||
<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
|
||||
<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> }</div>
|
||||
<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span> <span class="keywordflow">return</span> <a class="code hl_namespace" href="../../d9/dca/namespacesearch.html">search</a>(root->arr[j], str, index + 1);</div>
|
||||
<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span> }</div>
|
||||
</div>
|
||||
<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span> </div>
|
||||
<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span> <span class="keyword">public</span>:</div>
|
||||
<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"><a class="line" href="../../d0/d3e/classdata__structures_1_1trie.html#a87d8bf99aea936f9381141753f1e90a8"> 71</a></span> <a class="code hl_function" href="../../d0/d3e/classdata__structures_1_1trie.html#a87d8bf99aea936f9381141753f1e90a8">trie</a>() = <span class="keywordflow">default</span>; </div>
|
||||
<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span></div>
|
||||
<div class="foldopen" id="foldopen00076" data-start="{" data-end="}">
|
||||
<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"><a class="line" href="../../d0/d3e/classdata__structures_1_1trie.html#a0ab94bc6417e3f59fab33cea5b64d546"> 76</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="../../d0/d3e/classdata__structures_1_1trie.html#a0ab94bc6417e3f59fab33cea5b64d546">insert</a>(<span class="keyword">const</span> std::string& str) {</div>
|
||||
<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span> std::shared_ptr<trie> root(<span class="keyword">nullptr</span>);</div>
|
||||
<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span> </div>
|
||||
<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keywordtype">char</span>& ch : str) {</div>
|
||||
<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span> <span class="keywordtype">int</span> j = <a class="code hl_function" href="../../d0/d3e/classdata__structures_1_1trie.html#aab373beb3f618b90922528c68797d988">char_to_int</a>(ch);</div>
|
||||
<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span> <span class="keywordflow">if</span> (root) {</div>
|
||||
<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span> <span class="keywordflow">if</span> (root->arr[j]) {</div>
|
||||
<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span> root = root->arr[j];</div>
|
||||
<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span> } <span class="keywordflow">else</span> {</div>
|
||||
<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span> std::shared_ptr<trie> temp(<span class="keyword">new</span> <a class="code hl_function" href="../../d0/d3e/classdata__structures_1_1trie.html#a87d8bf99aea936f9381141753f1e90a8">trie</a>());</div>
|
||||
<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span> root->arr[j] = temp;</div>
|
||||
<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span> root = temp;</div>
|
||||
<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span> }</div>
|
||||
<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span> } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="../../d0/d3e/classdata__structures_1_1trie.html#a362dd78748a1f01ab019e55fd6098a8b">arr</a>[j]) {</div>
|
||||
<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span> root = <a class="code hl_variable" href="../../d0/d3e/classdata__structures_1_1trie.html#a362dd78748a1f01ab019e55fd6098a8b">arr</a>[j];</div>
|
||||
<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span> } <span class="keywordflow">else</span> {</div>
|
||||
<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span> std::shared_ptr<trie> temp(<span class="keyword">new</span> <a class="code hl_function" href="../../d0/d3e/classdata__structures_1_1trie.html#a87d8bf99aea936f9381141753f1e90a8">trie</a>());</div>
|
||||
<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span> <a class="code hl_variable" href="../../d0/d3e/classdata__structures_1_1trie.html#a362dd78748a1f01ab019e55fd6098a8b">arr</a>[j] = temp;</div>
|
||||
<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span> root = temp;</div>
|
||||
<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> }</div>
|
||||
<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span> }</div>
|
||||
<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span> root->isEndofWord = <span class="keyword">true</span>;</div>
|
||||
<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span> }</div>
|
||||
<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span> </div>
|
||||
<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> <span class="keyword">public</span>:</div>
|
||||
<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"><a class="line" href="../../d0/d3e/classdata__structures_1_1trie.html#a87d8bf99aea936f9381141753f1e90a8"> 72</a></span> <a class="code hl_function" href="../../d0/d3e/classdata__structures_1_1trie.html#a87d8bf99aea936f9381141753f1e90a8">trie</a>() = <span class="keywordflow">default</span>; </div>
|
||||
<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span></div>
|
||||
<div class="foldopen" id="foldopen00077" data-start="{" data-end="}">
|
||||
<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"><a class="line" href="../../d0/d3e/classdata__structures_1_1trie.html#a0ab94bc6417e3f59fab33cea5b64d546"> 77</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="../../d0/d3e/classdata__structures_1_1trie.html#a0ab94bc6417e3f59fab33cea5b64d546">insert</a>(<span class="keyword">const</span> std::string& str) {</div>
|
||||
<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span> std::shared_ptr<trie> root(<span class="keyword">nullptr</span>);</div>
|
||||
<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span> </div>
|
||||
<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span> <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keywordtype">char</span>& ch : str) {</div>
|
||||
<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span> <span class="keywordtype">int</span> j = <a class="code hl_function" href="../../d0/d3e/classdata__structures_1_1trie.html#aab373beb3f618b90922528c68797d988">char_to_int</a>(ch);</div>
|
||||
<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span> <span class="keywordflow">if</span> (root) {</div>
|
||||
<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span> <span class="keywordflow">if</span> (root->arr[j]) {</div>
|
||||
<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span> root = root->arr[j];</div>
|
||||
<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span> } <span class="keywordflow">else</span> {</div>
|
||||
<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span> std::shared_ptr<trie> temp(<span class="keyword">new</span> <a class="code hl_function" href="../../d0/d3e/classdata__structures_1_1trie.html#a87d8bf99aea936f9381141753f1e90a8">trie</a>());</div>
|
||||
<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span> root->arr[j] = temp;</div>
|
||||
<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span> root = temp;</div>
|
||||
<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span> }</div>
|
||||
<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span> } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="../../d0/d3e/classdata__structures_1_1trie.html#a362dd78748a1f01ab019e55fd6098a8b">arr</a>[j]) {</div>
|
||||
<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span> root = <a class="code hl_variable" href="../../d0/d3e/classdata__structures_1_1trie.html#a362dd78748a1f01ab019e55fd6098a8b">arr</a>[j];</div>
|
||||
<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span> } <span class="keywordflow">else</span> {</div>
|
||||
<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span> std::shared_ptr<trie> temp(<span class="keyword">new</span> <a class="code hl_function" href="../../d0/d3e/classdata__structures_1_1trie.html#a87d8bf99aea936f9381141753f1e90a8">trie</a>());</div>
|
||||
<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span> <a class="code hl_variable" href="../../d0/d3e/classdata__structures_1_1trie.html#a362dd78748a1f01ab019e55fd6098a8b">arr</a>[j] = temp;</div>
|
||||
<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> root = temp;</div>
|
||||
<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span> }</div>
|
||||
<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span> }</div>
|
||||
<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span> root->isEndofWord = <span class="keyword">true</span>;</div>
|
||||
<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span> }</div>
|
||||
</div>
|
||||
<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span></div>
|
||||
<div class="foldopen" id="foldopen00106" data-start="{" data-end="}">
|
||||
<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"><a class="line" href="../../d0/d3e/classdata__structures_1_1trie.html#a499f87fd833203ef9492b4870aa6d42d"> 106</a></span> <span class="keywordtype">bool</span> <a class="code hl_function" href="../../d0/d3e/classdata__structures_1_1trie.html#a499f87fd833203ef9492b4870aa6d42d">search</a>(<span class="keyword">const</span> std::string& str, <span class="keywordtype">int</span> index) {</div>
|
||||
<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span> <span class="keywordflow">if</span> (index == str.length()) {</div>
|
||||
<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span> <span class="keywordflow">if</span> (!<a class="code hl_variable" href="../../d0/d3e/classdata__structures_1_1trie.html#a4cb0f775b5a4bc14a6d39b5c93883eb6">isEndofWord</a>) {</div>
|
||||
<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
|
||||
<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span> }</div>
|
||||
<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span> <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
|
||||
<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span> }</div>
|
||||
<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span> <span class="keywordtype">int</span> j = <a class="code hl_function" href="../../d0/d3e/classdata__structures_1_1trie.html#aab373beb3f618b90922528c68797d988">char_to_int</a>(str[index]);</div>
|
||||
<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span> <span class="keywordflow">if</span> (!<a class="code hl_variable" href="../../d0/d3e/classdata__structures_1_1trie.html#a362dd78748a1f01ab019e55fd6098a8b">arr</a>[j]) {</div>
|
||||
<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
|
||||
<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span> }</div>
|
||||
<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span> <span class="keywordflow">return</span> <a class="code hl_namespace" href="../../d9/dca/namespacesearch.html">search</a>(<a class="code hl_variable" href="../../d0/d3e/classdata__structures_1_1trie.html#a362dd78748a1f01ab019e55fd6098a8b">arr</a>[j], str, index + 1);</div>
|
||||
<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span> }</div>
|
||||
<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span></div>
|
||||
<div class="foldopen" id="foldopen00107" data-start="{" data-end="}">
|
||||
<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"><a class="line" href="../../d0/d3e/classdata__structures_1_1trie.html#a499f87fd833203ef9492b4870aa6d42d"> 107</a></span> <span class="keywordtype">bool</span> <a class="code hl_function" href="../../d0/d3e/classdata__structures_1_1trie.html#a499f87fd833203ef9492b4870aa6d42d">search</a>(<span class="keyword">const</span> std::string& str, <span class="keywordtype">int</span> index) {</div>
|
||||
<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span> <span class="keywordflow">if</span> (index == str.length()) {</div>
|
||||
<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span> <span class="keywordflow">if</span> (!<a class="code hl_variable" href="../../d0/d3e/classdata__structures_1_1trie.html#a4cb0f775b5a4bc14a6d39b5c93883eb6">isEndofWord</a>) {</div>
|
||||
<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
|
||||
<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span> }</div>
|
||||
<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span> <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
|
||||
<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span> }</div>
|
||||
<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span> <span class="keywordtype">int</span> j = <a class="code hl_function" href="../../d0/d3e/classdata__structures_1_1trie.html#aab373beb3f618b90922528c68797d988">char_to_int</a>(str[index]);</div>
|
||||
<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span> <span class="keywordflow">if</span> (!<a class="code hl_variable" href="../../d0/d3e/classdata__structures_1_1trie.html#a362dd78748a1f01ab019e55fd6098a8b">arr</a>[j]) {</div>
|
||||
<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
|
||||
<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span> }</div>
|
||||
<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span> <span class="keywordflow">return</span> <a class="code hl_namespace" href="../../d9/dca/namespacesearch.html">search</a>(<a class="code hl_variable" href="../../d0/d3e/classdata__structures_1_1trie.html#a362dd78748a1f01ab019e55fd6098a8b">arr</a>[j], str, index + 1);</div>
|
||||
<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span> }</div>
|
||||
</div>
|
||||
<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span></div>
|
||||
<div class="foldopen" id="foldopen00133" data-start="{" data-end="}">
|
||||
<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"><a class="line" href="../../d0/d3e/classdata__structures_1_1trie.html#aeac27cfd397d2dd3f2f519efffafeeab"> 133</a></span> <span class="keywordtype">bool</span> <a class="code hl_function" href="../../d0/d3e/classdata__structures_1_1trie.html#aeac27cfd397d2dd3f2f519efffafeeab">deleteString</a>(<span class="keyword">const</span> std::string& str, <span class="keywordtype">int</span> index) {</div>
|
||||
<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span> <span class="keywordflow">if</span> (index == str.length()) {</div>
|
||||
<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span> <span class="keywordflow">if</span> (!<a class="code hl_variable" href="../../d0/d3e/classdata__structures_1_1trie.html#a4cb0f775b5a4bc14a6d39b5c93883eb6">isEndofWord</a>) {</div>
|
||||
<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
|
||||
<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"> 137</span> }</div>
|
||||
<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span> <a class="code hl_variable" href="../../d0/d3e/classdata__structures_1_1trie.html#a4cb0f775b5a4bc14a6d39b5c93883eb6">isEndofWord</a> = <span class="keyword">false</span>;</div>
|
||||
<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span> <span class="comment">// following lines - possible source of error?</span></div>
|
||||
<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span> <span class="comment">// for (int i = 0; i < NUM_CHARS; i++)</span></div>
|
||||
<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span> <span class="comment">// if (!arr[i])</span></div>
|
||||
<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span> <span class="comment">// return false;</span></div>
|
||||
<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span> <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
|
||||
<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span> }</div>
|
||||
<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span> <span class="keywordtype">int</span> j = <a class="code hl_function" href="../../d0/d3e/classdata__structures_1_1trie.html#aab373beb3f618b90922528c68797d988">char_to_int</a>(str[index]);</div>
|
||||
<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span> <span class="keywordflow">if</span> (!<a class="code hl_variable" href="../../d0/d3e/classdata__structures_1_1trie.html#a362dd78748a1f01ab019e55fd6098a8b">arr</a>[j]) {</div>
|
||||
<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
|
||||
<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span> }</div>
|
||||
<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span> <span class="keywordtype">bool</span> var = <a class="code hl_function" href="../../d0/d3e/classdata__structures_1_1trie.html#aeac27cfd397d2dd3f2f519efffafeeab">deleteString</a>(str, index + 1);</div>
|
||||
<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span> <span class="keywordflow">if</span> (var) {</div>
|
||||
<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span> <a class="code hl_variable" href="../../d0/d3e/classdata__structures_1_1trie.html#a362dd78748a1f01ab019e55fd6098a8b">arr</a>[j].reset();</div>
|
||||
<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="../../d0/d3e/classdata__structures_1_1trie.html#a4cb0f775b5a4bc14a6d39b5c93883eb6">isEndofWord</a>) {</div>
|
||||
<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
|
||||
<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span> } <span class="keywordflow">else</span> {</div>
|
||||
<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"> 155</span> <span class="keywordtype">int</span> i = 0;</div>
|
||||
<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"> 156</span> <span class="keywordflow">for</span> (i = 0; i < <a class="code hl_variable" href="../../d0/d3e/classdata__structures_1_1trie.html#a4bfac4be6ed1a34c7159eddb42469191">NUM_CHARS</a>; i++) {</div>
|
||||
<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="../../d0/d3e/classdata__structures_1_1trie.html#a362dd78748a1f01ab019e55fd6098a8b">arr</a>[i]) {</div>
|
||||
<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"> 158</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
|
||||
<div class="line"><a id="l00159" name="l00159"></a><span class="lineno"> 159</span> }</div>
|
||||
<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"> 160</span> }</div>
|
||||
<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"> 161</span> <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
|
||||
<div class="line"><a id="l00162" name="l00162"></a><span class="lineno"> 162</span> }</div>
|
||||
<div class="line"><a id="l00163" name="l00163"></a><span class="lineno"> 163</span> }</div>
|
||||
<div class="line"><a id="l00164" name="l00164"></a><span class="lineno"> 164</span> </div>
|
||||
<div class="line"><a id="l00165" name="l00165"></a><span class="lineno"> 165</span> <span class="comment">/* should not return here */</span></div>
|
||||
<div class="line"><a id="l00166" name="l00166"></a><span class="lineno"> 166</span> std::cout << __func__ << <span class="stringliteral">":"</span> << __LINE__</div>
|
||||
<div class="line"><a id="l00167" name="l00167"></a><span class="lineno"> 167</span> << <span class="stringliteral">"Should not reach this line\n"</span>;</div>
|
||||
<div class="line"><a id="l00168" name="l00168"></a><span class="lineno"> 168</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
|
||||
<div class="line"><a id="l00169" name="l00169"></a><span class="lineno"> 169</span> }</div>
|
||||
<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span></div>
|
||||
<div class="foldopen" id="foldopen00134" data-start="{" data-end="}">
|
||||
<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"><a class="line" href="../../d0/d3e/classdata__structures_1_1trie.html#aeac27cfd397d2dd3f2f519efffafeeab"> 134</a></span> <span class="keywordtype">bool</span> <a class="code hl_function" href="../../d0/d3e/classdata__structures_1_1trie.html#aeac27cfd397d2dd3f2f519efffafeeab">deleteString</a>(<span class="keyword">const</span> std::string& str, <span class="keywordtype">int</span> index) {</div>
|
||||
<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span> <span class="keywordflow">if</span> (index == str.length()) {</div>
|
||||
<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span> <span class="keywordflow">if</span> (!<a class="code hl_variable" href="../../d0/d3e/classdata__structures_1_1trie.html#a4cb0f775b5a4bc14a6d39b5c93883eb6">isEndofWord</a>) {</div>
|
||||
<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"> 137</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
|
||||
<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span> }</div>
|
||||
<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span> <a class="code hl_variable" href="../../d0/d3e/classdata__structures_1_1trie.html#a4cb0f775b5a4bc14a6d39b5c93883eb6">isEndofWord</a> = <span class="keyword">false</span>;</div>
|
||||
<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span> <span class="comment">// following lines - possible source of error?</span></div>
|
||||
<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span> <span class="comment">// for (int i = 0; i < NUM_CHARS; i++)</span></div>
|
||||
<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span> <span class="comment">// if (!arr[i])</span></div>
|
||||
<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span> <span class="comment">// return false;</span></div>
|
||||
<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span> <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
|
||||
<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span> }</div>
|
||||
<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span> <span class="keywordtype">int</span> j = <a class="code hl_function" href="../../d0/d3e/classdata__structures_1_1trie.html#aab373beb3f618b90922528c68797d988">char_to_int</a>(str[index]);</div>
|
||||
<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span> <span class="keywordflow">if</span> (!<a class="code hl_variable" href="../../d0/d3e/classdata__structures_1_1trie.html#a362dd78748a1f01ab019e55fd6098a8b">arr</a>[j]) {</div>
|
||||
<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
|
||||
<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span> }</div>
|
||||
<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span> <span class="keywordtype">bool</span> var = <a class="code hl_function" href="../../d0/d3e/classdata__structures_1_1trie.html#aeac27cfd397d2dd3f2f519efffafeeab">deleteString</a>(str, index + 1);</div>
|
||||
<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span> <span class="keywordflow">if</span> (var) {</div>
|
||||
<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span> <a class="code hl_variable" href="../../d0/d3e/classdata__structures_1_1trie.html#a362dd78748a1f01ab019e55fd6098a8b">arr</a>[j].reset();</div>
|
||||
<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="../../d0/d3e/classdata__structures_1_1trie.html#a4cb0f775b5a4bc14a6d39b5c93883eb6">isEndofWord</a>) {</div>
|
||||
<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
|
||||
<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"> 155</span> } <span class="keywordflow">else</span> {</div>
|
||||
<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"> 156</span> <span class="keywordtype">int</span> i = 0;</div>
|
||||
<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</span> <span class="keywordflow">for</span> (i = 0; i < <a class="code hl_variable" href="../../d0/d3e/classdata__structures_1_1trie.html#a4bfac4be6ed1a34c7159eddb42469191">NUM_CHARS</a>; i++) {</div>
|
||||
<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"> 158</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="../../d0/d3e/classdata__structures_1_1trie.html#a362dd78748a1f01ab019e55fd6098a8b">arr</a>[i]) {</div>
|
||||
<div class="line"><a id="l00159" name="l00159"></a><span class="lineno"> 159</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
|
||||
<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"> 160</span> }</div>
|
||||
<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"> 161</span> }</div>
|
||||
<div class="line"><a id="l00162" name="l00162"></a><span class="lineno"> 162</span> <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
|
||||
<div class="line"><a id="l00163" name="l00163"></a><span class="lineno"> 163</span> }</div>
|
||||
<div class="line"><a id="l00164" name="l00164"></a><span class="lineno"> 164</span> }</div>
|
||||
<div class="line"><a id="l00165" name="l00165"></a><span class="lineno"> 165</span> </div>
|
||||
<div class="line"><a id="l00166" name="l00166"></a><span class="lineno"> 166</span> <span class="comment">/* should not return here */</span></div>
|
||||
<div class="line"><a id="l00167" name="l00167"></a><span class="lineno"> 167</span> std::cout << __func__ << <span class="stringliteral">":"</span> << __LINE__</div>
|
||||
<div class="line"><a id="l00168" name="l00168"></a><span class="lineno"> 168</span> << <span class="stringliteral">"Should not reach this line\n"</span>;</div>
|
||||
<div class="line"><a id="l00169" name="l00169"></a><span class="lineno"> 169</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
|
||||
<div class="line"><a id="l00170" name="l00170"></a><span class="lineno"> 170</span> }</div>
|
||||
</div>
|
||||
<div class="line"><a id="l00170" name="l00170"></a><span class="lineno"> 170</span>};</div>
|
||||
<div class="line"><a id="l00171" name="l00171"></a><span class="lineno"> 171</span>};</div>
|
||||
</div>
|
||||
<div class="line"><a id="l00171" name="l00171"></a><span class="lineno"> 171</span>} <span class="comment">// namespace data_structures</span></div>
|
||||
<div class="line"><a id="l00172" name="l00172"></a><span class="lineno"> 172</span></div>
|
||||
<div class="foldopen" id="foldopen00177" data-start="{" data-end="}">
|
||||
<div class="line"><a id="l00177" name="l00177"></a><span class="lineno"><a class="line" href="../../d7/d83/trie__tree_8cpp.html#aa8dca7b867074164d5f45b0f3851269d"> 177</a></span><span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code hl_function" href="../../d7/d83/trie__tree_8cpp.html#aa8dca7b867074164d5f45b0f3851269d">test</a>() {</div>
|
||||
<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"> 178</span> <a class="code hl_class" href="../../d0/d3e/classdata__structures_1_1trie.html">data_structures::trie</a> root;</div>
|
||||
<div class="line"><a id="l00179" name="l00179"></a><span class="lineno"> 179</span> root.<a class="code hl_function" href="../../d0/d3e/classdata__structures_1_1trie.html#a0ab94bc6417e3f59fab33cea5b64d546">insert</a>(<span class="stringliteral">"Hello"</span>);</div>
|
||||
<div class="line"><a id="l00180" name="l00180"></a><span class="lineno"> 180</span> root.insert(<span class="stringliteral">"World"</span>);</div>
|
||||
<div class="line"><a id="l00181" name="l00181"></a><span class="lineno"> 181</span> </div>
|
||||
<div class="line"><a id="l00182" name="l00182"></a><span class="lineno"> 182</span> assert(!root.search(<span class="stringliteral">"hello"</span>, 0));</div>
|
||||
<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"> 183</span> std::cout << <span class="stringliteral">"hello - "</span> << root.search(<span class="stringliteral">"hello"</span>, 0) << <span class="stringliteral">"\n"</span>;</div>
|
||||
<div class="line"><a id="l00184" name="l00184"></a><span class="lineno"> 184</span> </div>
|
||||
<div class="line"><a id="l00185" name="l00185"></a><span class="lineno"> 185</span> assert(root.search(<span class="stringliteral">"Hello"</span>, 0));</div>
|
||||
<div class="line"><a id="l00186" name="l00186"></a><span class="lineno"> 186</span> std::cout << <span class="stringliteral">"Hello - "</span> << root.search(<span class="stringliteral">"Hello"</span>, 0) << <span class="stringliteral">"\n"</span>;</div>
|
||||
<div class="line"><a id="l00187" name="l00187"></a><span class="lineno"> 187</span> </div>
|
||||
<div class="line"><a id="l00188" name="l00188"></a><span class="lineno"> 188</span> assert(!root.search(<span class="stringliteral">"Word"</span>, 0));</div>
|
||||
<div class="line"><a id="l00189" name="l00189"></a><span class="lineno"> 189</span> std::cout << <span class="stringliteral">"Word - "</span> << root.search(<span class="stringliteral">"Word"</span>, 0) << <span class="stringliteral">"\n"</span>;</div>
|
||||
<div class="line"><a id="l00190" name="l00190"></a><span class="lineno"> 190</span> </div>
|
||||
<div class="line"><a id="l00191" name="l00191"></a><span class="lineno"> 191</span> assert(root.search(<span class="stringliteral">"World"</span>, 0));</div>
|
||||
<div class="line"><a id="l00192" name="l00192"></a><span class="lineno"> 192</span> std::cout << <span class="stringliteral">"World - "</span> << root.search(<span class="stringliteral">"World"</span>, 0) << <span class="stringliteral">"\n"</span>;</div>
|
||||
<div class="line"><a id="l00193" name="l00193"></a><span class="lineno"> 193</span> </div>
|
||||
<div class="line"><a id="l00194" name="l00194"></a><span class="lineno"> 194</span> <span class="comment">// Following lines of code give erroneous output</span></div>
|
||||
<div class="line"><a id="l00195" name="l00195"></a><span class="lineno"> 195</span> <span class="comment">// root.deleteString("hello", 0);</span></div>
|
||||
<div class="line"><a id="l00196" name="l00196"></a><span class="lineno"> 196</span> <span class="comment">// assert(!root.search("hello", 0));</span></div>
|
||||
<div class="line"><a id="l00197" name="l00197"></a><span class="lineno"> 197</span> <span class="comment">// std::cout << "hello - " << root.search("world", 0) << "\n";</span></div>
|
||||
<div class="line"><a id="l00198" name="l00198"></a><span class="lineno"> 198</span>}</div>
|
||||
<div class="line"><a id="l00172" name="l00172"></a><span class="lineno"> 172</span>} <span class="comment">// namespace data_structures</span></div>
|
||||
<div class="line"><a id="l00173" name="l00173"></a><span class="lineno"> 173</span></div>
|
||||
<div class="foldopen" id="foldopen00178" data-start="{" data-end="}">
|
||||
<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"><a class="line" href="../../d7/d83/trie__tree_8cpp.html#aa8dca7b867074164d5f45b0f3851269d"> 178</a></span><span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code hl_function" href="../../d7/d83/trie__tree_8cpp.html#aa8dca7b867074164d5f45b0f3851269d">test</a>() {</div>
|
||||
<div class="line"><a id="l00179" name="l00179"></a><span class="lineno"> 179</span> <a class="code hl_class" href="../../d0/d3e/classdata__structures_1_1trie.html">data_structures::trie</a> root;</div>
|
||||
<div class="line"><a id="l00180" name="l00180"></a><span class="lineno"> 180</span> root.<a class="code hl_function" href="../../d0/d3e/classdata__structures_1_1trie.html#a0ab94bc6417e3f59fab33cea5b64d546">insert</a>(<span class="stringliteral">"Hello"</span>);</div>
|
||||
<div class="line"><a id="l00181" name="l00181"></a><span class="lineno"> 181</span> root.insert(<span class="stringliteral">"World"</span>);</div>
|
||||
<div class="line"><a id="l00182" name="l00182"></a><span class="lineno"> 182</span> </div>
|
||||
<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"> 183</span> assert(!root.search(<span class="stringliteral">"hello"</span>, 0));</div>
|
||||
<div class="line"><a id="l00184" name="l00184"></a><span class="lineno"> 184</span> std::cout << <span class="stringliteral">"hello - "</span> << root.search(<span class="stringliteral">"hello"</span>, 0) << <span class="stringliteral">"\n"</span>;</div>
|
||||
<div class="line"><a id="l00185" name="l00185"></a><span class="lineno"> 185</span> </div>
|
||||
<div class="line"><a id="l00186" name="l00186"></a><span class="lineno"> 186</span> assert(root.search(<span class="stringliteral">"Hello"</span>, 0));</div>
|
||||
<div class="line"><a id="l00187" name="l00187"></a><span class="lineno"> 187</span> std::cout << <span class="stringliteral">"Hello - "</span> << root.search(<span class="stringliteral">"Hello"</span>, 0) << <span class="stringliteral">"\n"</span>;</div>
|
||||
<div class="line"><a id="l00188" name="l00188"></a><span class="lineno"> 188</span> </div>
|
||||
<div class="line"><a id="l00189" name="l00189"></a><span class="lineno"> 189</span> assert(!root.search(<span class="stringliteral">"Word"</span>, 0));</div>
|
||||
<div class="line"><a id="l00190" name="l00190"></a><span class="lineno"> 190</span> std::cout << <span class="stringliteral">"Word - "</span> << root.search(<span class="stringliteral">"Word"</span>, 0) << <span class="stringliteral">"\n"</span>;</div>
|
||||
<div class="line"><a id="l00191" name="l00191"></a><span class="lineno"> 191</span> </div>
|
||||
<div class="line"><a id="l00192" name="l00192"></a><span class="lineno"> 192</span> assert(root.search(<span class="stringliteral">"World"</span>, 0));</div>
|
||||
<div class="line"><a id="l00193" name="l00193"></a><span class="lineno"> 193</span> std::cout << <span class="stringliteral">"World - "</span> << root.search(<span class="stringliteral">"World"</span>, 0) << <span class="stringliteral">"\n"</span>;</div>
|
||||
<div class="line"><a id="l00194" name="l00194"></a><span class="lineno"> 194</span> </div>
|
||||
<div class="line"><a id="l00195" name="l00195"></a><span class="lineno"> 195</span> <span class="comment">// Following lines of code give erroneous output</span></div>
|
||||
<div class="line"><a id="l00196" name="l00196"></a><span class="lineno"> 196</span> <span class="comment">// root.deleteString("hello", 0);</span></div>
|
||||
<div class="line"><a id="l00197" name="l00197"></a><span class="lineno"> 197</span> <span class="comment">// assert(!root.search("hello", 0));</span></div>
|
||||
<div class="line"><a id="l00198" name="l00198"></a><span class="lineno"> 198</span> <span class="comment">// std::cout << "hello - " << root.search("world", 0) << "\n";</span></div>
|
||||
<div class="line"><a id="l00199" name="l00199"></a><span class="lineno"> 199</span>}</div>
|
||||
</div>
|
||||
<div class="line"><a id="l00199" name="l00199"></a><span class="lineno"> 199</span></div>
|
||||
<div class="foldopen" id="foldopen00204" data-start="{" data-end="}">
|
||||
<div class="line"><a id="l00204" name="l00204"></a><span class="lineno"><a class="line" href="../../d7/d83/trie__tree_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4"> 204</a></span><span class="keywordtype">int</span> <a class="code hl_function" href="../../d7/d83/trie__tree_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4">main</a>() {</div>
|
||||
<div class="line"><a id="l00205" name="l00205"></a><span class="lineno"> 205</span> <a class="code hl_function" href="../../d7/d83/trie__tree_8cpp.html#aa8dca7b867074164d5f45b0f3851269d">test</a>();</div>
|
||||
<div class="line"><a id="l00206" name="l00206"></a><span class="lineno"> 206</span> </div>
|
||||
<div class="line"><a id="l00207" name="l00207"></a><span class="lineno"> 207</span> <span class="keywordflow">return</span> 0;</div>
|
||||
<div class="line"><a id="l00208" name="l00208"></a><span class="lineno"> 208</span>}</div>
|
||||
<div class="line"><a id="l00200" name="l00200"></a><span class="lineno"> 200</span></div>
|
||||
<div class="foldopen" id="foldopen00205" data-start="{" data-end="}">
|
||||
<div class="line"><a id="l00205" name="l00205"></a><span class="lineno"><a class="line" href="../../d7/d83/trie__tree_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4"> 205</a></span><span class="keywordtype">int</span> <a class="code hl_function" href="../../d7/d83/trie__tree_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4">main</a>() {</div>
|
||||
<div class="line"><a id="l00206" name="l00206"></a><span class="lineno"> 206</span> <a class="code hl_function" href="../../d7/d83/trie__tree_8cpp.html#aa8dca7b867074164d5f45b0f3851269d">test</a>();</div>
|
||||
<div class="line"><a id="l00207" name="l00207"></a><span class="lineno"> 207</span> </div>
|
||||
<div class="line"><a id="l00208" name="l00208"></a><span class="lineno"> 208</span> <span class="keywordflow">return</span> 0;</div>
|
||||
<div class="line"><a id="l00209" name="l00209"></a><span class="lineno"> 209</span>}</div>
|
||||
</div>
|
||||
<div class="ttc" id="aclassdata__structures_1_1trie_html"><div class="ttname"><a href="../../d0/d3e/classdata__structures_1_1trie.html">data_structures::trie</a></div><div class="ttdoc">Trie implementation for small-case English alphabets a-z</div><div class="ttdef"><b>Definition</b> <a href="#l00024">trie_tree.cpp:24</a></div></div>
|
||||
<div class="ttc" id="aclassdata__structures_1_1trie_html_a0ab94bc6417e3f59fab33cea5b64d546"><div class="ttname"><a href="../../d0/d3e/classdata__structures_1_1trie.html#a0ab94bc6417e3f59fab33cea5b64d546">data_structures::trie::insert</a></div><div class="ttdeci">void insert(const std::string &str)</div><div class="ttdef"><b>Definition</b> <a href="#l00076">trie_tree.cpp:76</a></div></div>
|
||||
<div class="ttc" id="aclassdata__structures_1_1trie_html_a362dd78748a1f01ab019e55fd6098a8b"><div class="ttname"><a href="../../d0/d3e/classdata__structures_1_1trie.html#a362dd78748a1f01ab019e55fd6098a8b">data_structures::trie::arr</a></div><div class="ttdeci">std::array< std::shared_ptr< trie >, NUM_CHARS<< 1 > arr</div><div class="ttdoc">Recursive tree nodes as an array of shared-pointers.</div><div class="ttdef"><b>Definition</b> <a href="#l00028">trie_tree.cpp:28</a></div></div>
|
||||
<div class="ttc" id="aclassdata__structures_1_1trie_html_a499f87fd833203ef9492b4870aa6d42d"><div class="ttname"><a href="../../d0/d3e/classdata__structures_1_1trie.html#a499f87fd833203ef9492b4870aa6d42d">data_structures::trie::search</a></div><div class="ttdeci">bool search(const std::string &str, int index)</div><div class="ttdef"><b>Definition</b> <a href="#l00106">trie_tree.cpp:106</a></div></div>
|
||||
<div class="ttc" id="aclassdata__structures_1_1trie_html_a4bfac4be6ed1a34c7159eddb42469191"><div class="ttname"><a href="../../d0/d3e/classdata__structures_1_1trie.html#a4bfac4be6ed1a34c7159eddb42469191">data_structures::trie::NUM_CHARS</a></div><div class="ttdeci">static constexpr uint8_t NUM_CHARS</div><div class="ttdoc">Number of alphabets.</div><div class="ttdef"><b>Definition</b> <a href="#l00026">trie_tree.cpp:26</a></div></div>
|
||||
<div class="ttc" id="aclassdata__structures_1_1trie_html_a4cb0f775b5a4bc14a6d39b5c93883eb6"><div class="ttname"><a href="../../d0/d3e/classdata__structures_1_1trie.html#a4cb0f775b5a4bc14a6d39b5c93883eb6">data_structures::trie::isEndofWord</a></div><div class="ttdeci">bool isEndofWord</div><div class="ttdoc">identifier if a node is terminal node</div><div class="ttdef"><b>Definition</b> <a href="#l00029">trie_tree.cpp:29</a></div></div>
|
||||
<div class="ttc" id="aclassdata__structures_1_1trie_html"><div class="ttname"><a href="../../d0/d3e/classdata__structures_1_1trie.html">data_structures::trie</a></div><div class="ttdoc">Trie implementation for small-case English alphabets a-z</div><div class="ttdef"><b>Definition</b> <a href="#l00025">trie_tree.cpp:25</a></div></div>
|
||||
<div class="ttc" id="aclassdata__structures_1_1trie_html_a0ab94bc6417e3f59fab33cea5b64d546"><div class="ttname"><a href="../../d0/d3e/classdata__structures_1_1trie.html#a0ab94bc6417e3f59fab33cea5b64d546">data_structures::trie::insert</a></div><div class="ttdeci">void insert(const std::string &str)</div><div class="ttdef"><b>Definition</b> <a href="#l00077">trie_tree.cpp:77</a></div></div>
|
||||
<div class="ttc" id="aclassdata__structures_1_1trie_html_a362dd78748a1f01ab019e55fd6098a8b"><div class="ttname"><a href="../../d0/d3e/classdata__structures_1_1trie.html#a362dd78748a1f01ab019e55fd6098a8b">data_structures::trie::arr</a></div><div class="ttdeci">std::array< std::shared_ptr< trie >, NUM_CHARS<< 1 > arr</div><div class="ttdoc">Recursive tree nodes as an array of shared-pointers.</div><div class="ttdef"><b>Definition</b> <a href="#l00029">trie_tree.cpp:29</a></div></div>
|
||||
<div class="ttc" id="aclassdata__structures_1_1trie_html_a499f87fd833203ef9492b4870aa6d42d"><div class="ttname"><a href="../../d0/d3e/classdata__structures_1_1trie.html#a499f87fd833203ef9492b4870aa6d42d">data_structures::trie::search</a></div><div class="ttdeci">bool search(const std::string &str, int index)</div><div class="ttdef"><b>Definition</b> <a href="#l00107">trie_tree.cpp:107</a></div></div>
|
||||
<div class="ttc" id="aclassdata__structures_1_1trie_html_a4bfac4be6ed1a34c7159eddb42469191"><div class="ttname"><a href="../../d0/d3e/classdata__structures_1_1trie.html#a4bfac4be6ed1a34c7159eddb42469191">data_structures::trie::NUM_CHARS</a></div><div class="ttdeci">static constexpr uint8_t NUM_CHARS</div><div class="ttdoc">Number of alphabets.</div><div class="ttdef"><b>Definition</b> <a href="#l00027">trie_tree.cpp:27</a></div></div>
|
||||
<div class="ttc" id="aclassdata__structures_1_1trie_html_a4cb0f775b5a4bc14a6d39b5c93883eb6"><div class="ttname"><a href="../../d0/d3e/classdata__structures_1_1trie.html#a4cb0f775b5a4bc14a6d39b5c93883eb6">data_structures::trie::isEndofWord</a></div><div class="ttdeci">bool isEndofWord</div><div class="ttdoc">identifier if a node is terminal node</div><div class="ttdef"><b>Definition</b> <a href="#l00030">trie_tree.cpp:30</a></div></div>
|
||||
<div class="ttc" id="aclassdata__structures_1_1trie_html_a87d8bf99aea936f9381141753f1e90a8"><div class="ttname"><a href="../../d0/d3e/classdata__structures_1_1trie.html#a87d8bf99aea936f9381141753f1e90a8">data_structures::trie::trie</a></div><div class="ttdeci">trie()=default</div><div class="ttdoc">Class default constructor.</div></div>
|
||||
<div class="ttc" id="aclassdata__structures_1_1trie_html_a961eb5d576d2420f2036009154397c63"><div class="ttname"><a href="../../d0/d3e/classdata__structures_1_1trie.html#a961eb5d576d2420f2036009154397c63">data_structures::trie::search</a></div><div class="ttdeci">bool search(const std::shared_ptr< trie > &root, const std::string &str, int index)</div><div class="ttdef"><b>Definition</b> <a href="#l00055">trie_tree.cpp:55</a></div></div>
|
||||
<div class="ttc" id="aclassdata__structures_1_1trie_html_aab373beb3f618b90922528c68797d988"><div class="ttname"><a href="../../d0/d3e/classdata__structures_1_1trie.html#aab373beb3f618b90922528c68797d988">data_structures::trie::char_to_int</a></div><div class="ttdeci">uint8_t char_to_int(const char &ch) const</div><div class="ttdoc">Convert a character to integer for indexing.</div><div class="ttdef"><b>Definition</b> <a href="#l00037">trie_tree.cpp:37</a></div></div>
|
||||
<div class="ttc" id="aclassdata__structures_1_1trie_html_aeac27cfd397d2dd3f2f519efffafeeab"><div class="ttname"><a href="../../d0/d3e/classdata__structures_1_1trie.html#aeac27cfd397d2dd3f2f519efffafeeab">data_structures::trie::deleteString</a></div><div class="ttdeci">bool deleteString(const std::string &str, int index)</div><div class="ttdef"><b>Definition</b> <a href="#l00133">trie_tree.cpp:133</a></div></div>
|
||||
<div class="ttc" id="aclassdata__structures_1_1trie_html_a961eb5d576d2420f2036009154397c63"><div class="ttname"><a href="../../d0/d3e/classdata__structures_1_1trie.html#a961eb5d576d2420f2036009154397c63">data_structures::trie::search</a></div><div class="ttdeci">bool search(const std::shared_ptr< trie > &root, const std::string &str, int index)</div><div class="ttdef"><b>Definition</b> <a href="#l00056">trie_tree.cpp:56</a></div></div>
|
||||
<div class="ttc" id="aclassdata__structures_1_1trie_html_aab373beb3f618b90922528c68797d988"><div class="ttname"><a href="../../d0/d3e/classdata__structures_1_1trie.html#aab373beb3f618b90922528c68797d988">data_structures::trie::char_to_int</a></div><div class="ttdeci">uint8_t char_to_int(const char &ch) const</div><div class="ttdoc">Convert a character to integer for indexing.</div><div class="ttdef"><b>Definition</b> <a href="#l00038">trie_tree.cpp:38</a></div></div>
|
||||
<div class="ttc" id="aclassdata__structures_1_1trie_html_aeac27cfd397d2dd3f2f519efffafeeab"><div class="ttname"><a href="../../d0/d3e/classdata__structures_1_1trie.html#aeac27cfd397d2dd3f2f519efffafeeab">data_structures::trie::deleteString</a></div><div class="ttdeci">bool deleteString(const std::string &str, int index)</div><div class="ttdef"><b>Definition</b> <a href="#l00134">trie_tree.cpp:134</a></div></div>
|
||||
<div class="ttc" id="anamespacedata__structures_html"><div class="ttname"><a href="../../d5/d3c/namespacedata__structures.html">data_structures</a></div><div class="ttdoc">for IO operations</div></div>
|
||||
<div class="ttc" id="anamespacesearch_html"><div class="ttname"><a href="../../d9/dca/namespacesearch.html">search</a></div><div class="ttdoc">for std::assert</div><div class="ttdef"><b>Definition</b> <a href="../../df/dd5/binary__search_8cpp_source.html#l00047">binary_search.cpp:47</a></div></div>
|
||||
<div class="ttc" id="atrie__tree_8cpp_html_aa8dca7b867074164d5f45b0f3851269d"><div class="ttname"><a href="../../d7/d83/trie__tree_8cpp.html#aa8dca7b867074164d5f45b0f3851269d">test</a></div><div class="ttdeci">static void test()</div><div class="ttdoc">Testing function.</div><div class="ttdef"><b>Definition</b> <a href="#l00177">trie_tree.cpp:177</a></div></div>
|
||||
<div class="ttc" id="atrie__tree_8cpp_html_ae66f6b31b5ad750f1fe042a706a4e3d4"><div class="ttname"><a href="../../d7/d83/trie__tree_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4">main</a></div><div class="ttdeci">int main()</div><div class="ttdoc">Main function.</div><div class="ttdef"><b>Definition</b> <a href="#l00204">trie_tree.cpp:204</a></div></div>
|
||||
<div class="ttc" id="atrie__tree_8cpp_html_aa8dca7b867074164d5f45b0f3851269d"><div class="ttname"><a href="../../d7/d83/trie__tree_8cpp.html#aa8dca7b867074164d5f45b0f3851269d">test</a></div><div class="ttdeci">static void test()</div><div class="ttdoc">Testing function.</div><div class="ttdef"><b>Definition</b> <a href="#l00178">trie_tree.cpp:178</a></div></div>
|
||||
<div class="ttc" id="atrie__tree_8cpp_html_ae66f6b31b5ad750f1fe042a706a4e3d4"><div class="ttname"><a href="../../d7/d83/trie__tree_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4">main</a></div><div class="ttdeci">int main()</div><div class="ttdoc">Main function.</div><div class="ttdef"><b>Definition</b> <a href="#l00205">trie_tree.cpp:205</a></div></div>
|
||||
</div><!-- fragment --></div><!-- contents -->
|
||||
</div><!-- doc-content -->
|
||||
</div><!-- container -->
|
||||
|
||||
@@ -163,7 +163,7 @@ Private Attributes</h2></td></tr>
|
||||
<a name="details" id="details"></a><h2 id="header-details" class="groupheader">Detailed Description</h2>
|
||||
<div class="textblock"><p>Range query here is range sum, but the code can be modified to make different queries like range max or min. </p>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d5/d58/persistent__seg__tree__lazy__prop_8cpp_source.html#l00039">39</a> of file <a class="el" href="../../d5/d58/persistent__seg__tree__lazy__prop_8cpp_source.html">persistent_seg_tree_lazy_prop.cpp</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="../../d5/d58/persistent__seg__tree__lazy__prop_8cpp_source.html#l00040">40</a> of file <a class="el" href="../../d5/d58/persistent__seg__tree__lazy__prop_8cpp_source.html">persistent_seg_tree_lazy_prop.cpp</a>.</p>
|
||||
</div><a name="doc-func-members" id="doc-func-members"></a><h2 id="header-doc-func-members" class="groupheader">Member Function Documentation</h2>
|
||||
<a id="ac83bcabf5a8db8b0d8d156a4c1bcd4c3" name="ac83bcabf5a8db8b0d8d156a4c1bcd4c3"></a>
|
||||
<h2 class="memtitle"><span class="permalink"><a href="#ac83bcabf5a8db8b0d8d156a4c1bcd4c3">◆ </a></span>construct() <span class="overload">[1/2]</span></h2>
|
||||
@@ -197,19 +197,19 @@ Private Attributes</h2></td></tr>
|
||||
</dl>
|
||||
<dl class="section return"><dt>Returns</dt><dd>void </dd></dl>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d5/d58/persistent__seg__tree__lazy__prop_8cpp_source.html#l00197">197</a> of file <a class="el" href="../../d5/d58/persistent__seg__tree__lazy__prop_8cpp_source.html">persistent_seg_tree_lazy_prop.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 200</span> {</div>
|
||||
<div class="line"><span class="lineno"> 201</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="#a8ff495d2f389b4aaa54449c26c6078f3">vec</a>.empty()) {</div>
|
||||
<div class="line"><span class="lineno"> 202</span> <span class="keywordflow">return</span>;</div>
|
||||
<div class="line"><span class="lineno"> 203</span> }</div>
|
||||
<div class="line"><span class="lineno"> 204</span> n = <a class="code hl_variable" href="#a8ff495d2f389b4aaa54449c26c6078f3">vec</a>.size();</div>
|
||||
<div class="line"><span class="lineno"> 205</span> this-><a class="code hl_variable" href="#a8ff495d2f389b4aaa54449c26c6078f3">vec</a> = <a class="code hl_variable" href="#a8ff495d2f389b4aaa54449c26c6078f3">vec</a>;</div>
|
||||
<div class="line"><span class="lineno"> 206</span> <span class="keyword">auto</span> root = <a class="code hl_function" href="#a6d3f2465a7c5803a1ff16c5378bcc5e4">construct</a>(0, n - 1);</div>
|
||||
<div class="line"><span class="lineno"> 207</span> <a class="code hl_variable" href="#a1eac9cf0613dfc8e2b0195009dd5c9d5">ptrs</a>.push_back(root);</div>
|
||||
<div class="line"><span class="lineno"> 208</span> }</div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1per_seg_tree_html_a1eac9cf0613dfc8e2b0195009dd5c9d5"><div class="ttname"><a href="#a1eac9cf0613dfc8e2b0195009dd5c9d5">range_queries::perSegTree::ptrs</a></div><div class="ttdeci">std::vector< std::shared_ptr< Node > > ptrs</div><div class="ttdoc">number of elements/leaf nodes in the segment tree</div><div class="ttdef"><b>Definition</b> <a href="../../d5/d58/persistent__seg__tree__lazy__prop_8cpp_source.html#l00054">persistent_seg_tree_lazy_prop.cpp:54</a></div></div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1per_seg_tree_html_a6d3f2465a7c5803a1ff16c5378bcc5e4"><div class="ttname"><a href="#a6d3f2465a7c5803a1ff16c5378bcc5e4">range_queries::perSegTree::construct</a></div><div class="ttdeci">std::shared_ptr< Node > construct(const uint32_t &i, const uint32_t &j)</div><div class="ttdoc">Constructing the segment tree with the early passed vector. Every call creates a node to hold the sum...</div><div class="ttdef"><b>Definition</b> <a href="../../d5/d58/persistent__seg__tree__lazy__prop_8cpp_source.html#l00106">persistent_seg_tree_lazy_prop.cpp:106</a></div></div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1per_seg_tree_html_a8ff495d2f389b4aaa54449c26c6078f3"><div class="ttname"><a href="#a8ff495d2f389b4aaa54449c26c6078f3">range_queries::perSegTree::vec</a></div><div class="ttdeci">std::vector< int64_t > vec</div><div class="ttdef"><b>Definition</b> <a href="../../d5/d58/persistent__seg__tree__lazy__prop_8cpp_source.html#l00057">persistent_seg_tree_lazy_prop.cpp:57</a></div></div>
|
||||
<p class="definition">Definition at line <a class="el" href="../../d5/d58/persistent__seg__tree__lazy__prop_8cpp_source.html#l00198">198</a> of file <a class="el" href="../../d5/d58/persistent__seg__tree__lazy__prop_8cpp_source.html">persistent_seg_tree_lazy_prop.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 201</span> {</div>
|
||||
<div class="line"><span class="lineno"> 202</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="#a8ff495d2f389b4aaa54449c26c6078f3">vec</a>.empty()) {</div>
|
||||
<div class="line"><span class="lineno"> 203</span> <span class="keywordflow">return</span>;</div>
|
||||
<div class="line"><span class="lineno"> 204</span> }</div>
|
||||
<div class="line"><span class="lineno"> 205</span> n = <a class="code hl_variable" href="#a8ff495d2f389b4aaa54449c26c6078f3">vec</a>.size();</div>
|
||||
<div class="line"><span class="lineno"> 206</span> this-><a class="code hl_variable" href="#a8ff495d2f389b4aaa54449c26c6078f3">vec</a> = <a class="code hl_variable" href="#a8ff495d2f389b4aaa54449c26c6078f3">vec</a>;</div>
|
||||
<div class="line"><span class="lineno"> 207</span> <span class="keyword">auto</span> root = <a class="code hl_function" href="#a6d3f2465a7c5803a1ff16c5378bcc5e4">construct</a>(0, n - 1);</div>
|
||||
<div class="line"><span class="lineno"> 208</span> <a class="code hl_variable" href="#a1eac9cf0613dfc8e2b0195009dd5c9d5">ptrs</a>.push_back(root);</div>
|
||||
<div class="line"><span class="lineno"> 209</span> }</div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1per_seg_tree_html_a1eac9cf0613dfc8e2b0195009dd5c9d5"><div class="ttname"><a href="#a1eac9cf0613dfc8e2b0195009dd5c9d5">range_queries::perSegTree::ptrs</a></div><div class="ttdeci">std::vector< std::shared_ptr< Node > > ptrs</div><div class="ttdoc">number of elements/leaf nodes in the segment tree</div><div class="ttdef"><b>Definition</b> <a href="../../d5/d58/persistent__seg__tree__lazy__prop_8cpp_source.html#l00055">persistent_seg_tree_lazy_prop.cpp:55</a></div></div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1per_seg_tree_html_a6d3f2465a7c5803a1ff16c5378bcc5e4"><div class="ttname"><a href="#a6d3f2465a7c5803a1ff16c5378bcc5e4">range_queries::perSegTree::construct</a></div><div class="ttdeci">std::shared_ptr< Node > construct(const uint32_t &i, const uint32_t &j)</div><div class="ttdoc">Constructing the segment tree with the early passed vector. Every call creates a node to hold the sum...</div><div class="ttdef"><b>Definition</b> <a href="../../d5/d58/persistent__seg__tree__lazy__prop_8cpp_source.html#l00107">persistent_seg_tree_lazy_prop.cpp:107</a></div></div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1per_seg_tree_html_a8ff495d2f389b4aaa54449c26c6078f3"><div class="ttname"><a href="#a8ff495d2f389b4aaa54449c26c6078f3">range_queries::perSegTree::vec</a></div><div class="ttdeci">std::vector< int64_t > vec</div><div class="ttdef"><b>Definition</b> <a href="../../d5/d58/persistent__seg__tree__lazy__prop_8cpp_source.html#l00058">persistent_seg_tree_lazy_prop.cpp:58</a></div></div>
|
||||
</div><!-- fragment -->
|
||||
</div>
|
||||
</div>
|
||||
@@ -250,22 +250,22 @@ Private Attributes</h2></td></tr>
|
||||
</dl>
|
||||
<dl class="section return"><dt>Returns</dt><dd>pointer to the newly created node </dd></dl>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d5/d58/persistent__seg__tree__lazy__prop_8cpp_source.html#l00106">106</a> of file <a class="el" href="../../d5/d58/persistent__seg__tree__lazy__prop_8cpp_source.html">persistent_seg_tree_lazy_prop.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 106</span> {</div>
|
||||
<div class="line"><span class="lineno"> 107</span> <span class="keyword">auto</span> newNode = std::make_shared<Node>(<a class="code hl_class" href="../../d5/d66/classrange__queries_1_1per_seg_tree_1_1_node.html">Node</a>());</div>
|
||||
<div class="line"><span class="lineno"> 108</span> <span class="keywordflow">if</span> (i == j) {</div>
|
||||
<div class="line"><span class="lineno"> 109</span> newNode->val = <a class="code hl_variable" href="#a8ff495d2f389b4aaa54449c26c6078f3">vec</a>[i];</div>
|
||||
<div class="line"><span class="lineno"> 110</span> } <span class="keywordflow">else</span> {</div>
|
||||
<div class="line"><span class="lineno"> 111</span> uint32_t mid = i + (j - i) / 2;</div>
|
||||
<div class="line"><span class="lineno"> 112</span> <span class="keyword">auto</span> leftt = <a class="code hl_function" href="#a6d3f2465a7c5803a1ff16c5378bcc5e4">construct</a>(i, mid);</div>
|
||||
<div class="line"><span class="lineno"> 113</span> <span class="keyword">auto</span> right = <a class="code hl_function" href="#a6d3f2465a7c5803a1ff16c5378bcc5e4">construct</a>(mid + 1, j);</div>
|
||||
<div class="line"><span class="lineno"> 114</span> newNode->val = leftt->val + right->val;</div>
|
||||
<div class="line"><span class="lineno"> 115</span> newNode->left = leftt;</div>
|
||||
<div class="line"><span class="lineno"> 116</span> newNode->right = right;</div>
|
||||
<div class="line"><span class="lineno"> 117</span> }</div>
|
||||
<div class="line"><span class="lineno"> 118</span> <span class="keywordflow">return</span> newNode;</div>
|
||||
<div class="line"><span class="lineno"> 119</span> }</div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1per_seg_tree_1_1_node_html"><div class="ttname"><a href="../../d5/d66/classrange__queries_1_1per_seg_tree_1_1_node.html">range_queries::perSegTree::Node</a></div><div class="ttdef"><b>Definition</b> <a href="../../d5/d58/persistent__seg__tree__lazy__prop_8cpp_source.html#l00041">persistent_seg_tree_lazy_prop.cpp:41</a></div></div>
|
||||
<p class="definition">Definition at line <a class="el" href="../../d5/d58/persistent__seg__tree__lazy__prop_8cpp_source.html#l00107">107</a> of file <a class="el" href="../../d5/d58/persistent__seg__tree__lazy__prop_8cpp_source.html">persistent_seg_tree_lazy_prop.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 107</span> {</div>
|
||||
<div class="line"><span class="lineno"> 108</span> <span class="keyword">auto</span> newNode = std::make_shared<Node>(<a class="code hl_class" href="../../d5/d66/classrange__queries_1_1per_seg_tree_1_1_node.html">Node</a>());</div>
|
||||
<div class="line"><span class="lineno"> 109</span> <span class="keywordflow">if</span> (i == j) {</div>
|
||||
<div class="line"><span class="lineno"> 110</span> newNode->val = <a class="code hl_variable" href="#a8ff495d2f389b4aaa54449c26c6078f3">vec</a>[i];</div>
|
||||
<div class="line"><span class="lineno"> 111</span> } <span class="keywordflow">else</span> {</div>
|
||||
<div class="line"><span class="lineno"> 112</span> uint32_t mid = i + (j - i) / 2;</div>
|
||||
<div class="line"><span class="lineno"> 113</span> <span class="keyword">auto</span> leftt = <a class="code hl_function" href="#a6d3f2465a7c5803a1ff16c5378bcc5e4">construct</a>(i, mid);</div>
|
||||
<div class="line"><span class="lineno"> 114</span> <span class="keyword">auto</span> right = <a class="code hl_function" href="#a6d3f2465a7c5803a1ff16c5378bcc5e4">construct</a>(mid + 1, j);</div>
|
||||
<div class="line"><span class="lineno"> 115</span> newNode->val = leftt->val + right->val;</div>
|
||||
<div class="line"><span class="lineno"> 116</span> newNode->left = leftt;</div>
|
||||
<div class="line"><span class="lineno"> 117</span> newNode->right = right;</div>
|
||||
<div class="line"><span class="lineno"> 118</span> }</div>
|
||||
<div class="line"><span class="lineno"> 119</span> <span class="keywordflow">return</span> newNode;</div>
|
||||
<div class="line"><span class="lineno"> 120</span> }</div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1per_seg_tree_1_1_node_html"><div class="ttname"><a href="../../d5/d66/classrange__queries_1_1per_seg_tree_1_1_node.html">range_queries::perSegTree::Node</a></div><div class="ttdef"><b>Definition</b> <a href="../../d5/d58/persistent__seg__tree__lazy__prop_8cpp_source.html#l00042">persistent_seg_tree_lazy_prop.cpp:42</a></div></div>
|
||||
</div><!-- fragment -->
|
||||
</div>
|
||||
</div>
|
||||
@@ -312,21 +312,21 @@ Private Attributes</h2></td></tr>
|
||||
</dl>
|
||||
<dl class="section return"><dt>Returns</dt><dd>void </dd></dl>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d5/d58/persistent__seg__tree__lazy__prop_8cpp_source.html#l00083">83</a> of file <a class="el" href="../../d5/d58/persistent__seg__tree__lazy__prop_8cpp_source.html">persistent_seg_tree_lazy_prop.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 84</span> {</div>
|
||||
<div class="line"><span class="lineno"> 85</span> <span class="keywordflow">if</span> (!curr->prop) {</div>
|
||||
<div class="line"><span class="lineno"> 86</span> <span class="keywordflow">return</span>;</div>
|
||||
<div class="line"><span class="lineno"> 87</span> }</div>
|
||||
<div class="line"><span class="lineno"> 88</span> curr->val += (j - i + 1) * curr->prop;</div>
|
||||
<div class="line"><span class="lineno"> 89</span> <span class="keywordflow">if</span> (i != j) {</div>
|
||||
<div class="line"><span class="lineno"> 90</span> curr->left = <a class="code hl_function" href="#a0cec4b77d264521717cf9b0482c45817">newKid</a>(curr->left);</div>
|
||||
<div class="line"><span class="lineno"> 91</span> curr->right = <a class="code hl_function" href="#a0cec4b77d264521717cf9b0482c45817">newKid</a>(curr->right);</div>
|
||||
<div class="line"><span class="lineno"> 92</span> curr->left->prop += curr->prop;</div>
|
||||
<div class="line"><span class="lineno"> 93</span> curr->right->prop += curr->prop;</div>
|
||||
<div class="line"><span class="lineno"> 94</span> }</div>
|
||||
<div class="line"><span class="lineno"> 95</span> curr->prop = 0;</div>
|
||||
<div class="line"><span class="lineno"> 96</span> }</div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1per_seg_tree_html_a0cec4b77d264521717cf9b0482c45817"><div class="ttname"><a href="#a0cec4b77d264521717cf9b0482c45817">range_queries::perSegTree::newKid</a></div><div class="ttdeci">std::shared_ptr< Node > newKid(std::shared_ptr< Node > const &curr)</div><div class="ttdoc">Creating a new node with the same values of curr node.</div><div class="ttdef"><b>Definition</b> <a href="../../d5/d58/persistent__seg__tree__lazy__prop_8cpp_source.html#l00065">persistent_seg_tree_lazy_prop.cpp:65</a></div></div>
|
||||
<p class="definition">Definition at line <a class="el" href="../../d5/d58/persistent__seg__tree__lazy__prop_8cpp_source.html#l00084">84</a> of file <a class="el" href="../../d5/d58/persistent__seg__tree__lazy__prop_8cpp_source.html">persistent_seg_tree_lazy_prop.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 85</span> {</div>
|
||||
<div class="line"><span class="lineno"> 86</span> <span class="keywordflow">if</span> (!curr->prop) {</div>
|
||||
<div class="line"><span class="lineno"> 87</span> <span class="keywordflow">return</span>;</div>
|
||||
<div class="line"><span class="lineno"> 88</span> }</div>
|
||||
<div class="line"><span class="lineno"> 89</span> curr->val += (j - i + 1) * curr->prop;</div>
|
||||
<div class="line"><span class="lineno"> 90</span> <span class="keywordflow">if</span> (i != j) {</div>
|
||||
<div class="line"><span class="lineno"> 91</span> curr->left = <a class="code hl_function" href="#a0cec4b77d264521717cf9b0482c45817">newKid</a>(curr->left);</div>
|
||||
<div class="line"><span class="lineno"> 92</span> curr->right = <a class="code hl_function" href="#a0cec4b77d264521717cf9b0482c45817">newKid</a>(curr->right);</div>
|
||||
<div class="line"><span class="lineno"> 93</span> curr->left->prop += curr->prop;</div>
|
||||
<div class="line"><span class="lineno"> 94</span> curr->right->prop += curr->prop;</div>
|
||||
<div class="line"><span class="lineno"> 95</span> }</div>
|
||||
<div class="line"><span class="lineno"> 96</span> curr->prop = 0;</div>
|
||||
<div class="line"><span class="lineno"> 97</span> }</div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1per_seg_tree_html_a0cec4b77d264521717cf9b0482c45817"><div class="ttname"><a href="#a0cec4b77d264521717cf9b0482c45817">range_queries::perSegTree::newKid</a></div><div class="ttdeci">std::shared_ptr< Node > newKid(std::shared_ptr< Node > const &curr)</div><div class="ttdoc">Creating a new node with the same values of curr node.</div><div class="ttdef"><b>Definition</b> <a href="../../d5/d58/persistent__seg__tree__lazy__prop_8cpp_source.html#l00066">persistent_seg_tree_lazy_prop.cpp:66</a></div></div>
|
||||
</div><!-- fragment -->
|
||||
</div>
|
||||
</div>
|
||||
@@ -362,15 +362,15 @@ Private Attributes</h2></td></tr>
|
||||
</dl>
|
||||
<dl class="section return"><dt>Returns</dt><dd>the new node </dd></dl>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d5/d58/persistent__seg__tree__lazy__prop_8cpp_source.html#l00065">65</a> of file <a class="el" href="../../d5/d58/persistent__seg__tree__lazy__prop_8cpp_source.html">persistent_seg_tree_lazy_prop.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 65</span> {</div>
|
||||
<div class="line"><span class="lineno"> 66</span> <span class="keyword">auto</span> newNode = std::make_shared<Node>(<a class="code hl_class" href="../../d5/d66/classrange__queries_1_1per_seg_tree_1_1_node.html">Node</a>());</div>
|
||||
<div class="line"><span class="lineno"> 67</span> newNode->left = curr->left;</div>
|
||||
<div class="line"><span class="lineno"> 68</span> newNode->right = curr->right;</div>
|
||||
<div class="line"><span class="lineno"> 69</span> newNode->prop = curr->prop;</div>
|
||||
<div class="line"><span class="lineno"> 70</span> newNode->val = curr->val;</div>
|
||||
<div class="line"><span class="lineno"> 71</span> <span class="keywordflow">return</span> newNode;</div>
|
||||
<div class="line"><span class="lineno"> 72</span> }</div>
|
||||
<p class="definition">Definition at line <a class="el" href="../../d5/d58/persistent__seg__tree__lazy__prop_8cpp_source.html#l00066">66</a> of file <a class="el" href="../../d5/d58/persistent__seg__tree__lazy__prop_8cpp_source.html">persistent_seg_tree_lazy_prop.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 66</span> {</div>
|
||||
<div class="line"><span class="lineno"> 67</span> <span class="keyword">auto</span> newNode = std::make_shared<Node>(<a class="code hl_class" href="../../d5/d66/classrange__queries_1_1per_seg_tree_1_1_node.html">Node</a>());</div>
|
||||
<div class="line"><span class="lineno"> 68</span> newNode->left = curr->left;</div>
|
||||
<div class="line"><span class="lineno"> 69</span> newNode->right = curr->right;</div>
|
||||
<div class="line"><span class="lineno"> 70</span> newNode->prop = curr->prop;</div>
|
||||
<div class="line"><span class="lineno"> 71</span> newNode->val = curr->val;</div>
|
||||
<div class="line"><span class="lineno"> 72</span> <span class="keywordflow">return</span> newNode;</div>
|
||||
<div class="line"><span class="lineno"> 73</span> }</div>
|
||||
</div><!-- fragment -->
|
||||
</div>
|
||||
</div>
|
||||
@@ -429,21 +429,21 @@ Private Attributes</h2></td></tr>
|
||||
</dl>
|
||||
<dl class="section return"><dt>Returns</dt><dd>sum of elements whose index x satisfies l<=x<=r </dd></dl>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d5/d58/persistent__seg__tree__lazy__prop_8cpp_source.html#l00171">171</a> of file <a class="el" href="../../d5/d58/persistent__seg__tree__lazy__prop_8cpp_source.html">persistent_seg_tree_lazy_prop.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 172</span> {</div>
|
||||
<div class="line"><span class="lineno"> 173</span> <a class="code hl_function" href="#ace7f57935b3bb9446f11c239fd89ae79">lazy</a>(i, j, curr);</div>
|
||||
<div class="line"><span class="lineno"> 174</span> <span class="keywordflow">if</span> (j < l || r < i) {</div>
|
||||
<div class="line"><span class="lineno"> 175</span> <span class="keywordflow">return</span> 0;</div>
|
||||
<div class="line"><span class="lineno"> 176</span> }</div>
|
||||
<div class="line"><span class="lineno"> 177</span> <span class="keywordflow">if</span> (i >= l && j <= r) {</div>
|
||||
<div class="line"><span class="lineno"> 178</span> <span class="keywordflow">return</span> curr->val;</div>
|
||||
<div class="line"><span class="lineno"> 179</span> }</div>
|
||||
<div class="line"><span class="lineno"> 180</span> uint32_t mid = i + (j - i) / 2;</div>
|
||||
<div class="line"><span class="lineno"> 181</span> <span class="keywordflow">return</span> <a class="code hl_function" href="#ae8ae4b1835e5e8aec32f68c5059ed4d4">query</a>(i, mid, l, r, curr->left) +</div>
|
||||
<div class="line"><span class="lineno"> 182</span> <a class="code hl_function" href="#ae8ae4b1835e5e8aec32f68c5059ed4d4">query</a>(mid + 1, j, l, r, curr->right);</div>
|
||||
<div class="line"><span class="lineno"> 183</span> }</div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1per_seg_tree_html_ace7f57935b3bb9446f11c239fd89ae79"><div class="ttname"><a href="#ace7f57935b3bb9446f11c239fd89ae79">range_queries::perSegTree::lazy</a></div><div class="ttdeci">void lazy(const uint32_t &i, const uint32_t &j, std::shared_ptr< Node > const &curr)</div><div class="ttdoc">If there is some value to be propagated to the passed node, value is added to the node and the childr...</div><div class="ttdef"><b>Definition</b> <a href="../../d5/d58/persistent__seg__tree__lazy__prop_8cpp_source.html#l00083">persistent_seg_tree_lazy_prop.cpp:83</a></div></div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1per_seg_tree_html_ae8ae4b1835e5e8aec32f68c5059ed4d4"><div class="ttname"><a href="#ae8ae4b1835e5e8aec32f68c5059ed4d4">range_queries::perSegTree::query</a></div><div class="ttdeci">int64_t query(const uint32_t &i, const uint32_t &j, const uint32_t &l, const uint32_t &r, std::shared_ptr< Node > const &curr)</div><div class="ttdoc">Querying the range from index l to index r, checking at every node if it has some value to be propaga...</div><div class="ttdef"><b>Definition</b> <a href="../../d5/d58/persistent__seg__tree__lazy__prop_8cpp_source.html#l00171">persistent_seg_tree_lazy_prop.cpp:171</a></div></div>
|
||||
<p class="definition">Definition at line <a class="el" href="../../d5/d58/persistent__seg__tree__lazy__prop_8cpp_source.html#l00172">172</a> of file <a class="el" href="../../d5/d58/persistent__seg__tree__lazy__prop_8cpp_source.html">persistent_seg_tree_lazy_prop.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 173</span> {</div>
|
||||
<div class="line"><span class="lineno"> 174</span> <a class="code hl_function" href="#ace7f57935b3bb9446f11c239fd89ae79">lazy</a>(i, j, curr);</div>
|
||||
<div class="line"><span class="lineno"> 175</span> <span class="keywordflow">if</span> (j < l || r < i) {</div>
|
||||
<div class="line"><span class="lineno"> 176</span> <span class="keywordflow">return</span> 0;</div>
|
||||
<div class="line"><span class="lineno"> 177</span> }</div>
|
||||
<div class="line"><span class="lineno"> 178</span> <span class="keywordflow">if</span> (i >= l && j <= r) {</div>
|
||||
<div class="line"><span class="lineno"> 179</span> <span class="keywordflow">return</span> curr->val;</div>
|
||||
<div class="line"><span class="lineno"> 180</span> }</div>
|
||||
<div class="line"><span class="lineno"> 181</span> uint32_t mid = i + (j - i) / 2;</div>
|
||||
<div class="line"><span class="lineno"> 182</span> <span class="keywordflow">return</span> <a class="code hl_function" href="#ae8ae4b1835e5e8aec32f68c5059ed4d4">query</a>(i, mid, l, r, curr->left) +</div>
|
||||
<div class="line"><span class="lineno"> 183</span> <a class="code hl_function" href="#ae8ae4b1835e5e8aec32f68c5059ed4d4">query</a>(mid + 1, j, l, r, curr->right);</div>
|
||||
<div class="line"><span class="lineno"> 184</span> }</div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1per_seg_tree_html_ace7f57935b3bb9446f11c239fd89ae79"><div class="ttname"><a href="#ace7f57935b3bb9446f11c239fd89ae79">range_queries::perSegTree::lazy</a></div><div class="ttdeci">void lazy(const uint32_t &i, const uint32_t &j, std::shared_ptr< Node > const &curr)</div><div class="ttdoc">If there is some value to be propagated to the passed node, value is added to the node and the childr...</div><div class="ttdef"><b>Definition</b> <a href="../../d5/d58/persistent__seg__tree__lazy__prop_8cpp_source.html#l00084">persistent_seg_tree_lazy_prop.cpp:84</a></div></div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1per_seg_tree_html_ae8ae4b1835e5e8aec32f68c5059ed4d4"><div class="ttname"><a href="#ae8ae4b1835e5e8aec32f68c5059ed4d4">range_queries::perSegTree::query</a></div><div class="ttdeci">int64_t query(const uint32_t &i, const uint32_t &j, const uint32_t &l, const uint32_t &r, std::shared_ptr< Node > const &curr)</div><div class="ttdoc">Querying the range from index l to index r, checking at every node if it has some value to be propaga...</div><div class="ttdef"><b>Definition</b> <a href="../../d5/d58/persistent__seg__tree__lazy__prop_8cpp_source.html#l00172">persistent_seg_tree_lazy_prop.cpp:172</a></div></div>
|
||||
</div><!-- fragment -->
|
||||
</div>
|
||||
</div>
|
||||
@@ -490,10 +490,10 @@ Private Attributes</h2></td></tr>
|
||||
</dl>
|
||||
<dl class="section return"><dt>Returns</dt><dd>sum of elements whose index x satisfies l<=x<=r </dd></dl>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d5/d58/persistent__seg__tree__lazy__prop_8cpp_source.html#l00241">241</a> of file <a class="el" href="../../d5/d58/persistent__seg__tree__lazy__prop_8cpp_source.html">persistent_seg_tree_lazy_prop.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 246</span> {</div>
|
||||
<div class="line"><span class="lineno"> 247</span> <span class="keywordflow">return</span> <a class="code hl_function" href="#ae8ae4b1835e5e8aec32f68c5059ed4d4">query</a>(0, n - 1, l, r, <a class="code hl_variable" href="#a1eac9cf0613dfc8e2b0195009dd5c9d5">ptrs</a>[version]);</div>
|
||||
<div class="line"><span class="lineno"> 248</span> }</div>
|
||||
<p class="definition">Definition at line <a class="el" href="../../d5/d58/persistent__seg__tree__lazy__prop_8cpp_source.html#l00242">242</a> of file <a class="el" href="../../d5/d58/persistent__seg__tree__lazy__prop_8cpp_source.html">persistent_seg_tree_lazy_prop.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 247</span> {</div>
|
||||
<div class="line"><span class="lineno"> 248</span> <span class="keywordflow">return</span> <a class="code hl_function" href="#ae8ae4b1835e5e8aec32f68c5059ed4d4">query</a>(0, n - 1, l, r, <a class="code hl_variable" href="#a1eac9cf0613dfc8e2b0195009dd5c9d5">ptrs</a>[version]);</div>
|
||||
<div class="line"><span class="lineno"> 249</span> }</div>
|
||||
</div><!-- fragment -->
|
||||
</div>
|
||||
</div>
|
||||
@@ -523,10 +523,10 @@ Private Attributes</h2></td></tr>
|
||||
<p>Getting the number of versions after updates so far which is equal to the size of the pointers vector. </p>
|
||||
<dl class="section return"><dt>Returns</dt><dd>the number of versions </dd></dl>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d5/d58/persistent__seg__tree__lazy__prop_8cpp_source.html#l00255">255</a> of file <a class="el" href="../../d5/d58/persistent__seg__tree__lazy__prop_8cpp_source.html">persistent_seg_tree_lazy_prop.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 258</span> {</div>
|
||||
<div class="line"><span class="lineno"> 259</span> <span class="keywordflow">return</span> <a class="code hl_variable" href="#a1eac9cf0613dfc8e2b0195009dd5c9d5">ptrs</a>.size();</div>
|
||||
<div class="line"><span class="lineno"> 260</span> }</div>
|
||||
<p class="definition">Definition at line <a class="el" href="../../d5/d58/persistent__seg__tree__lazy__prop_8cpp_source.html#l00256">256</a> of file <a class="el" href="../../d5/d58/persistent__seg__tree__lazy__prop_8cpp_source.html">persistent_seg_tree_lazy_prop.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 259</span> {</div>
|
||||
<div class="line"><span class="lineno"> 260</span> <span class="keywordflow">return</span> <a class="code hl_variable" href="#a1eac9cf0613dfc8e2b0195009dd5c9d5">ptrs</a>.size();</div>
|
||||
<div class="line"><span class="lineno"> 261</span> }</div>
|
||||
</div><!-- fragment -->
|
||||
</div>
|
||||
</div>
|
||||
@@ -591,26 +591,26 @@ Private Attributes</h2></td></tr>
|
||||
</dl>
|
||||
<dl class="section return"><dt>Returns</dt><dd>pointer to the current newly created node </dd></dl>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d5/d58/persistent__seg__tree__lazy__prop_8cpp_source.html#l00135">135</a> of file <a class="el" href="../../d5/d58/persistent__seg__tree__lazy__prop_8cpp_source.html">persistent_seg_tree_lazy_prop.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 138</span> {</div>
|
||||
<div class="line"><span class="lineno"> 139</span> <a class="code hl_function" href="#ace7f57935b3bb9446f11c239fd89ae79">lazy</a>(i, j, curr);</div>
|
||||
<div class="line"><span class="lineno"> 140</span> <span class="keywordflow">if</span> (i >= l && j <= r) {</div>
|
||||
<div class="line"><span class="lineno"> 141</span> std::shared_ptr<Node> newNode = <a class="code hl_function" href="#a0cec4b77d264521717cf9b0482c45817">newKid</a>(curr);</div>
|
||||
<div class="line"><span class="lineno"> 142</span> newNode->prop += value;</div>
|
||||
<div class="line"><span class="lineno"> 143</span> <a class="code hl_function" href="#ace7f57935b3bb9446f11c239fd89ae79">lazy</a>(i, j, newNode);</div>
|
||||
<div class="line"><span class="lineno"> 144</span> <span class="keywordflow">return</span> newNode;</div>
|
||||
<div class="line"><span class="lineno"> 145</span> }</div>
|
||||
<div class="line"><span class="lineno"> 146</span> <span class="keywordflow">if</span> (i > r || j < l) {</div>
|
||||
<div class="line"><span class="lineno"> 147</span> <span class="keywordflow">return</span> curr;</div>
|
||||
<div class="line"><span class="lineno"> 148</span> }</div>
|
||||
<div class="line"><span class="lineno"> 149</span> <span class="keyword">auto</span> newNode = std::make_shared<Node>(<a class="code hl_class" href="../../d5/d66/classrange__queries_1_1per_seg_tree_1_1_node.html">Node</a>());</div>
|
||||
<div class="line"><span class="lineno"> 150</span> uint32_t mid = i + (j - i) / 2;</div>
|
||||
<div class="line"><span class="lineno"> 151</span> newNode->left = <a class="code hl_function" href="#a24487eda25123bc4d112e8430821a6c6">update</a>(i, mid, l, r, value, curr->left);</div>
|
||||
<div class="line"><span class="lineno"> 152</span> newNode->right = <a class="code hl_function" href="#a24487eda25123bc4d112e8430821a6c6">update</a>(mid + 1, j, l, r, value, curr->right);</div>
|
||||
<div class="line"><span class="lineno"> 153</span> newNode->val = newNode->left->val + newNode->right->val;</div>
|
||||
<div class="line"><span class="lineno"> 154</span> <span class="keywordflow">return</span> newNode;</div>
|
||||
<div class="line"><span class="lineno"> 155</span> }</div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1per_seg_tree_html_a24487eda25123bc4d112e8430821a6c6"><div class="ttname"><a href="#a24487eda25123bc4d112e8430821a6c6">range_queries::perSegTree::update</a></div><div class="ttdeci">std::shared_ptr< Node > update(const uint32_t &i, const uint32_t &j, const uint32_t &l, const uint32_t &r, const int64_t &value, std::shared_ptr< Node > const &curr)</div><div class="ttdoc">Doing range update, checking at every node if it has some value to be propagated. All nodes affected ...</div><div class="ttdef"><b>Definition</b> <a href="../../d5/d58/persistent__seg__tree__lazy__prop_8cpp_source.html#l00135">persistent_seg_tree_lazy_prop.cpp:135</a></div></div>
|
||||
<p class="definition">Definition at line <a class="el" href="../../d5/d58/persistent__seg__tree__lazy__prop_8cpp_source.html#l00136">136</a> of file <a class="el" href="../../d5/d58/persistent__seg__tree__lazy__prop_8cpp_source.html">persistent_seg_tree_lazy_prop.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 139</span> {</div>
|
||||
<div class="line"><span class="lineno"> 140</span> <a class="code hl_function" href="#ace7f57935b3bb9446f11c239fd89ae79">lazy</a>(i, j, curr);</div>
|
||||
<div class="line"><span class="lineno"> 141</span> <span class="keywordflow">if</span> (i >= l && j <= r) {</div>
|
||||
<div class="line"><span class="lineno"> 142</span> std::shared_ptr<Node> newNode = <a class="code hl_function" href="#a0cec4b77d264521717cf9b0482c45817">newKid</a>(curr);</div>
|
||||
<div class="line"><span class="lineno"> 143</span> newNode->prop += value;</div>
|
||||
<div class="line"><span class="lineno"> 144</span> <a class="code hl_function" href="#ace7f57935b3bb9446f11c239fd89ae79">lazy</a>(i, j, newNode);</div>
|
||||
<div class="line"><span class="lineno"> 145</span> <span class="keywordflow">return</span> newNode;</div>
|
||||
<div class="line"><span class="lineno"> 146</span> }</div>
|
||||
<div class="line"><span class="lineno"> 147</span> <span class="keywordflow">if</span> (i > r || j < l) {</div>
|
||||
<div class="line"><span class="lineno"> 148</span> <span class="keywordflow">return</span> curr;</div>
|
||||
<div class="line"><span class="lineno"> 149</span> }</div>
|
||||
<div class="line"><span class="lineno"> 150</span> <span class="keyword">auto</span> newNode = std::make_shared<Node>(<a class="code hl_class" href="../../d5/d66/classrange__queries_1_1per_seg_tree_1_1_node.html">Node</a>());</div>
|
||||
<div class="line"><span class="lineno"> 151</span> uint32_t mid = i + (j - i) / 2;</div>
|
||||
<div class="line"><span class="lineno"> 152</span> newNode->left = <a class="code hl_function" href="#a24487eda25123bc4d112e8430821a6c6">update</a>(i, mid, l, r, value, curr->left);</div>
|
||||
<div class="line"><span class="lineno"> 153</span> newNode->right = <a class="code hl_function" href="#a24487eda25123bc4d112e8430821a6c6">update</a>(mid + 1, j, l, r, value, curr->right);</div>
|
||||
<div class="line"><span class="lineno"> 154</span> newNode->val = newNode->left->val + newNode->right->val;</div>
|
||||
<div class="line"><span class="lineno"> 155</span> <span class="keywordflow">return</span> newNode;</div>
|
||||
<div class="line"><span class="lineno"> 156</span> }</div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1per_seg_tree_html_a24487eda25123bc4d112e8430821a6c6"><div class="ttname"><a href="#a24487eda25123bc4d112e8430821a6c6">range_queries::perSegTree::update</a></div><div class="ttdeci">std::shared_ptr< Node > update(const uint32_t &i, const uint32_t &j, const uint32_t &l, const uint32_t &r, const int64_t &value, std::shared_ptr< Node > const &curr)</div><div class="ttdoc">Doing range update, checking at every node if it has some value to be propagated. All nodes affected ...</div><div class="ttdef"><b>Definition</b> <a href="../../d5/d58/persistent__seg__tree__lazy__prop_8cpp_source.html#l00136">persistent_seg_tree_lazy_prop.cpp:136</a></div></div>
|
||||
</div><!-- fragment -->
|
||||
</div>
|
||||
</div>
|
||||
@@ -657,13 +657,13 @@ Private Attributes</h2></td></tr>
|
||||
</dl>
|
||||
<dl class="section return"><dt>Returns</dt><dd>void </dd></dl>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d5/d58/persistent__seg__tree__lazy__prop_8cpp_source.html#l00219">219</a> of file <a class="el" href="../../d5/d58/persistent__seg__tree__lazy__prop_8cpp_source.html">persistent_seg_tree_lazy_prop.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 223</span> {</div>
|
||||
<div class="line"><span class="lineno"> 224</span> <a class="code hl_variable" href="#a1eac9cf0613dfc8e2b0195009dd5c9d5">ptrs</a>.push_back(<a class="code hl_function" href="#a24487eda25123bc4d112e8430821a6c6">update</a>(</div>
|
||||
<div class="line"><span class="lineno"> 225</span> 0, n - 1, l, r, value,</div>
|
||||
<div class="line"><span class="lineno"> 226</span> <a class="code hl_variable" href="#a1eac9cf0613dfc8e2b0195009dd5c9d5">ptrs</a>[<a class="code hl_variable" href="#a1eac9cf0613dfc8e2b0195009dd5c9d5">ptrs</a>.size() -</div>
|
||||
<div class="line"><span class="lineno"> 227</span> 1])); <span class="comment">// saving the root pointer to the new segment tree</span></div>
|
||||
<div class="line"><span class="lineno"> 228</span> }</div>
|
||||
<p class="definition">Definition at line <a class="el" href="../../d5/d58/persistent__seg__tree__lazy__prop_8cpp_source.html#l00220">220</a> of file <a class="el" href="../../d5/d58/persistent__seg__tree__lazy__prop_8cpp_source.html">persistent_seg_tree_lazy_prop.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 224</span> {</div>
|
||||
<div class="line"><span class="lineno"> 225</span> <a class="code hl_variable" href="#a1eac9cf0613dfc8e2b0195009dd5c9d5">ptrs</a>.push_back(<a class="code hl_function" href="#a24487eda25123bc4d112e8430821a6c6">update</a>(</div>
|
||||
<div class="line"><span class="lineno"> 226</span> 0, n - 1, l, r, value,</div>
|
||||
<div class="line"><span class="lineno"> 227</span> <a class="code hl_variable" href="#a1eac9cf0613dfc8e2b0195009dd5c9d5">ptrs</a>[<a class="code hl_variable" href="#a1eac9cf0613dfc8e2b0195009dd5c9d5">ptrs</a>.size() -</div>
|
||||
<div class="line"><span class="lineno"> 228</span> 1])); <span class="comment">// saving the root pointer to the new segment tree</span></div>
|
||||
<div class="line"><span class="lineno"> 229</span> }</div>
|
||||
</div><!-- fragment -->
|
||||
</div>
|
||||
</div>
|
||||
@@ -688,7 +688,7 @@ Private Attributes</h2></td></tr>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d5/d58/persistent__seg__tree__lazy__prop_8cpp_source.html#l00052">52</a> of file <a class="el" href="../../d5/d58/persistent__seg__tree__lazy__prop_8cpp_source.html">persistent_seg_tree_lazy_prop.cpp</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="../../d5/d58/persistent__seg__tree__lazy__prop_8cpp_source.html#l00053">53</a> of file <a class="el" href="../../d5/d58/persistent__seg__tree__lazy__prop_8cpp_source.html">persistent_seg_tree_lazy_prop.cpp</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@@ -714,8 +714,8 @@ Private Attributes</h2></td></tr>
|
||||
|
||||
<p>number of elements/leaf nodes in the segment tree </p>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d5/d58/persistent__seg__tree__lazy__prop_8cpp_source.html#l00054">54</a> of file <a class="el" href="../../d5/d58/persistent__seg__tree__lazy__prop_8cpp_source.html">persistent_seg_tree_lazy_prop.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 54</span>{}; </div>
|
||||
<p class="definition">Definition at line <a class="el" href="../../d5/d58/persistent__seg__tree__lazy__prop_8cpp_source.html#l00055">55</a> of file <a class="el" href="../../d5/d58/persistent__seg__tree__lazy__prop_8cpp_source.html">persistent_seg_tree_lazy_prop.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 55</span>{}; </div>
|
||||
</div><!-- fragment -->
|
||||
</div>
|
||||
</div>
|
||||
@@ -740,8 +740,8 @@ Private Attributes</h2></td></tr>
|
||||
</div><div class="memdoc">
|
||||
<p>ptrs[i] holds a root pointer to the segment tree after the ith update. ptrs[0] holds a root pointer to the segment tree before any updates </p>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d5/d58/persistent__seg__tree__lazy__prop_8cpp_source.html#l00057">57</a> of file <a class="el" href="../../d5/d58/persistent__seg__tree__lazy__prop_8cpp_source.html">persistent_seg_tree_lazy_prop.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 57</span>{}; </div>
|
||||
<p class="definition">Definition at line <a class="el" href="../../d5/d58/persistent__seg__tree__lazy__prop_8cpp_source.html#l00058">58</a> of file <a class="el" href="../../d5/d58/persistent__seg__tree__lazy__prop_8cpp_source.html">persistent_seg_tree_lazy_prop.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 58</span>{}; </div>
|
||||
</div><!-- fragment -->
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -186,7 +186,7 @@ Variables</h2></td></tr>
|
||||
<p>for std::vector</p>
|
||||
<p>Machine learning algorithms.</p>
|
||||
<p>A* is an informed search algorithm, or a best-first search, meaning that it is formulated in terms of weighted graphs: starting from a specific starting node of a graph (initial state), it aims to find a path to the given goal node having the smallest cost (least distance travelled, shortest time, etc.). It evaluates by maintaining a tree of paths originating at the start node and extending those paths one edge at a time until it reaches the final state. The weighted edges (or cost) is evaluated on two factors, G score (cost required from starting node or initial state to current state) and H score (cost required from current state to final state). The F(state), then is evaluated as: F(state) = G(state) + H(state).</p>
|
||||
<p>To solve the given search with shortest cost or path possible is to inspect values having minimum F(state). </p><dl class="section author"><dt>Author</dt><dd><a href="https://github.com/AshishYUO" target="_blank">Ashish Daulatabad</a> for <span class="tt">std::reverse</span> function for <span class="tt">std::array</span>, representing <span class="tt">EightPuzzle</span> board for <span class="tt">assert</span> for <span class="tt">std::function</span> STL for IO operations for <span class="tt">std::map</span> STL for <span class="tt">std::shared_ptr</span> for <span class="tt">std::set</span> STL for <span class="tt">std::vector</span> STL</dd></dl>
|
||||
<p>To solve the given search with shortest cost or path possible is to inspect values having minimum F(state). </p><dl class="section author"><dt>Author</dt><dd><a href="https://github.com/AshishYUO" target="_blank">Ashish Daulatabad</a> for <span class="tt">std::reverse</span> function for <span class="tt">std::array</span>, representing <span class="tt">EightPuzzle</span> board for <span class="tt">assert</span> for <span class="tt">std::uint32_t</span> for <span class="tt">std::function</span> STL for IO operations for <span class="tt">std::map</span> STL for <span class="tt">std::shared_ptr</span> for <span class="tt">std::set</span> STL for <span class="tt">std::vector</span> STL</dd></dl>
|
||||
<p>Machine learning algorithms</p>
|
||||
<p>for std::transform and std::sort for assert for std::pow and std::sqrt for std::cout for std::accumulate for std::unordered_map</p>
|
||||
<p>Machine learning algorithms </p>
|
||||
|
||||
@@ -167,7 +167,7 @@ class range_queries::heavy_light_decomposition::SG< X ></div><p>Segment <a
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00254">254</a> of file <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html">heavy_light_decomposition.cpp</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00257">257</a> of file <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html">heavy_light_decomposition.cpp</a>.</p>
|
||||
</div><a name="doc-constructors" id="doc-constructors"></a><h2 id="header-doc-constructors" class="groupheader">Constructor & Destructor Documentation</h2>
|
||||
<a id="afba5c1225ba04c0025c7786c09ff28f1" name="afba5c1225ba04c0025c7786c09ff28f1"></a>
|
||||
<h2 class="memtitle"><span class="permalink"><a href="#afba5c1225ba04c0025c7786c09ff28f1">◆ </a></span>SG()</h2>
|
||||
@@ -203,14 +203,14 @@ template<typename X> </div>
|
||||
</dl>
|
||||
<dl class="section return"><dt>Returns</dt><dd>void </dd></dl>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00282">282</a> of file <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html">heavy_light_decomposition.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 282</span> {</div>
|
||||
<div class="line"><span class="lineno"> 283</span> <a class="code hl_variable" href="#ac6d912bbfafa3a7509f66bbc1729ca25">s_size</a> = <a class="code hl_class" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html">size</a>;</div>
|
||||
<div class="line"><span class="lineno"> 284</span> <a class="code hl_variable" href="#afbf8a9cb9449d5ca844f4e141a801e6a">s_tree</a>.assign(2 * <a class="code hl_variable" href="#ac6d912bbfafa3a7509f66bbc1729ca25">s_size</a>, 0<a class="code hl_class" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html">ll</a>);</div>
|
||||
<div class="line"><span class="lineno"> 285</span> }</div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1heavy__light__decomposition_1_1_s_g_html"><div class="ttname"><a href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html">range_queries::heavy_light_decomposition::SG</a></div><div class="ttdoc">Segment Tree, to store heavy chains.</div><div class="ttdef"><b>Definition</b> <a href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00254">heavy_light_decomposition.cpp:254</a></div></div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1heavy__light__decomposition_1_1_s_g_html_ac6d912bbfafa3a7509f66bbc1729ca25"><div class="ttname"><a href="#ac6d912bbfafa3a7509f66bbc1729ca25">range_queries::heavy_light_decomposition::SG::s_size</a></div><div class="ttdeci">int s_size</div><div class="ttdoc">number of leaves in the segment tree</div><div class="ttdef"><b>Definition</b> <a href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00263">heavy_light_decomposition.cpp:263</a></div></div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1heavy__light__decomposition_1_1_s_g_html_afbf8a9cb9449d5ca844f4e141a801e6a"><div class="ttname"><a href="#afbf8a9cb9449d5ca844f4e141a801e6a">range_queries::heavy_light_decomposition::SG::s_tree</a></div><div class="ttdeci">std::vector< X > s_tree</div><div class="ttdoc">Everything here is private, and can only be accessed through the methods, in the derived class (HLD)</div><div class="ttdef"><b>Definition</b> <a href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00262">heavy_light_decomposition.cpp:262</a></div></div>
|
||||
<p class="definition">Definition at line <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00286">286</a> of file <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html">heavy_light_decomposition.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 286</span> {</div>
|
||||
<div class="line"><span class="lineno"> 287</span> <a class="code hl_variable" href="#ac6d912bbfafa3a7509f66bbc1729ca25">s_size</a> = <a class="code hl_class" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html">size</a>;</div>
|
||||
<div class="line"><span class="lineno"> 288</span> <a class="code hl_variable" href="#afbf8a9cb9449d5ca844f4e141a801e6a">s_tree</a>.assign(2 * <a class="code hl_variable" href="#ac6d912bbfafa3a7509f66bbc1729ca25">s_size</a>, 0<a class="code hl_class" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html">ll</a>);</div>
|
||||
<div class="line"><span class="lineno"> 289</span> }</div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1heavy__light__decomposition_1_1_s_g_html"><div class="ttname"><a href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html">range_queries::heavy_light_decomposition::SG</a></div><div class="ttdoc">Segment Tree, to store heavy chains.</div><div class="ttdef"><b>Definition</b> <a href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00257">heavy_light_decomposition.cpp:257</a></div></div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1heavy__light__decomposition_1_1_s_g_html_ac6d912bbfafa3a7509f66bbc1729ca25"><div class="ttname"><a href="#ac6d912bbfafa3a7509f66bbc1729ca25">range_queries::heavy_light_decomposition::SG::s_size</a></div><div class="ttdeci">int s_size</div><div class="ttdoc">number of leaves in the segment tree</div><div class="ttdef"><b>Definition</b> <a href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00266">heavy_light_decomposition.cpp:266</a></div></div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1heavy__light__decomposition_1_1_s_g_html_afbf8a9cb9449d5ca844f4e141a801e6a"><div class="ttname"><a href="#afbf8a9cb9449d5ca844f4e141a801e6a">range_queries::heavy_light_decomposition::SG::s_tree</a></div><div class="ttdeci">std::vector< X > s_tree</div><div class="ttdoc">Everything here is private, and can only be accessed through the methods, in the derived class (HLD)</div><div class="ttdef"><b>Definition</b> <a href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00265">heavy_light_decomposition.cpp:265</a></div></div>
|
||||
</div><!-- fragment -->
|
||||
</div>
|
||||
</div>
|
||||
@@ -254,8 +254,8 @@ template<typename X> </div>
|
||||
</dl>
|
||||
<dl class="section return"><dt>Returns</dt><dd>the combined result </dd></dl>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00274">274</a> of file <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html">heavy_light_decomposition.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 274</span>{ <span class="keywordflow">return</span> <a class="code hl_class" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html">lhs</a> + <a class="code hl_class" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html">rhs</a>; }</div>
|
||||
<p class="definition">Definition at line <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00278">278</a> of file <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html">heavy_light_decomposition.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 278</span>{ <span class="keywordflow">return</span> <a class="code hl_class" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html">lhs</a> + <a class="code hl_class" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html">rhs</a>; }</div>
|
||||
</div><!-- fragment -->
|
||||
</div>
|
||||
</div>
|
||||
@@ -298,21 +298,21 @@ template<typename X> </div>
|
||||
</dl>
|
||||
<dl class="section return"><dt>Returns</dt><dd>void </dd></dl>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00305">305</a> of file <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html">heavy_light_decomposition.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 305</span> {</div>
|
||||
<div class="line"><span class="lineno"> 306</span> <a class="code hl_class" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html">X</a> <a class="code hl_class" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html">lhs</a> = <a class="code hl_variable" href="#aa7f93971a9f891e0bbb7023081f379d5">sret_init</a>, <a class="code hl_class" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html">rhs</a> = <a class="code hl_variable" href="#aa7f93971a9f891e0bbb7023081f379d5">sret_init</a>;</div>
|
||||
<div class="line"><span class="lineno"> 307</span> <span class="keywordflow">for</span> (<a class="code hl_class" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html">l</a> += <a class="code hl_variable" href="#ac6d912bbfafa3a7509f66bbc1729ca25">s_size</a>, <a class="code hl_class" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html">r</a> += <a class="code hl_variable" href="#ac6d912bbfafa3a7509f66bbc1729ca25">s_size</a> + 1; <a class="code hl_class" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html">l < r; l ></a>>= 1, <a class="code hl_class" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html">r</a> >>= 1) {</div>
|
||||
<div class="line"><span class="lineno"> 308</span> <span class="keywordflow">if</span> (<a class="code hl_class" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html">l</a> & 1) {</div>
|
||||
<div class="line"><span class="lineno"> 309</span> <a class="code hl_class" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html">lhs</a> = <a class="code hl_function" href="#a41c733f5f5e262b308f7cb95c88c1e74">combine</a>(<a class="code hl_class" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html">lhs</a>, <a class="code hl_variable" href="#afbf8a9cb9449d5ca844f4e141a801e6a">s_tree</a>[<a class="code hl_class" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html">l</a>++]);</div>
|
||||
<div class="line"><span class="lineno"> 310</span> }</div>
|
||||
<div class="line"><span class="lineno"> 311</span> <span class="keywordflow">if</span> (<a class="code hl_class" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html">r</a> & 1) {</div>
|
||||
<div class="line"><span class="lineno"> 312</span> <a class="code hl_class" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html">rhs</a> = <a class="code hl_function" href="#a41c733f5f5e262b308f7cb95c88c1e74">combine</a>(<a class="code hl_variable" href="#afbf8a9cb9449d5ca844f4e141a801e6a">s_tree</a>[--<a class="code hl_class" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html">r</a>], <a class="code hl_class" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html">rhs</a>);</div>
|
||||
<div class="line"><span class="lineno"> 313</span> }</div>
|
||||
<div class="line"><span class="lineno"> 314</span> }</div>
|
||||
<div class="line"><span class="lineno"> 315</span> <span class="keywordflow">return</span> <a class="code hl_function" href="#a41c733f5f5e262b308f7cb95c88c1e74">combine</a>(<a class="code hl_class" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html">lhs</a>, <a class="code hl_class" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html">rhs</a>);</div>
|
||||
<div class="line"><span class="lineno"> 316</span> }</div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1heavy__light__decomposition_1_1_s_g_html_a41c733f5f5e262b308f7cb95c88c1e74"><div class="ttname"><a href="#a41c733f5f5e262b308f7cb95c88c1e74">range_queries::heavy_light_decomposition::SG::combine</a></div><div class="ttdeci">X combine(X lhs, X rhs)</div><div class="ttdoc">Function that specifies the type of operation involved when segments are combined.</div><div class="ttdef"><b>Definition</b> <a href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00274">heavy_light_decomposition.cpp:274</a></div></div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1heavy__light__decomposition_1_1_s_g_html_aa7f93971a9f891e0bbb7023081f379d5"><div class="ttname"><a href="#aa7f93971a9f891e0bbb7023081f379d5">range_queries::heavy_light_decomposition::SG::sret_init</a></div><div class="ttdeci">X sret_init</div><div class="ttdoc">inital query return value</div><div class="ttdef"><b>Definition</b> <a href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00264">heavy_light_decomposition.cpp:264</a></div></div>
|
||||
<p class="definition">Definition at line <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00309">309</a> of file <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html">heavy_light_decomposition.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 309</span> {</div>
|
||||
<div class="line"><span class="lineno"> 310</span> <a class="code hl_class" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html">X</a> <a class="code hl_class" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html">lhs</a> = <a class="code hl_variable" href="#aa7f93971a9f891e0bbb7023081f379d5">sret_init</a>, <a class="code hl_class" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html">rhs</a> = <a class="code hl_variable" href="#aa7f93971a9f891e0bbb7023081f379d5">sret_init</a>;</div>
|
||||
<div class="line"><span class="lineno"> 311</span> <span class="keywordflow">for</span> (<a class="code hl_class" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html">l</a> += <a class="code hl_variable" href="#ac6d912bbfafa3a7509f66bbc1729ca25">s_size</a>, <a class="code hl_class" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html">r</a> += <a class="code hl_variable" href="#ac6d912bbfafa3a7509f66bbc1729ca25">s_size</a> + 1; <a class="code hl_class" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html">l < r; l ></a>>= 1, <a class="code hl_class" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html">r</a> >>= 1) {</div>
|
||||
<div class="line"><span class="lineno"> 312</span> <span class="keywordflow">if</span> (<a class="code hl_class" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html">l</a> & 1) {</div>
|
||||
<div class="line"><span class="lineno"> 313</span> <a class="code hl_class" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html">lhs</a> = <a class="code hl_function" href="#a41c733f5f5e262b308f7cb95c88c1e74">combine</a>(<a class="code hl_class" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html">lhs</a>, <a class="code hl_variable" href="#afbf8a9cb9449d5ca844f4e141a801e6a">s_tree</a>[<a class="code hl_class" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html">l</a>++]);</div>
|
||||
<div class="line"><span class="lineno"> 314</span> }</div>
|
||||
<div class="line"><span class="lineno"> 315</span> <span class="keywordflow">if</span> (<a class="code hl_class" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html">r</a> & 1) {</div>
|
||||
<div class="line"><span class="lineno"> 316</span> <a class="code hl_class" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html">rhs</a> = <a class="code hl_function" href="#a41c733f5f5e262b308f7cb95c88c1e74">combine</a>(<a class="code hl_variable" href="#afbf8a9cb9449d5ca844f4e141a801e6a">s_tree</a>[--<a class="code hl_class" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html">r</a>], <a class="code hl_class" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html">rhs</a>);</div>
|
||||
<div class="line"><span class="lineno"> 317</span> }</div>
|
||||
<div class="line"><span class="lineno"> 318</span> }</div>
|
||||
<div class="line"><span class="lineno"> 319</span> <span class="keywordflow">return</span> <a class="code hl_function" href="#a41c733f5f5e262b308f7cb95c88c1e74">combine</a>(<a class="code hl_class" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html">lhs</a>, <a class="code hl_class" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html">rhs</a>);</div>
|
||||
<div class="line"><span class="lineno"> 320</span> }</div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1heavy__light__decomposition_1_1_s_g_html_a41c733f5f5e262b308f7cb95c88c1e74"><div class="ttname"><a href="#a41c733f5f5e262b308f7cb95c88c1e74">range_queries::heavy_light_decomposition::SG::combine</a></div><div class="ttdeci">X combine(X lhs, X rhs)</div><div class="ttdoc">Function that specifies the type of operation involved when segments are combined.</div><div class="ttdef"><b>Definition</b> <a href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00278">heavy_light_decomposition.cpp:278</a></div></div>
|
||||
<div class="ttc" id="aclassrange__queries_1_1heavy__light__decomposition_1_1_s_g_html_aa7f93971a9f891e0bbb7023081f379d5"><div class="ttname"><a href="#aa7f93971a9f891e0bbb7023081f379d5">range_queries::heavy_light_decomposition::SG::sret_init</a></div><div class="ttdeci">X sret_init</div><div class="ttdoc">inital query return value</div><div class="ttdef"><b>Definition</b> <a href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00267">heavy_light_decomposition.cpp:267</a></div></div>
|
||||
</div><!-- fragment -->
|
||||
</div>
|
||||
</div>
|
||||
@@ -355,8 +355,8 @@ template<typename X> </div>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00329">329</a> of file <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html">heavy_light_decomposition.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 329</span>{ <a class="code hl_variable" href="#aa7f93971a9f891e0bbb7023081f379d5">sret_init</a> = <a class="code hl_class" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html">new_sret_init</a>; }</div>
|
||||
<p class="definition">Definition at line <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00334">334</a> of file <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html">heavy_light_decomposition.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 334</span>{ <a class="code hl_variable" href="#aa7f93971a9f891e0bbb7023081f379d5">sret_init</a> = <a class="code hl_class" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html">new_sret_init</a>; }</div>
|
||||
</div><!-- fragment -->
|
||||
</div>
|
||||
</div>
|
||||
@@ -399,12 +399,12 @@ template<typename X> </div>
|
||||
</dl>
|
||||
<dl class="section return"><dt>Returns</dt><dd>void </dd></dl>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00293">293</a> of file <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html">heavy_light_decomposition.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 293</span> {</div>
|
||||
<div class="line"><span class="lineno"> 294</span> <span class="keywordflow">for</span> (<a class="code hl_class" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html">p</a> += <a class="code hl_variable" href="#ac6d912bbfafa3a7509f66bbc1729ca25">s_size</a>; <a class="code hl_class" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html">p</a> > 0; <a class="code hl_class" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html">p</a> >>= 1) {</div>
|
||||
<div class="line"><span class="lineno"> 295</span> <a class="code hl_variable" href="#afbf8a9cb9449d5ca844f4e141a801e6a">s_tree</a>[<a class="code hl_class" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html">p</a>] += <a class="code hl_class" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html">v</a>;</div>
|
||||
<div class="line"><span class="lineno"> 296</span> }</div>
|
||||
<div class="line"><span class="lineno"> 297</span> }</div>
|
||||
<p class="definition">Definition at line <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00297">297</a> of file <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html">heavy_light_decomposition.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 297</span> {</div>
|
||||
<div class="line"><span class="lineno"> 298</span> <span class="keywordflow">for</span> (<a class="code hl_class" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html">p</a> += <a class="code hl_variable" href="#ac6d912bbfafa3a7509f66bbc1729ca25">s_size</a>; <a class="code hl_class" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html">p</a> > 0; <a class="code hl_class" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html">p</a> >>= 1) {</div>
|
||||
<div class="line"><span class="lineno"> 299</span> <a class="code hl_variable" href="#afbf8a9cb9449d5ca844f4e141a801e6a">s_tree</a>[<a class="code hl_class" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html">p</a>] += <a class="code hl_class" href="../../d9/d35/classrange__queries_1_1heavy__light__decomposition_1_1_s_g.html">v</a>;</div>
|
||||
<div class="line"><span class="lineno"> 300</span> }</div>
|
||||
<div class="line"><span class="lineno"> 301</span> }</div>
|
||||
</div><!-- fragment -->
|
||||
</div>
|
||||
</div>
|
||||
@@ -433,7 +433,7 @@ template<typename T> </div>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00265">265</a> of file <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html">heavy_light_decomposition.cpp</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00269">269</a> of file <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html">heavy_light_decomposition.cpp</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@@ -462,7 +462,7 @@ template<typename X> </div>
|
||||
|
||||
<p>number of leaves in the segment tree </p>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00263">263</a> of file <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html">heavy_light_decomposition.cpp</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00266">266</a> of file <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html">heavy_light_decomposition.cpp</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@@ -491,7 +491,7 @@ template<typename X> </div>
|
||||
<p>Everything here is private, and can only be accessed through the methods, in the derived class (<a class="el" href="../../d2/d8a/classrange__queries_1_1heavy__light__decomposition_1_1_h_l_d.html" title="The Heavy-Light Decomposition class.">HLD</a>) </p>
|
||||
<p>the segment tree, stored as a vector </p>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00262">262</a> of file <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html">heavy_light_decomposition.cpp</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00265">265</a> of file <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html">heavy_light_decomposition.cpp</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@@ -519,7 +519,7 @@ template<typename X> </div>
|
||||
|
||||
<p>inital query return value </p>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00264">264</a> of file <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html">heavy_light_decomposition.cpp</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00267">267</a> of file <a class="el" href="../../d2/de9/heavy__light__decomposition_8cpp_source.html">heavy_light_decomposition.cpp</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -171,7 +171,7 @@ class machine_learning::aystar_search::AyStarSearch< Puzzle ></div><p>A cl
|
||||
</ol>
|
||||
</dd></dl>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html#l00288">288</a> of file <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html">a_star_search.cpp</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html#l00290">290</a> of file <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html">a_star_search.cpp</a>.</p>
|
||||
</div><a name="doc-typedef-members" id="doc-typedef-members"></a><h2 id="header-doc-typedef-members" class="groupheader">Member Typedef Documentation</h2>
|
||||
<a id="a0c683b037f42e827a16420ce8bccfab9" name="a0c683b037f42e827a16420ce8bccfab9"></a>
|
||||
<h2 class="memtitle"><span class="permalink"><a href="#a0c683b037f42e827a16420ce8bccfab9">◆ </a></span>MapOfPuzzleInfoWithInteger</h2>
|
||||
@@ -188,9 +188,9 @@ template<typename Puzzle> </div>
|
||||
</div><div class="memdoc">
|
||||
<b>Initial value:</b><div class="fragment"><div class="line"> </div>
|
||||
<div class="line"> std::map<std::shared_ptr<Info>, uint32_t, <a class="code hl_struct" href="../../d3/d2a/structmachine__learning_1_1aystar__search_1_1_ay_star_search_1_1comparison__operator.html">comparison_operator</a>></div>
|
||||
<div class="ttc" id="astructmachine__learning_1_1aystar__search_1_1_ay_star_search_1_1comparison__operator_html"><div class="ttname"><a href="../../d3/d2a/structmachine__learning_1_1aystar__search_1_1_ay_star_search_1_1comparison__operator.html">machine_learning::aystar_search::AyStarSearch::comparison_operator</a></div><div class="ttdoc">Custom comparator for open_list.</div><div class="ttdef"><b>Definition</b> <a href="../../dd/dec/a__star__search_8cpp_source.html#l00370">a_star_search.cpp:370</a></div></div>
|
||||
<div class="ttc" id="astructmachine__learning_1_1aystar__search_1_1_ay_star_search_1_1comparison__operator_html"><div class="ttname"><a href="../../d3/d2a/structmachine__learning_1_1aystar__search_1_1_ay_star_search_1_1comparison__operator.html">machine_learning::aystar_search::AyStarSearch::comparison_operator</a></div><div class="ttdoc">Custom comparator for open_list.</div><div class="ttdef"><b>Definition</b> <a href="../../dd/dec/a__star__search_8cpp_source.html#l00372">a_star_search.cpp:372</a></div></div>
|
||||
</div><!-- fragment -->
|
||||
<p class="definition">Definition at line <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html#l00382">382</a> of file <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html">a_star_search.cpp</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html#l00384">384</a> of file <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html">a_star_search.cpp</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@@ -211,7 +211,7 @@ template<typename Puzzle> </div>
|
||||
<div class="line"> std::map<std::shared_ptr<Info>, std::shared_ptr<Info>,</div>
|
||||
<div class="line"> <a class="code hl_struct" href="../../d3/d2a/structmachine__learning_1_1aystar__search_1_1_ay_star_search_1_1comparison__operator.html">comparison_operator</a>></div>
|
||||
</div><!-- fragment -->
|
||||
<p class="definition">Definition at line <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html#l00378">378</a> of file <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html">a_star_search.cpp</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html#l00380">380</a> of file <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html">a_star_search.cpp</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@@ -231,7 +231,7 @@ template<typename Puzzle> </div>
|
||||
<b>Initial value:</b><div class="fragment"><div class="line"> </div>
|
||||
<div class="line"> std::set<std::shared_ptr<Info>, <a class="code hl_struct" href="../../d3/d2a/structmachine__learning_1_1aystar__search_1_1_ay_star_search_1_1comparison__operator.html">comparison_operator</a>></div>
|
||||
</div><!-- fragment -->
|
||||
<p class="definition">Definition at line <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html#l00385">385</a> of file <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html">a_star_search.cpp</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html#l00387">387</a> of file <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html">a_star_search.cpp</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@@ -274,12 +274,12 @@ template<typename Puzzle> </div>
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html#l00392">392</a> of file <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html">a_star_search.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 392</span> {</div>
|
||||
<div class="line"><span class="lineno"> 393</span> Initial = <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">std::make_shared<Info></a>(<a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">initial</a>);</div>
|
||||
<div class="line"><span class="lineno"> 394</span> Final = <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">std::make_shared<Info></a>(<span class="keyword">final</span>);</div>
|
||||
<div class="line"><span class="lineno"> 395</span> }</div>
|
||||
<div class="ttc" id="aclassmachine__learning_1_1aystar__search_1_1_ay_star_search_html"><div class="ttname"><a href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">machine_learning::aystar_search::AyStarSearch</a></div><div class="ttdoc">A class defining A* search algorithm. for some initial state and final state.</div><div class="ttdef"><b>Definition</b> <a href="../../dd/dec/a__star__search_8cpp_source.html#l00288">a_star_search.cpp:288</a></div></div>
|
||||
<p class="definition">Definition at line <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html#l00394">394</a> of file <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html">a_star_search.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 394</span> {</div>
|
||||
<div class="line"><span class="lineno"> 395</span> Initial = <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">std::make_shared<Info></a>(<a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">initial</a>);</div>
|
||||
<div class="line"><span class="lineno"> 396</span> Final = <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">std::make_shared<Info></a>(<span class="keyword">final</span>);</div>
|
||||
<div class="line"><span class="lineno"> 397</span> }</div>
|
||||
<div class="ttc" id="aclassmachine__learning_1_1aystar__search_1_1_ay_star_search_html"><div class="ttname"><a href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">machine_learning::aystar_search::AyStarSearch</a></div><div class="ttdoc">A class defining A* search algorithm. for some initial state and final state.</div><div class="ttdef"><b>Definition</b> <a href="../../dd/dec/a__star__search_8cpp_source.html#l00290">a_star_search.cpp:290</a></div></div>
|
||||
</div><!-- fragment -->
|
||||
</div>
|
||||
</div>
|
||||
@@ -325,103 +325,103 @@ template<typename Puzzle> </div>
|
||||
<p>Stores the list to explore</p>
|
||||
<p>Stores the list that are explored</p>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html#l00429">429</a> of file <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html">a_star_search.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 431</span> {</div>
|
||||
<div class="line"><span class="lineno"> 432</span> MapOfPuzzleInfoWithPuzzleInfo</div>
|
||||
<div class="line"><span class="lineno"> 433</span> <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">parent_of</a>; </div>
|
||||
<div class="line"><span class="lineno"> 434</span> MapOfPuzzleInfoWithInteger <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">g_score</a>; </div>
|
||||
<div class="line"><span class="lineno"> 435</span> SetOfPuzzleInfo <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">open_list</a>; </div>
|
||||
<div class="line"><span class="lineno"> 436</span> SetOfPuzzleInfo <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">closed_list</a>; </div>
|
||||
<div class="line"><span class="lineno"> 437</span> </div>
|
||||
<div class="line"><span class="lineno"> 438</span> <span class="comment">// Before starting the AyStartSearch, initialize the set and maps</span></div>
|
||||
<div class="line"><span class="lineno"> 439</span> <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">open_list</a>.emplace(Initial);</div>
|
||||
<div class="line"><span class="lineno"> 440</span> <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">parent_of</a>[Initial] = <span class="keyword">nullptr</span>;</div>
|
||||
<div class="line"><span class="lineno"> 441</span> <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">g_score</a>[Initial] = 0;</div>
|
||||
<div class="line"><span class="lineno"> 442</span> </div>
|
||||
<div class="line"><span class="lineno"> 443</span> <span class="keywordflow">while</span> (!<a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">open_list</a>.empty()) {</div>
|
||||
<div class="line"><span class="lineno"> 444</span> <span class="comment">// Iterator for state having having lowest f_score.</span></div>
|
||||
<div class="line"><span class="lineno"> 445</span> <span class="keyword">typename</span> SetOfPuzzleInfo::iterator <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">it_low_f_score</a>;</div>
|
||||
<div class="line"><span class="lineno"> 446</span> <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">uint32_t</a> <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">min_f_score</a> = 1<a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">e9</a>;</div>
|
||||
<div class="line"><span class="lineno"> 447</span> <span class="keywordflow">for</span> (<span class="keyword">auto</span> <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">iter</a> = <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">open_list</a>.begin(); <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">iter</a> != <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">open_list</a>.end();</div>
|
||||
<div class="line"><span class="lineno"> 448</span> ++<a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">iter</a>) {</div>
|
||||
<div class="line"><span class="lineno"> 449</span> <span class="comment">// f score here is evaluated by g score (depth) and h score</span></div>
|
||||
<div class="line"><span class="lineno"> 450</span> <span class="comment">// (distance between current state and final state)</span></div>
|
||||
<div class="line"><span class="lineno"> 451</span> <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">uint32_t</a> <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">f_score</a> = (*iter)->heuristic_value + (*iter)->depth;</div>
|
||||
<div class="line"><span class="lineno"> 452</span> <span class="keywordflow">if</span> (<a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">f_score</a> < <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">min_f_score</a>) {</div>
|
||||
<div class="line"><span class="lineno"> 453</span> <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">min_f_score</a> = <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">f_score</a>;</div>
|
||||
<div class="line"><span class="lineno"> 454</span> <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">it_low_f_score</a> = <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">iter</a>;</div>
|
||||
<div class="line"><span class="lineno"> 455</span> }</div>
|
||||
<div class="line"><span class="lineno"> 456</span> }</div>
|
||||
<div class="line"><span class="lineno"> 457</span> </div>
|
||||
<div class="line"><span class="lineno"> 458</span> <span class="comment">// current_state, stores lowest f score so far for this state.</span></div>
|
||||
<div class="line"><span class="lineno"> 459</span> <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">std::shared_ptr<Info></a> <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">current_state</a> = *<a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">it_low_f_score</a>;</div>
|
||||
<div class="line"><span class="lineno"> 460</span> </div>
|
||||
<div class="line"><span class="lineno"> 461</span> <span class="comment">// if this current state is equal to final, return</span></div>
|
||||
<div class="line"><span class="lineno"> 462</span> <span class="keywordflow">if</span> (*(<a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">current_state</a>->state) == *(Final->state)) {</div>
|
||||
<div class="line"><span class="lineno"> 463</span> <span class="keywordflow">return</span> <a class="code hl_function" href="#a0a26aa9ad3d73707370d9fe83707aca4">Solution</a>(<a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">current_state</a>, <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">parent_of</a>);</div>
|
||||
<div class="line"><span class="lineno"> 464</span> }</div>
|
||||
<div class="line"><span class="lineno"> 465</span> <span class="comment">// else remove from open list as visited.</span></div>
|
||||
<div class="line"><span class="lineno"> 466</span> <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">open_list</a>.erase(<a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">it_low_f_score</a>);</div>
|
||||
<div class="line"><span class="lineno"> 467</span> <span class="comment">// if current_state has exceeded the allowed depth, skip</span></div>
|
||||
<div class="line"><span class="lineno"> 468</span> <span class="comment">// neighbor checking</span></div>
|
||||
<div class="line"><span class="lineno"> 469</span> <span class="keywordflow">if</span> (<a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">current_state</a>->depth >= <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">permissible_depth</a>) {</div>
|
||||
<div class="line"><span class="lineno"> 470</span> <span class="keywordflow">continue</span>;</div>
|
||||
<div class="line"><span class="lineno"> 471</span> }</div>
|
||||
<div class="line"><span class="lineno"> 472</span> <span class="comment">// Generate all possible moves (neighbors) given the current</span></div>
|
||||
<div class="line"><span class="lineno"> 473</span> <span class="comment">// state</span></div>
|
||||
<div class="line"><span class="lineno"> 474</span> <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">std::vector<Puzzle></a> <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">total_possible_moves</a> =</div>
|
||||
<div class="line"><span class="lineno"> 475</span> <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">current_state</a>->state->generate_possible_moves();</div>
|
||||
<div class="line"><span class="lineno"> 476</span> </div>
|
||||
<div class="line"><span class="lineno"> 477</span> <span class="keywordflow">for</span> (<a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">Puzzle</a> &<a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">neighbor</a> : <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">total_possible_moves</a>) {</div>
|
||||
<div class="line"><span class="lineno"> 478</span> <span class="comment">// calculate score of neighbors with respect to</span></div>
|
||||
<div class="line"><span class="lineno"> 479</span> <span class="comment">// current_state</span></div>
|
||||
<div class="line"><span class="lineno"> 480</span> <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">std::shared_ptr<Info></a> <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">Neighbor</a> = <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">std::make_shared<Info></a>(</div>
|
||||
<div class="line"><span class="lineno"> 481</span> <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">neighbor</a>, <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">dist</a>(<a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">neighbor</a>, *(Final->state)),</div>
|
||||
<div class="line"><span class="lineno"> 482</span> <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">current_state</a>->depth + 1U);</div>
|
||||
<div class="line"><span class="lineno"> 483</span> <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">uint32_t</a> <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">temp_g_score</a> = <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">Neighbor</a>->depth;</div>
|
||||
<div class="line"><span class="lineno"> 484</span> </div>
|
||||
<div class="line"><span class="lineno"> 485</span> <span class="comment">// Check whether this state is explored.</span></div>
|
||||
<div class="line"><span class="lineno"> 486</span> <span class="comment">// If this state is discovered at greater depth, then discard,</span></div>
|
||||
<div class="line"><span class="lineno"> 487</span> <span class="comment">// else remove from closed list and explore the node</span></div>
|
||||
<div class="line"><span class="lineno"> 488</span> <span class="keyword">auto</span> <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">closed_list_iter</a> = <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">closed_list</a>.find(<a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">Neighbor</a>);</div>
|
||||
<div class="line"><span class="lineno"> 489</span> <span class="keywordflow">if</span> (<a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">closed_list_iter</a> != <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">closed_list</a>.end()) {</div>
|
||||
<div class="line"><span class="lineno"> 490</span> <span class="comment">// 1. If state in closed list has higher depth, then remove</span></div>
|
||||
<div class="line"><span class="lineno"> 491</span> <span class="comment">// from list since we have found better option,</span></div>
|
||||
<div class="line"><span class="lineno"> 492</span> <span class="comment">// 2. Else don't explore this state.</span></div>
|
||||
<div class="line"><span class="lineno"> 493</span> <span class="keywordflow">if</span> (<a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">Neighbor</a>->depth < (*closed_list_iter)->depth) {</div>
|
||||
<div class="line"><span class="lineno"> 494</span> <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">closed_list</a>.erase(<a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">closed_list_iter</a>);</div>
|
||||
<div class="line"><span class="lineno"> 495</span> } <span class="keywordflow">else</span> {</div>
|
||||
<div class="line"><span class="lineno"> 496</span> <span class="keywordflow">continue</span>;</div>
|
||||
<div class="line"><span class="lineno"> 497</span> }</div>
|
||||
<div class="line"><span class="lineno"> 498</span> }</div>
|
||||
<div class="line"><span class="lineno"> 499</span> <span class="keyword">auto</span> <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">neighbor_g_score_iter</a> = <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">g_score</a>.find(<a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">Neighbor</a>);</div>
|
||||
<div class="line"><span class="lineno"> 500</span> <span class="comment">// if the neighbor is already created and has minimum</span></div>
|
||||
<div class="line"><span class="lineno"> 501</span> <span class="comment">// g_score, then update g_score and f_score else insert new</span></div>
|
||||
<div class="line"><span class="lineno"> 502</span> <span class="keywordflow">if</span> (<a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">neighbor_g_score_iter</a> != <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">g_score</a>.end()) {</div>
|
||||
<div class="line"><span class="lineno"> 503</span> <span class="keywordflow">if</span> (<a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">neighbor_g_score_iter</a>->second > <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">temp_g_score</a>) {</div>
|
||||
<div class="line"><span class="lineno"> 504</span> <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">neighbor_g_score_iter</a>->second = <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">temp_g_score</a>;</div>
|
||||
<div class="line"><span class="lineno"> 505</span> <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">parent_of</a>[<a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">Neighbor</a>] = <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">current_state</a>;</div>
|
||||
<div class="line"><span class="lineno"> 506</span> }</div>
|
||||
<div class="line"><span class="lineno"> 507</span> } <span class="keywordflow">else</span> {</div>
|
||||
<div class="line"><span class="lineno"> 508</span> <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">g_score</a>[<a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">Neighbor</a>] = <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">temp_g_score</a>;</div>
|
||||
<div class="line"><span class="lineno"> 509</span> <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">parent_of</a>[<a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">Neighbor</a>] = <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">current_state</a>;</div>
|
||||
<div class="line"><span class="lineno"> 510</span> }</div>
|
||||
<div class="line"><span class="lineno"> 511</span> <span class="comment">// If this is a new state, insert into open_list</span></div>
|
||||
<div class="line"><span class="lineno"> 512</span> <span class="comment">// else update if the this state has better g score than</span></div>
|
||||
<div class="line"><span class="lineno"> 513</span> <span class="comment">// existing one.</span></div>
|
||||
<div class="line"><span class="lineno"> 514</span> <span class="keyword">auto</span> <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">iter</a> = <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">open_list</a>.find(<a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">Neighbor</a>);</div>
|
||||
<div class="line"><span class="lineno"> 515</span> <span class="keywordflow">if</span> (<a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">iter</a> == <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">open_list</a>.end()) {</div>
|
||||
<div class="line"><span class="lineno"> 516</span> <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">open_list</a>.emplace(<a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">Neighbor</a>);</div>
|
||||
<div class="line"><span class="lineno"> 517</span> } <span class="keywordflow">else</span> <span class="keywordflow">if</span> ((*iter)->depth > <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">Neighbor</a>->depth) {</div>
|
||||
<div class="line"><span class="lineno"> 518</span> (*iter)->depth = <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">Neighbor</a>->depth;</div>
|
||||
<div class="line"><span class="lineno"> 519</span> }</div>
|
||||
<div class="line"><span class="lineno"> 520</span> }</div>
|
||||
<div class="line"><span class="lineno"> 521</span> <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">closed_list</a>.emplace(<a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">current_state</a>);</div>
|
||||
<div class="line"><span class="lineno"> 522</span> }</div>
|
||||
<div class="line"><span class="lineno"> 523</span> <span class="comment">// Cannot find the solution, return empty vector</span></div>
|
||||
<div class="line"><span class="lineno"> 524</span> <span class="keywordflow">return</span> <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">std::vector<Puzzle></a>(0);</div>
|
||||
<div class="line"><span class="lineno"> 525</span> }</div>
|
||||
<div class="ttc" id="aclassmachine__learning_1_1aystar__search_1_1_ay_star_search_html_a0a26aa9ad3d73707370d9fe83707aca4"><div class="ttname"><a href="#a0a26aa9ad3d73707370d9fe83707aca4">machine_learning::aystar_search::AyStarSearch::Solution</a></div><div class="ttdeci">std::vector< Puzzle > Solution(std::shared_ptr< Info > FinalState, const MapOfPuzzleInfoWithPuzzleInfo &parent_of)</div><div class="ttdoc">A helper solution: launches when a solution for AyStarSearch is found.</div><div class="ttdef"><b>Definition</b> <a href="../../dd/dec/a__star__search_8cpp_source.html#l00405">a_star_search.cpp:405</a></div></div>
|
||||
<p class="definition">Definition at line <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html#l00431">431</a> of file <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html">a_star_search.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 433</span> {</div>
|
||||
<div class="line"><span class="lineno"> 434</span> MapOfPuzzleInfoWithPuzzleInfo</div>
|
||||
<div class="line"><span class="lineno"> 435</span> <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">parent_of</a>; </div>
|
||||
<div class="line"><span class="lineno"> 436</span> MapOfPuzzleInfoWithInteger <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">g_score</a>; </div>
|
||||
<div class="line"><span class="lineno"> 437</span> SetOfPuzzleInfo <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">open_list</a>; </div>
|
||||
<div class="line"><span class="lineno"> 438</span> SetOfPuzzleInfo <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">closed_list</a>; </div>
|
||||
<div class="line"><span class="lineno"> 439</span> </div>
|
||||
<div class="line"><span class="lineno"> 440</span> <span class="comment">// Before starting the AyStartSearch, initialize the set and maps</span></div>
|
||||
<div class="line"><span class="lineno"> 441</span> <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">open_list</a>.emplace(Initial);</div>
|
||||
<div class="line"><span class="lineno"> 442</span> <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">parent_of</a>[Initial] = <span class="keyword">nullptr</span>;</div>
|
||||
<div class="line"><span class="lineno"> 443</span> <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">g_score</a>[Initial] = 0;</div>
|
||||
<div class="line"><span class="lineno"> 444</span> </div>
|
||||
<div class="line"><span class="lineno"> 445</span> <span class="keywordflow">while</span> (!<a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">open_list</a>.empty()) {</div>
|
||||
<div class="line"><span class="lineno"> 446</span> <span class="comment">// Iterator for state having having lowest f_score.</span></div>
|
||||
<div class="line"><span class="lineno"> 447</span> <span class="keyword">typename</span> SetOfPuzzleInfo::iterator <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">it_low_f_score</a>;</div>
|
||||
<div class="line"><span class="lineno"> 448</span> <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">uint32_t</a> <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">min_f_score</a> = 1<a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">e9</a>;</div>
|
||||
<div class="line"><span class="lineno"> 449</span> <span class="keywordflow">for</span> (<span class="keyword">auto</span> <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">iter</a> = <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">open_list</a>.begin(); <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">iter</a> != <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">open_list</a>.end();</div>
|
||||
<div class="line"><span class="lineno"> 450</span> ++<a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">iter</a>) {</div>
|
||||
<div class="line"><span class="lineno"> 451</span> <span class="comment">// f score here is evaluated by g score (depth) and h score</span></div>
|
||||
<div class="line"><span class="lineno"> 452</span> <span class="comment">// (distance between current state and final state)</span></div>
|
||||
<div class="line"><span class="lineno"> 453</span> <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">uint32_t</a> <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">f_score</a> = (*iter)->heuristic_value + (*iter)->depth;</div>
|
||||
<div class="line"><span class="lineno"> 454</span> <span class="keywordflow">if</span> (<a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">f_score</a> < <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">min_f_score</a>) {</div>
|
||||
<div class="line"><span class="lineno"> 455</span> <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">min_f_score</a> = <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">f_score</a>;</div>
|
||||
<div class="line"><span class="lineno"> 456</span> <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">it_low_f_score</a> = <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">iter</a>;</div>
|
||||
<div class="line"><span class="lineno"> 457</span> }</div>
|
||||
<div class="line"><span class="lineno"> 458</span> }</div>
|
||||
<div class="line"><span class="lineno"> 459</span> </div>
|
||||
<div class="line"><span class="lineno"> 460</span> <span class="comment">// current_state, stores lowest f score so far for this state.</span></div>
|
||||
<div class="line"><span class="lineno"> 461</span> <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">std::shared_ptr<Info></a> <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">current_state</a> = *<a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">it_low_f_score</a>;</div>
|
||||
<div class="line"><span class="lineno"> 462</span> </div>
|
||||
<div class="line"><span class="lineno"> 463</span> <span class="comment">// if this current state is equal to final, return</span></div>
|
||||
<div class="line"><span class="lineno"> 464</span> <span class="keywordflow">if</span> (*(<a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">current_state</a>->state) == *(Final->state)) {</div>
|
||||
<div class="line"><span class="lineno"> 465</span> <span class="keywordflow">return</span> <a class="code hl_function" href="#a0a26aa9ad3d73707370d9fe83707aca4">Solution</a>(<a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">current_state</a>, <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">parent_of</a>);</div>
|
||||
<div class="line"><span class="lineno"> 466</span> }</div>
|
||||
<div class="line"><span class="lineno"> 467</span> <span class="comment">// else remove from open list as visited.</span></div>
|
||||
<div class="line"><span class="lineno"> 468</span> <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">open_list</a>.erase(<a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">it_low_f_score</a>);</div>
|
||||
<div class="line"><span class="lineno"> 469</span> <span class="comment">// if current_state has exceeded the allowed depth, skip</span></div>
|
||||
<div class="line"><span class="lineno"> 470</span> <span class="comment">// neighbor checking</span></div>
|
||||
<div class="line"><span class="lineno"> 471</span> <span class="keywordflow">if</span> (<a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">current_state</a>->depth >= <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">permissible_depth</a>) {</div>
|
||||
<div class="line"><span class="lineno"> 472</span> <span class="keywordflow">continue</span>;</div>
|
||||
<div class="line"><span class="lineno"> 473</span> }</div>
|
||||
<div class="line"><span class="lineno"> 474</span> <span class="comment">// Generate all possible moves (neighbors) given the current</span></div>
|
||||
<div class="line"><span class="lineno"> 475</span> <span class="comment">// state</span></div>
|
||||
<div class="line"><span class="lineno"> 476</span> <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">std::vector<Puzzle></a> <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">total_possible_moves</a> =</div>
|
||||
<div class="line"><span class="lineno"> 477</span> <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">current_state</a>->state->generate_possible_moves();</div>
|
||||
<div class="line"><span class="lineno"> 478</span> </div>
|
||||
<div class="line"><span class="lineno"> 479</span> <span class="keywordflow">for</span> (<a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">Puzzle</a> &<a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">neighbor</a> : <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">total_possible_moves</a>) {</div>
|
||||
<div class="line"><span class="lineno"> 480</span> <span class="comment">// calculate score of neighbors with respect to</span></div>
|
||||
<div class="line"><span class="lineno"> 481</span> <span class="comment">// current_state</span></div>
|
||||
<div class="line"><span class="lineno"> 482</span> <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">std::shared_ptr<Info></a> <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">Neighbor</a> = <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">std::make_shared<Info></a>(</div>
|
||||
<div class="line"><span class="lineno"> 483</span> <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">neighbor</a>, <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">dist</a>(<a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">neighbor</a>, *(Final->state)),</div>
|
||||
<div class="line"><span class="lineno"> 484</span> <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">current_state</a>->depth + 1U);</div>
|
||||
<div class="line"><span class="lineno"> 485</span> <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">uint32_t</a> <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">temp_g_score</a> = <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">Neighbor</a>->depth;</div>
|
||||
<div class="line"><span class="lineno"> 486</span> </div>
|
||||
<div class="line"><span class="lineno"> 487</span> <span class="comment">// Check whether this state is explored.</span></div>
|
||||
<div class="line"><span class="lineno"> 488</span> <span class="comment">// If this state is discovered at greater depth, then discard,</span></div>
|
||||
<div class="line"><span class="lineno"> 489</span> <span class="comment">// else remove from closed list and explore the node</span></div>
|
||||
<div class="line"><span class="lineno"> 490</span> <span class="keyword">auto</span> <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">closed_list_iter</a> = <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">closed_list</a>.find(<a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">Neighbor</a>);</div>
|
||||
<div class="line"><span class="lineno"> 491</span> <span class="keywordflow">if</span> (<a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">closed_list_iter</a> != <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">closed_list</a>.end()) {</div>
|
||||
<div class="line"><span class="lineno"> 492</span> <span class="comment">// 1. If state in closed list has higher depth, then remove</span></div>
|
||||
<div class="line"><span class="lineno"> 493</span> <span class="comment">// from list since we have found better option,</span></div>
|
||||
<div class="line"><span class="lineno"> 494</span> <span class="comment">// 2. Else don't explore this state.</span></div>
|
||||
<div class="line"><span class="lineno"> 495</span> <span class="keywordflow">if</span> (<a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">Neighbor</a>->depth < (*closed_list_iter)->depth) {</div>
|
||||
<div class="line"><span class="lineno"> 496</span> <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">closed_list</a>.erase(<a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">closed_list_iter</a>);</div>
|
||||
<div class="line"><span class="lineno"> 497</span> } <span class="keywordflow">else</span> {</div>
|
||||
<div class="line"><span class="lineno"> 498</span> <span class="keywordflow">continue</span>;</div>
|
||||
<div class="line"><span class="lineno"> 499</span> }</div>
|
||||
<div class="line"><span class="lineno"> 500</span> }</div>
|
||||
<div class="line"><span class="lineno"> 501</span> <span class="keyword">auto</span> <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">neighbor_g_score_iter</a> = <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">g_score</a>.find(<a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">Neighbor</a>);</div>
|
||||
<div class="line"><span class="lineno"> 502</span> <span class="comment">// if the neighbor is already created and has minimum</span></div>
|
||||
<div class="line"><span class="lineno"> 503</span> <span class="comment">// g_score, then update g_score and f_score else insert new</span></div>
|
||||
<div class="line"><span class="lineno"> 504</span> <span class="keywordflow">if</span> (<a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">neighbor_g_score_iter</a> != <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">g_score</a>.end()) {</div>
|
||||
<div class="line"><span class="lineno"> 505</span> <span class="keywordflow">if</span> (<a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">neighbor_g_score_iter</a>->second > <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">temp_g_score</a>) {</div>
|
||||
<div class="line"><span class="lineno"> 506</span> <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">neighbor_g_score_iter</a>->second = <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">temp_g_score</a>;</div>
|
||||
<div class="line"><span class="lineno"> 507</span> <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">parent_of</a>[<a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">Neighbor</a>] = <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">current_state</a>;</div>
|
||||
<div class="line"><span class="lineno"> 508</span> }</div>
|
||||
<div class="line"><span class="lineno"> 509</span> } <span class="keywordflow">else</span> {</div>
|
||||
<div class="line"><span class="lineno"> 510</span> <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">g_score</a>[<a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">Neighbor</a>] = <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">temp_g_score</a>;</div>
|
||||
<div class="line"><span class="lineno"> 511</span> <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">parent_of</a>[<a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">Neighbor</a>] = <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">current_state</a>;</div>
|
||||
<div class="line"><span class="lineno"> 512</span> }</div>
|
||||
<div class="line"><span class="lineno"> 513</span> <span class="comment">// If this is a new state, insert into open_list</span></div>
|
||||
<div class="line"><span class="lineno"> 514</span> <span class="comment">// else update if the this state has better g score than</span></div>
|
||||
<div class="line"><span class="lineno"> 515</span> <span class="comment">// existing one.</span></div>
|
||||
<div class="line"><span class="lineno"> 516</span> <span class="keyword">auto</span> <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">iter</a> = <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">open_list</a>.find(<a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">Neighbor</a>);</div>
|
||||
<div class="line"><span class="lineno"> 517</span> <span class="keywordflow">if</span> (<a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">iter</a> == <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">open_list</a>.end()) {</div>
|
||||
<div class="line"><span class="lineno"> 518</span> <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">open_list</a>.emplace(<a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">Neighbor</a>);</div>
|
||||
<div class="line"><span class="lineno"> 519</span> } <span class="keywordflow">else</span> <span class="keywordflow">if</span> ((*iter)->depth > <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">Neighbor</a>->depth) {</div>
|
||||
<div class="line"><span class="lineno"> 520</span> (*iter)->depth = <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">Neighbor</a>->depth;</div>
|
||||
<div class="line"><span class="lineno"> 521</span> }</div>
|
||||
<div class="line"><span class="lineno"> 522</span> }</div>
|
||||
<div class="line"><span class="lineno"> 523</span> <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">closed_list</a>.emplace(<a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">current_state</a>);</div>
|
||||
<div class="line"><span class="lineno"> 524</span> }</div>
|
||||
<div class="line"><span class="lineno"> 525</span> <span class="comment">// Cannot find the solution, return empty vector</span></div>
|
||||
<div class="line"><span class="lineno"> 526</span> <span class="keywordflow">return</span> <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">std::vector<Puzzle></a>(0);</div>
|
||||
<div class="line"><span class="lineno"> 527</span> }</div>
|
||||
<div class="ttc" id="aclassmachine__learning_1_1aystar__search_1_1_ay_star_search_html_a0a26aa9ad3d73707370d9fe83707aca4"><div class="ttname"><a href="#a0a26aa9ad3d73707370d9fe83707aca4">machine_learning::aystar_search::AyStarSearch::Solution</a></div><div class="ttdeci">std::vector< Puzzle > Solution(std::shared_ptr< Info > FinalState, const MapOfPuzzleInfoWithPuzzleInfo &parent_of)</div><div class="ttdoc">A helper solution: launches when a solution for AyStarSearch is found.</div><div class="ttdef"><b>Definition</b> <a href="../../dd/dec/a__star__search_8cpp_source.html#l00407">a_star_search.cpp:407</a></div></div>
|
||||
</div><!-- fragment -->
|
||||
</div>
|
||||
</div>
|
||||
@@ -464,21 +464,21 @@ template<typename Puzzle> </div>
|
||||
</dl>
|
||||
<dl class="section return"><dt>Returns</dt><dd>the list of moves denoting moves from final state to initial state (in reverse) </dd></dl>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html#l00405">405</a> of file <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html">a_star_search.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 407</span> {</div>
|
||||
<div class="line"><span class="lineno"> 408</span> <span class="comment">// Useful for traversing from final state to current state.</span></div>
|
||||
<div class="line"><span class="lineno"> 409</span> <span class="keyword">auto</span> <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">current_state</a> = <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">FinalState</a>;</div>
|
||||
<div class="line"><span class="lineno"> 410</span> <span class="comment">/*</span></div>
|
||||
<div class="line"><span class="lineno"> 411</span><span class="comment"> * For storing the solution tree starting from initial state to</span></div>
|
||||
<div class="line"><span class="lineno"> 412</span><span class="comment"> * final state</span></div>
|
||||
<div class="line"><span class="lineno"> 413</span><span class="comment"> */</span></div>
|
||||
<div class="line"><span class="lineno"> 414</span> <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">std::vector<Puzzle></a> <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">answer</a>;</div>
|
||||
<div class="line"><span class="lineno"> 415</span> <span class="keywordflow">while</span> (<a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">current_state</a> != <span class="keyword">nullptr</span>) {</div>
|
||||
<div class="line"><span class="lineno"> 416</span> <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">answer</a>.emplace_back(*<a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">current_state</a>->state);</div>
|
||||
<div class="line"><span class="lineno"> 417</span> <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">current_state</a> = <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">parent_of</a>.find(<a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">current_state</a>)->second;</div>
|
||||
<div class="line"><span class="lineno"> 418</span> }</div>
|
||||
<div class="line"><span class="lineno"> 419</span> <span class="keywordflow">return</span> <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">answer</a>;</div>
|
||||
<div class="line"><span class="lineno"> 420</span> }</div>
|
||||
<p class="definition">Definition at line <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html#l00407">407</a> of file <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html">a_star_search.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 409</span> {</div>
|
||||
<div class="line"><span class="lineno"> 410</span> <span class="comment">// Useful for traversing from final state to current state.</span></div>
|
||||
<div class="line"><span class="lineno"> 411</span> <span class="keyword">auto</span> <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">current_state</a> = <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">FinalState</a>;</div>
|
||||
<div class="line"><span class="lineno"> 412</span> <span class="comment">/*</span></div>
|
||||
<div class="line"><span class="lineno"> 413</span><span class="comment"> * For storing the solution tree starting from initial state to</span></div>
|
||||
<div class="line"><span class="lineno"> 414</span><span class="comment"> * final state</span></div>
|
||||
<div class="line"><span class="lineno"> 415</span><span class="comment"> */</span></div>
|
||||
<div class="line"><span class="lineno"> 416</span> <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">std::vector<Puzzle></a> <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">answer</a>;</div>
|
||||
<div class="line"><span class="lineno"> 417</span> <span class="keywordflow">while</span> (<a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">current_state</a> != <span class="keyword">nullptr</span>) {</div>
|
||||
<div class="line"><span class="lineno"> 418</span> <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">answer</a>.emplace_back(*<a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">current_state</a>->state);</div>
|
||||
<div class="line"><span class="lineno"> 419</span> <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">current_state</a> = <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">parent_of</a>.find(<a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">current_state</a>)->second;</div>
|
||||
<div class="line"><span class="lineno"> 420</span> }</div>
|
||||
<div class="line"><span class="lineno"> 421</span> <span class="keywordflow">return</span> <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">answer</a>;</div>
|
||||
<div class="line"><span class="lineno"> 422</span> }</div>
|
||||
</div><!-- fragment -->
|
||||
</div>
|
||||
</div>
|
||||
@@ -505,7 +505,7 @@ template<typename Puzzle> </div>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html#l00366">366</a> of file <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html">a_star_search.cpp</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html#l00368">368</a> of file <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html">a_star_search.cpp</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@@ -531,7 +531,7 @@ template<typename Puzzle> </div>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html#l00365">365</a> of file <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html">a_star_search.cpp</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html#l00367">367</a> of file <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html">a_star_search.cpp</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -157,7 +157,7 @@ Public Attributes</h2></td></tr>
|
||||
<div class="textblock"><div class="compoundTemplParams">template<typename Puzzle><br />
|
||||
struct machine_learning::aystar_search::AyStarSearch< Puzzle >::Info</div><p>Struct that handles all the information related to the current state. </p>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html#l00293">293</a> of file <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html">a_star_search.cpp</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html#l00295">295</a> of file <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html">a_star_search.cpp</a>.</p>
|
||||
</div><a name="doc-constructors" id="doc-constructors"></a><h2 id="header-doc-constructors" class="groupheader">Constructor & Destructor Documentation</h2>
|
||||
<a id="aaa7ea27346659f0abe2df82ca57fc5a7" name="aaa7ea27346659f0abe2df82ca57fc5a7"></a>
|
||||
<h2 class="memtitle"><span class="permalink"><a href="#aaa7ea27346659f0abe2df82ca57fc5a7">◆ </a></span>Info() <span class="overload">[1/5]</span></h2>
|
||||
@@ -222,9 +222,9 @@ template<typename Puzzle> </div>
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html#l00307">307</a> of file <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html">a_star_search.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 307</span>: state(<a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">std::make_shared<Puzzle></a>(<a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">A</a>)) {}</div>
|
||||
<div class="ttc" id="aclassmachine__learning_1_1aystar__search_1_1_ay_star_search_html"><div class="ttname"><a href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">machine_learning::aystar_search::AyStarSearch</a></div><div class="ttdoc">A class defining A* search algorithm. for some initial state and final state.</div><div class="ttdef"><b>Definition</b> <a href="../../dd/dec/a__star__search_8cpp_source.html#l00288">a_star_search.cpp:288</a></div></div>
|
||||
<p class="definition">Definition at line <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html#l00309">309</a> of file <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html">a_star_search.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 309</span>: state(<a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">std::make_shared<Puzzle></a>(<a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">A</a>)) {}</div>
|
||||
<div class="ttc" id="aclassmachine__learning_1_1aystar__search_1_1_ay_star_search_html"><div class="ttname"><a href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">machine_learning::aystar_search::AyStarSearch</a></div><div class="ttdoc">A class defining A* search algorithm. for some initial state and final state.</div><div class="ttdef"><b>Definition</b> <a href="../../dd/dec/a__star__search_8cpp_source.html#l00290">a_star_search.cpp:290</a></div></div>
|
||||
</div><!-- fragment -->
|
||||
</div>
|
||||
</div>
|
||||
@@ -272,12 +272,12 @@ template<typename Puzzle> </div>
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html#l00315">315</a> of file <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html">a_star_search.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 316</span> : state(<a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">std::make_shared<Puzzle></a>(<a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">A</a>)),</div>
|
||||
<div class="line"><span class="lineno"> 317</span> <a class="code hl_variable" href="#a331d1070d008a4f9d55775a51013baa3">heuristic_value</a>(<a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">h_value</a>),</div>
|
||||
<div class="line"><span class="lineno"> 318</span> <a class="code hl_variable" href="#a003a30bb165be50ce503c17df90c128d">depth</a>(<a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">d</a>) {}</div>
|
||||
<div class="ttc" id="astructmachine__learning_1_1aystar__search_1_1_ay_star_search_1_1_info_html_a003a30bb165be50ce503c17df90c128d"><div class="ttname"><a href="#a003a30bb165be50ce503c17df90c128d">machine_learning::aystar_search::AyStarSearch::Info::depth</a></div><div class="ttdeci">size_t depth</div><div class="ttdoc">stores h score</div><div class="ttdef"><b>Definition</b> <a href="../../dd/dec/a__star__search_8cpp_source.html#l00296">a_star_search.cpp:296</a></div></div>
|
||||
<div class="ttc" id="astructmachine__learning_1_1aystar__search_1_1_ay_star_search_1_1_info_html_a331d1070d008a4f9d55775a51013baa3"><div class="ttname"><a href="#a331d1070d008a4f9d55775a51013baa3">machine_learning::aystar_search::AyStarSearch::Info::heuristic_value</a></div><div class="ttdeci">size_t heuristic_value</div><div class="ttdoc">Holds the current state.</div><div class="ttdef"><b>Definition</b> <a href="../../dd/dec/a__star__search_8cpp_source.html#l00295">a_star_search.cpp:295</a></div></div>
|
||||
<p class="definition">Definition at line <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html#l00317">317</a> of file <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html">a_star_search.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 318</span> : state(<a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">std::make_shared<Puzzle></a>(<a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">A</a>)),</div>
|
||||
<div class="line"><span class="lineno"> 319</span> <a class="code hl_variable" href="#a331d1070d008a4f9d55775a51013baa3">heuristic_value</a>(<a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">h_value</a>),</div>
|
||||
<div class="line"><span class="lineno"> 320</span> <a class="code hl_variable" href="#a003a30bb165be50ce503c17df90c128d">depth</a>(<a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">d</a>) {}</div>
|
||||
<div class="ttc" id="astructmachine__learning_1_1aystar__search_1_1_ay_star_search_1_1_info_html_a003a30bb165be50ce503c17df90c128d"><div class="ttname"><a href="#a003a30bb165be50ce503c17df90c128d">machine_learning::aystar_search::AyStarSearch::Info::depth</a></div><div class="ttdeci">size_t depth</div><div class="ttdoc">stores h score</div><div class="ttdef"><b>Definition</b> <a href="../../dd/dec/a__star__search_8cpp_source.html#l00298">a_star_search.cpp:298</a></div></div>
|
||||
<div class="ttc" id="astructmachine__learning_1_1aystar__search_1_1_ay_star_search_1_1_info_html_a331d1070d008a4f9d55775a51013baa3"><div class="ttname"><a href="#a331d1070d008a4f9d55775a51013baa3">machine_learning::aystar_search::AyStarSearch::Info::heuristic_value</a></div><div class="ttdeci">size_t heuristic_value</div><div class="ttdoc">Holds the current state.</div><div class="ttdef"><b>Definition</b> <a href="../../dd/dec/a__star__search_8cpp_source.html#l00297">a_star_search.cpp:297</a></div></div>
|
||||
</div><!-- fragment -->
|
||||
</div>
|
||||
</div>
|
||||
@@ -314,10 +314,10 @@ template<typename Puzzle> </div>
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html#l00324">324</a> of file <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html">a_star_search.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 325</span> : state(<a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">std::make_shared<Puzzle></a>(<a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">A</a>.state)),</div>
|
||||
<div class="line"><span class="lineno"> 326</span> <a class="code hl_variable" href="#a331d1070d008a4f9d55775a51013baa3">heuristic_value</a>(<a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">A</a>.heuristic_value),</div>
|
||||
<div class="line"><span class="lineno"> 327</span> <a class="code hl_variable" href="#a003a30bb165be50ce503c17df90c128d">depth</a>(<a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">A</a>.depth) {}</div>
|
||||
<p class="definition">Definition at line <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html#l00326">326</a> of file <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html">a_star_search.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 327</span> : state(<a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">std::make_shared<Puzzle></a>(<a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">A</a>.state)),</div>
|
||||
<div class="line"><span class="lineno"> 328</span> <a class="code hl_variable" href="#a331d1070d008a4f9d55775a51013baa3">heuristic_value</a>(<a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">A</a>.heuristic_value),</div>
|
||||
<div class="line"><span class="lineno"> 329</span> <a class="code hl_variable" href="#a003a30bb165be50ce503c17df90c128d">depth</a>(<a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">A</a>.depth) {}</div>
|
||||
</div><!-- fragment -->
|
||||
</div>
|
||||
</div>
|
||||
@@ -354,10 +354,10 @@ template<typename Puzzle> </div>
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html#l00333">333</a> of file <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html">a_star_search.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 334</span> : state(<a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">std::make_shared<Puzzle></a>(<a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">std::move</a>(<a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">A</a>.state))),</div>
|
||||
<div class="line"><span class="lineno"> 335</span> <a class="code hl_variable" href="#a331d1070d008a4f9d55775a51013baa3">heuristic_value</a>(<a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">std::move</a>(<a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">A</a>.heuristic_value)),</div>
|
||||
<div class="line"><span class="lineno"> 336</span> <a class="code hl_variable" href="#a003a30bb165be50ce503c17df90c128d">depth</a>(<a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">std::move</a>(<a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">A</a>.depth)) {}</div>
|
||||
<p class="definition">Definition at line <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html#l00335">335</a> of file <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html">a_star_search.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 336</span> : state(<a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">std::make_shared<Puzzle></a>(<a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">std::move</a>(<a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">A</a>.state))),</div>
|
||||
<div class="line"><span class="lineno"> 337</span> <a class="code hl_variable" href="#a331d1070d008a4f9d55775a51013baa3">heuristic_value</a>(<a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">std::move</a>(<a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">A</a>.heuristic_value)),</div>
|
||||
<div class="line"><span class="lineno"> 338</span> <a class="code hl_variable" href="#a003a30bb165be50ce503c17df90c128d">depth</a>(<a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">std::move</a>(<a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">A</a>.depth)) {}</div>
|
||||
</div><!-- fragment -->
|
||||
</div>
|
||||
</div>
|
||||
@@ -395,13 +395,13 @@ template<typename Puzzle> </div>
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html#l00342">342</a> of file <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html">a_star_search.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 342</span> {</div>
|
||||
<div class="line"><span class="lineno"> 343</span> state = <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">A</a>.state;</div>
|
||||
<div class="line"><span class="lineno"> 344</span> <a class="code hl_variable" href="#a331d1070d008a4f9d55775a51013baa3">heuristic_value</a> = <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">A</a>.heuristic_value;</div>
|
||||
<div class="line"><span class="lineno"> 345</span> <a class="code hl_variable" href="#a003a30bb165be50ce503c17df90c128d">depth</a> = <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">A</a>.depth;</div>
|
||||
<div class="line"><span class="lineno"> 346</span> <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
|
||||
<div class="line"><span class="lineno"> 347</span> }</div>
|
||||
<p class="definition">Definition at line <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html#l00344">344</a> of file <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html">a_star_search.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 344</span> {</div>
|
||||
<div class="line"><span class="lineno"> 345</span> state = <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">A</a>.state;</div>
|
||||
<div class="line"><span class="lineno"> 346</span> <a class="code hl_variable" href="#a331d1070d008a4f9d55775a51013baa3">heuristic_value</a> = <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">A</a>.heuristic_value;</div>
|
||||
<div class="line"><span class="lineno"> 347</span> <a class="code hl_variable" href="#a003a30bb165be50ce503c17df90c128d">depth</a> = <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">A</a>.depth;</div>
|
||||
<div class="line"><span class="lineno"> 348</span> <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
|
||||
<div class="line"><span class="lineno"> 349</span> }</div>
|
||||
</div><!-- fragment -->
|
||||
</div>
|
||||
</div>
|
||||
@@ -438,13 +438,13 @@ template<typename Puzzle> </div>
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html#l00353">353</a> of file <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html">a_star_search.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 353</span> {</div>
|
||||
<div class="line"><span class="lineno"> 354</span> state = <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">std::move</a>(<a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">A</a>.state);</div>
|
||||
<div class="line"><span class="lineno"> 355</span> <a class="code hl_variable" href="#a331d1070d008a4f9d55775a51013baa3">heuristic_value</a> = <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">std::move</a>(<a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">A</a>.heuristic_value);</div>
|
||||
<div class="line"><span class="lineno"> 356</span> <a class="code hl_variable" href="#a003a30bb165be50ce503c17df90c128d">depth</a> = <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">std::move</a>(<a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">A</a>.depth);</div>
|
||||
<div class="line"><span class="lineno"> 357</span> <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
|
||||
<div class="line"><span class="lineno"> 358</span> }</div>
|
||||
<p class="definition">Definition at line <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html#l00355">355</a> of file <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html">a_star_search.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 355</span> {</div>
|
||||
<div class="line"><span class="lineno"> 356</span> state = <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">std::move</a>(<a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">A</a>.state);</div>
|
||||
<div class="line"><span class="lineno"> 357</span> <a class="code hl_variable" href="#a331d1070d008a4f9d55775a51013baa3">heuristic_value</a> = <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">std::move</a>(<a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">A</a>.heuristic_value);</div>
|
||||
<div class="line"><span class="lineno"> 358</span> <a class="code hl_variable" href="#a003a30bb165be50ce503c17df90c128d">depth</a> = <a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">std::move</a>(<a class="code hl_class" href="../../da/d02/classmachine__learning_1_1aystar__search_1_1_ay_star_search.html">A</a>.depth);</div>
|
||||
<div class="line"><span class="lineno"> 359</span> <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
|
||||
<div class="line"><span class="lineno"> 360</span> }</div>
|
||||
</div><!-- fragment -->
|
||||
</div>
|
||||
</div>
|
||||
@@ -465,7 +465,7 @@ template<typename Puzzle> </div>
|
||||
|
||||
<p>stores h score </p>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html#l00296">296</a> of file <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html">a_star_search.cpp</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html#l00298">298</a> of file <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html">a_star_search.cpp</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@@ -485,7 +485,7 @@ template<typename Puzzle> </div>
|
||||
|
||||
<p>Holds the current state. </p>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html#l00295">295</a> of file <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html">a_star_search.cpp</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html#l00297">297</a> of file <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html">a_star_search.cpp</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@@ -503,7 +503,7 @@ template<typename Puzzle> </div>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html#l00294">294</a> of file <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html">a_star_search.cpp</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html#l00296">296</a> of file <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html">a_star_search.cpp</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -134,7 +134,7 @@ Classes</h2></td></tr>
|
||||
<p>Algorithms and Data Structures that support range queries and updates.</p>
|
||||
<p>for assert for IO operations</p>
|
||||
<p>Range Queries</p>
|
||||
<p>for IO operations to manage dynamic memory for std::vector</p>
|
||||
<p>for std::uint32_t for IO operations to manage dynamic memory for std::vector</p>
|
||||
<p>for assert for IO operations</p>
|
||||
<p>Range Queries algorithms </p>
|
||||
</div></div><!-- contents -->
|
||||
|
||||
@@ -189,7 +189,7 @@ class machine_learning::aystar_search::EightPuzzle< N ></div><p>A class de
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html#l00060">60</a> of file <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html">a_star_search.cpp</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html#l00062">62</a> of file <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html">a_star_search.cpp</a>.</p>
|
||||
</div><a name="doc-constructors" id="doc-constructors"></a><h2 id="header-doc-constructors" class="groupheader">Constructor & Destructor Documentation</h2>
|
||||
<a id="a3dc09f4742a0e1167ed202f7bf94721b" name="a3dc09f4742a0e1167ed202f7bf94721b"></a>
|
||||
<h2 class="memtitle"><span class="permalink"><a href="#a3dc09f4742a0e1167ed202f7bf94721b">◆ </a></span>EightPuzzle() <span class="overload">[1/4]</span></h2>
|
||||
@@ -218,15 +218,15 @@ template<size_t N = 3> </div>
|
||||
|
||||
<p>Default constructor for <a class="el" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html" title="A class defining EightPuzzle/15-Puzzle game.">EightPuzzle</a>. </p>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html#l00121">121</a> of file <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html">a_star_search.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 121</span> {</div>
|
||||
<div class="line"><span class="lineno"> 122</span> <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">i</a> = 0; <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">i</a> < <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">N</a>; ++<a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">i</a>) {</div>
|
||||
<div class="line"><span class="lineno"> 123</span> <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">j</a> = 0; <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">j</a> < <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">N</a>; ++<a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">j</a>) {</div>
|
||||
<div class="line"><span class="lineno"> 124</span> board[<a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">i</a>][<a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">j</a>] = ((<a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">i</a> * 3 + <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">j</a> + 1) % (<a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">N</a> * <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">N</a>));</div>
|
||||
<div class="line"><span class="lineno"> 125</span> }</div>
|
||||
<div class="line"><span class="lineno"> 126</span> }</div>
|
||||
<div class="line"><span class="lineno"> 127</span> }</div>
|
||||
<div class="ttc" id="aclassmachine__learning_1_1aystar__search_1_1_eight_puzzle_html"><div class="ttname"><a href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">machine_learning::aystar_search::EightPuzzle</a></div><div class="ttdoc">A class defining EightPuzzle/15-Puzzle game.</div><div class="ttdef"><b>Definition</b> <a href="../../dd/dec/a__star__search_8cpp_source.html#l00060">a_star_search.cpp:60</a></div></div>
|
||||
<p class="definition">Definition at line <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html#l00123">123</a> of file <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html">a_star_search.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 123</span> {</div>
|
||||
<div class="line"><span class="lineno"> 124</span> <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">i</a> = 0; <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">i</a> < <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">N</a>; ++<a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">i</a>) {</div>
|
||||
<div class="line"><span class="lineno"> 125</span> <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">j</a> = 0; <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">j</a> < <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">N</a>; ++<a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">j</a>) {</div>
|
||||
<div class="line"><span class="lineno"> 126</span> board[<a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">i</a>][<a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">j</a>] = ((<a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">i</a> * 3 + <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">j</a> + 1) % (<a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">N</a> * <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">N</a>));</div>
|
||||
<div class="line"><span class="lineno"> 127</span> }</div>
|
||||
<div class="line"><span class="lineno"> 128</span> }</div>
|
||||
<div class="line"><span class="lineno"> 129</span> }</div>
|
||||
<div class="ttc" id="aclassmachine__learning_1_1aystar__search_1_1_eight_puzzle_html"><div class="ttname"><a href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">machine_learning::aystar_search::EightPuzzle</a></div><div class="ttdoc">A class defining EightPuzzle/15-Puzzle game.</div><div class="ttdef"><b>Definition</b> <a href="../../dd/dec/a__star__search_8cpp_source.html#l00062">a_star_search.cpp:62</a></div></div>
|
||||
</div><!-- fragment -->
|
||||
</div>
|
||||
</div>
|
||||
@@ -263,8 +263,8 @@ template<size_t N = 3> </div>
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html#l00132">132</a> of file <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html">a_star_search.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 133</span> : board(<a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">init</a>) {}</div>
|
||||
<p class="definition">Definition at line <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html#l00134">134</a> of file <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html">a_star_search.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 135</span> : board(<a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">init</a>) {}</div>
|
||||
</div><!-- fragment -->
|
||||
</div>
|
||||
</div>
|
||||
@@ -301,8 +301,8 @@ template<size_t N = 3> </div>
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html#l00139">139</a> of file <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html">a_star_search.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 139</span>: board(<a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">A</a>.board) {}</div>
|
||||
<p class="definition">Definition at line <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html#l00141">141</a> of file <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html">a_star_search.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 141</span>: board(<a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">A</a>.board) {}</div>
|
||||
</div><!-- fragment -->
|
||||
</div>
|
||||
</div>
|
||||
@@ -339,8 +339,8 @@ template<size_t N = 3> </div>
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html#l00145">145</a> of file <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html">a_star_search.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 146</span> : board(<a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">std::move</a>(<a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">A</a>.board)) {}</div>
|
||||
<p class="definition">Definition at line <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html#l00147">147</a> of file <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html">a_star_search.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 148</span> : board(<a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">std::move</a>(<a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">A</a>.board)) {}</div>
|
||||
</div><!-- fragment -->
|
||||
</div>
|
||||
</div>
|
||||
@@ -373,17 +373,17 @@ template<size_t N = 3> </div>
|
||||
<p>A helper array to evaluate the next state from current state;. </p>
|
||||
<p>Finds an empty space in puzzle (in this case; a zero) </p><dl class="section return"><dt>Returns</dt><dd>a pair indicating integer distances from top and right respectively, else returns -1, -1 </dd></dl>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html#l00075">75</a> of file <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html">a_star_search.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 75</span> {</div>
|
||||
<div class="line"><span class="lineno"> 76</span> <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">i</a> = 0; <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">i</a> < <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">N</a>; ++<a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">i</a>) {</div>
|
||||
<div class="line"><span class="lineno"> 77</span> <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">j</a> = 0; <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">j</a> < <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">N</a>; ++<a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">j</a>) {</div>
|
||||
<div class="line"><span class="lineno"> 78</span> <span class="keywordflow">if</span> (!board[<a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">i</a>][<a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">j</a>]) {</div>
|
||||
<div class="line"><span class="lineno"> 79</span> <span class="keywordflow">return</span> {<a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">i</a>, <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">j</a>};</div>
|
||||
<div class="line"><span class="lineno"> 80</span> }</div>
|
||||
<div class="line"><span class="lineno"> 81</span> }</div>
|
||||
<div class="line"><span class="lineno"> 82</span> }</div>
|
||||
<div class="line"><span class="lineno"> 83</span> <span class="keywordflow">return</span> {-1, -1};</div>
|
||||
<div class="line"><span class="lineno"> 84</span> }</div>
|
||||
<p class="definition">Definition at line <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html#l00077">77</a> of file <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html">a_star_search.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 77</span> {</div>
|
||||
<div class="line"><span class="lineno"> 78</span> <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">i</a> = 0; <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">i</a> < <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">N</a>; ++<a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">i</a>) {</div>
|
||||
<div class="line"><span class="lineno"> 79</span> <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">j</a> = 0; <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">j</a> < <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">N</a>; ++<a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">j</a>) {</div>
|
||||
<div class="line"><span class="lineno"> 80</span> <span class="keywordflow">if</span> (!board[<a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">i</a>][<a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">j</a>]) {</div>
|
||||
<div class="line"><span class="lineno"> 81</span> <span class="keywordflow">return</span> {<a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">i</a>, <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">j</a>};</div>
|
||||
<div class="line"><span class="lineno"> 82</span> }</div>
|
||||
<div class="line"><span class="lineno"> 83</span> }</div>
|
||||
<div class="line"><span class="lineno"> 84</span> }</div>
|
||||
<div class="line"><span class="lineno"> 85</span> <span class="keywordflow">return</span> {-1, -1};</div>
|
||||
<div class="line"><span class="lineno"> 86</span> }</div>
|
||||
</div><!-- fragment -->
|
||||
</div>
|
||||
</div>
|
||||
@@ -416,30 +416,30 @@ template<size_t N = 3> </div>
|
||||
<dl class="section return"><dt>Returns</dt><dd>list of vector containing all possible next moves </dd></dl>
|
||||
<dl class="section note"><dt>Note</dt><dd>the implementation is compulsory to create A* search </dd></dl>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html#l00176">176</a> of file <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html">a_star_search.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 176</span> {</div>
|
||||
<div class="line"><span class="lineno"> 177</span> <span class="keyword">auto</span> <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">zero_pos</a> = <a class="code hl_function" href="#a94f794bf44f424b1b0ca6ef9f4f6ebd3">find_zero</a>();</div>
|
||||
<div class="line"><span class="lineno"> 178</span> <span class="comment">// vector which will contain all possible state from current state</span></div>
|
||||
<div class="line"><span class="lineno"> 179</span> <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">std::vector<EightPuzzle<N></a>> <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">NewStates</a>;</div>
|
||||
<div class="line"><span class="lineno"> 180</span> <span class="keywordflow">for</span> (<span class="keyword">auto</span> &<a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">move</a> : <a class="code hl_variable" href="#aa73857052e69b86347859d9148933f71">moves</a>) {</div>
|
||||
<div class="line"><span class="lineno"> 181</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="#a48d054230468b79037964f474d842b6e">in_range</a>(<a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">zero_pos</a>.first + <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">move</a>.first) &&</div>
|
||||
<div class="line"><span class="lineno"> 182</span> <a class="code hl_function" href="#a48d054230468b79037964f474d842b6e">in_range</a>(<a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">zero_pos</a>.second + <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">move</a>.second)) {</div>
|
||||
<div class="line"><span class="lineno"> 183</span> <span class="comment">// swap with the possible moves</span></div>
|
||||
<div class="line"><span class="lineno"> 184</span> <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">std::array<std::array<uint32_t, N></a>, <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">N</a>> <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">new_config</a> = board;</div>
|
||||
<div class="line"><span class="lineno"> 185</span> <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">std::swap</a>(<a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">new_config</a>[<a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">zero_pos</a>.first][<a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">zero_pos</a>.second],</div>
|
||||
<div class="line"><span class="lineno"> 186</span> <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">new_config</a>[<a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">zero_pos</a>.first + <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">move</a>.first]</div>
|
||||
<div class="line"><span class="lineno"> 187</span> [<a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">zero_pos</a>.second + <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">move</a>.second]);</div>
|
||||
<div class="line"><span class="lineno"> 188</span> <a class="code hl_function" href="#a3dc09f4742a0e1167ed202f7bf94721b">EightPuzzle<N></a> <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">new_state</a>(<a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">new_config</a>);</div>
|
||||
<div class="line"><span class="lineno"> 189</span> <span class="comment">// Store new state and calculate heuristic value, and depth</span></div>
|
||||
<div class="line"><span class="lineno"> 190</span> <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">NewStates</a>.emplace_back(<a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">new_state</a>);</div>
|
||||
<div class="line"><span class="lineno"> 191</span> }</div>
|
||||
<div class="line"><span class="lineno"> 192</span> }</div>
|
||||
<div class="line"><span class="lineno"> 193</span> <span class="keywordflow">return</span> <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">NewStates</a>;</div>
|
||||
<div class="line"><span class="lineno"> 194</span> }</div>
|
||||
<div class="ttc" id="aclassmachine__learning_1_1aystar__search_1_1_eight_puzzle_html_a3dc09f4742a0e1167ed202f7bf94721b"><div class="ttname"><a href="#a3dc09f4742a0e1167ed202f7bf94721b">machine_learning::aystar_search::EightPuzzle::EightPuzzle</a></div><div class="ttdeci">EightPuzzle()</div><div class="ttdoc">Default constructor for EightPuzzle.</div><div class="ttdef"><b>Definition</b> <a href="../../dd/dec/a__star__search_8cpp_source.html#l00121">a_star_search.cpp:121</a></div></div>
|
||||
<div class="ttc" id="aclassmachine__learning_1_1aystar__search_1_1_eight_puzzle_html_a48d054230468b79037964f474d842b6e"><div class="ttname"><a href="#a48d054230468b79037964f474d842b6e">machine_learning::aystar_search::EightPuzzle::in_range</a></div><div class="ttdeci">bool in_range(const uint32_t value) const</div><div class="ttdoc">check whether the index value is bounded within the puzzle area</div><div class="ttdef"><b>Definition</b> <a href="../../dd/dec/a__star__search_8cpp_source.html#l00090">a_star_search.cpp:90</a></div></div>
|
||||
<div class="ttc" id="aclassmachine__learning_1_1aystar__search_1_1_eight_puzzle_html_a94f794bf44f424b1b0ca6ef9f4f6ebd3"><div class="ttname"><a href="#a94f794bf44f424b1b0ca6ef9f4f6ebd3">machine_learning::aystar_search::EightPuzzle::find_zero</a></div><div class="ttdeci">std::pair< uint32_t, uint32_t > find_zero()</div><div class="ttdoc">A helper array to evaluate the next state from current state;.</div><div class="ttdef"><b>Definition</b> <a href="../../dd/dec/a__star__search_8cpp_source.html#l00075">a_star_search.cpp:75</a></div></div>
|
||||
<div class="ttc" id="aclassmachine__learning_1_1aystar__search_1_1_eight_puzzle_html_aa73857052e69b86347859d9148933f71"><div class="ttname"><a href="#aa73857052e69b86347859d9148933f71">machine_learning::aystar_search::EightPuzzle::moves</a></div><div class="ttdeci">std::vector< std::pair< int8_t, int8_t > > moves</div><div class="ttdoc">N x N array to store the current state of the Puzzle.</div><div class="ttdef"><b>Definition</b> <a href="../../dd/dec/a__star__search_8cpp_source.html#l00064">a_star_search.cpp:64</a></div></div>
|
||||
<p class="definition">Definition at line <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html#l00178">178</a> of file <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html">a_star_search.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 178</span> {</div>
|
||||
<div class="line"><span class="lineno"> 179</span> <span class="keyword">auto</span> <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">zero_pos</a> = <a class="code hl_function" href="#a94f794bf44f424b1b0ca6ef9f4f6ebd3">find_zero</a>();</div>
|
||||
<div class="line"><span class="lineno"> 180</span> <span class="comment">// vector which will contain all possible state from current state</span></div>
|
||||
<div class="line"><span class="lineno"> 181</span> <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">std::vector<EightPuzzle<N></a>> <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">NewStates</a>;</div>
|
||||
<div class="line"><span class="lineno"> 182</span> <span class="keywordflow">for</span> (<span class="keyword">auto</span> &<a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">move</a> : <a class="code hl_variable" href="#aa73857052e69b86347859d9148933f71">moves</a>) {</div>
|
||||
<div class="line"><span class="lineno"> 183</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="#a48d054230468b79037964f474d842b6e">in_range</a>(<a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">zero_pos</a>.first + <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">move</a>.first) &&</div>
|
||||
<div class="line"><span class="lineno"> 184</span> <a class="code hl_function" href="#a48d054230468b79037964f474d842b6e">in_range</a>(<a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">zero_pos</a>.second + <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">move</a>.second)) {</div>
|
||||
<div class="line"><span class="lineno"> 185</span> <span class="comment">// swap with the possible moves</span></div>
|
||||
<div class="line"><span class="lineno"> 186</span> <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">std::array<std::array<uint32_t, N></a>, <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">N</a>> <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">new_config</a> = board;</div>
|
||||
<div class="line"><span class="lineno"> 187</span> <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">std::swap</a>(<a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">new_config</a>[<a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">zero_pos</a>.first][<a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">zero_pos</a>.second],</div>
|
||||
<div class="line"><span class="lineno"> 188</span> <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">new_config</a>[<a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">zero_pos</a>.first + <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">move</a>.first]</div>
|
||||
<div class="line"><span class="lineno"> 189</span> [<a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">zero_pos</a>.second + <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">move</a>.second]);</div>
|
||||
<div class="line"><span class="lineno"> 190</span> <a class="code hl_function" href="#a3dc09f4742a0e1167ed202f7bf94721b">EightPuzzle<N></a> <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">new_state</a>(<a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">new_config</a>);</div>
|
||||
<div class="line"><span class="lineno"> 191</span> <span class="comment">// Store new state and calculate heuristic value, and depth</span></div>
|
||||
<div class="line"><span class="lineno"> 192</span> <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">NewStates</a>.emplace_back(<a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">new_state</a>);</div>
|
||||
<div class="line"><span class="lineno"> 193</span> }</div>
|
||||
<div class="line"><span class="lineno"> 194</span> }</div>
|
||||
<div class="line"><span class="lineno"> 195</span> <span class="keywordflow">return</span> <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">NewStates</a>;</div>
|
||||
<div class="line"><span class="lineno"> 196</span> }</div>
|
||||
<div class="ttc" id="aclassmachine__learning_1_1aystar__search_1_1_eight_puzzle_html_a3dc09f4742a0e1167ed202f7bf94721b"><div class="ttname"><a href="#a3dc09f4742a0e1167ed202f7bf94721b">machine_learning::aystar_search::EightPuzzle::EightPuzzle</a></div><div class="ttdeci">EightPuzzle()</div><div class="ttdoc">Default constructor for EightPuzzle.</div><div class="ttdef"><b>Definition</b> <a href="../../dd/dec/a__star__search_8cpp_source.html#l00123">a_star_search.cpp:123</a></div></div>
|
||||
<div class="ttc" id="aclassmachine__learning_1_1aystar__search_1_1_eight_puzzle_html_a48d054230468b79037964f474d842b6e"><div class="ttname"><a href="#a48d054230468b79037964f474d842b6e">machine_learning::aystar_search::EightPuzzle::in_range</a></div><div class="ttdeci">bool in_range(const uint32_t value) const</div><div class="ttdoc">check whether the index value is bounded within the puzzle area</div><div class="ttdef"><b>Definition</b> <a href="../../dd/dec/a__star__search_8cpp_source.html#l00092">a_star_search.cpp:92</a></div></div>
|
||||
<div class="ttc" id="aclassmachine__learning_1_1aystar__search_1_1_eight_puzzle_html_a94f794bf44f424b1b0ca6ef9f4f6ebd3"><div class="ttname"><a href="#a94f794bf44f424b1b0ca6ef9f4f6ebd3">machine_learning::aystar_search::EightPuzzle::find_zero</a></div><div class="ttdeci">std::pair< uint32_t, uint32_t > find_zero()</div><div class="ttdoc">A helper array to evaluate the next state from current state;.</div><div class="ttdef"><b>Definition</b> <a href="../../dd/dec/a__star__search_8cpp_source.html#l00077">a_star_search.cpp:77</a></div></div>
|
||||
<div class="ttc" id="aclassmachine__learning_1_1aystar__search_1_1_eight_puzzle_html_aa73857052e69b86347859d9148933f71"><div class="ttname"><a href="#aa73857052e69b86347859d9148933f71">machine_learning::aystar_search::EightPuzzle::moves</a></div><div class="ttdeci">std::vector< std::pair< int8_t, int8_t > > moves</div><div class="ttdoc">N x N array to store the current state of the Puzzle.</div><div class="ttdef"><b>Definition</b> <a href="../../dd/dec/a__star__search_8cpp_source.html#l00066">a_star_search.cpp:66</a></div></div>
|
||||
</div><!-- fragment -->
|
||||
</div>
|
||||
</div>
|
||||
@@ -484,13 +484,13 @@ template<size_t N = 3> </div>
|
||||
<dd>
|
||||
-1 if invalid i or j position </dd></dl>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html#l00102">102</a> of file <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html">a_star_search.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 102</span> {</div>
|
||||
<div class="line"><span class="lineno"> 103</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="#a48d054230468b79037964f474d842b6e">in_range</a>(<a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">i</a>) && <a class="code hl_function" href="#a48d054230468b79037964f474d842b6e">in_range</a>(<a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">j</a>)) {</div>
|
||||
<div class="line"><span class="lineno"> 104</span> <span class="keywordflow">return</span> board[<a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">i</a>][<a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">j</a>];</div>
|
||||
<div class="line"><span class="lineno"> 105</span> }</div>
|
||||
<div class="line"><span class="lineno"> 106</span> <span class="keywordflow">return</span> -1;</div>
|
||||
<div class="line"><span class="lineno"> 107</span> }</div>
|
||||
<p class="definition">Definition at line <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html#l00104">104</a> of file <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html">a_star_search.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 104</span> {</div>
|
||||
<div class="line"><span class="lineno"> 105</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="#a48d054230468b79037964f474d842b6e">in_range</a>(<a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">i</a>) && <a class="code hl_function" href="#a48d054230468b79037964f474d842b6e">in_range</a>(<a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">j</a>)) {</div>
|
||||
<div class="line"><span class="lineno"> 106</span> <span class="keywordflow">return</span> board[<a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">i</a>][<a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">j</a>];</div>
|
||||
<div class="line"><span class="lineno"> 107</span> }</div>
|
||||
<div class="line"><span class="lineno"> 108</span> <span class="keywordflow">return</span> -1;</div>
|
||||
<div class="line"><span class="lineno"> 109</span> }</div>
|
||||
</div><!-- fragment -->
|
||||
</div>
|
||||
</div>
|
||||
@@ -522,8 +522,8 @@ template<size_t N = 3> </div>
|
||||
<p>returns the size of the <a class="el" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html" title="A class defining EightPuzzle/15-Puzzle game.">EightPuzzle</a> (number of row / column) </p>
|
||||
<dl class="section return"><dt>Returns</dt><dd>N, the size of the puzzle. </dd></dl>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html#l00117">117</a> of file <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html">a_star_search.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 117</span>{ <span class="keywordflow">return</span> <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">N</a>; }</div>
|
||||
<p class="definition">Definition at line <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html#l00119">119</a> of file <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html">a_star_search.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 119</span>{ <span class="keywordflow">return</span> <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">N</a>; }</div>
|
||||
</div><!-- fragment -->
|
||||
</div>
|
||||
</div>
|
||||
@@ -554,8 +554,8 @@ template<size_t N = 3> </div>
|
||||
|
||||
<p>Returns the current state of the board. </p>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html#l00111">111</a> of file <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html">a_star_search.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 111</span>{ <span class="keywordflow">return</span> board; }</div>
|
||||
<p class="definition">Definition at line <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html#l00113">113</a> of file <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html">a_star_search.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 113</span>{ <span class="keywordflow">return</span> board; }</div>
|
||||
</div><!-- fragment -->
|
||||
</div>
|
||||
</div>
|
||||
@@ -593,8 +593,8 @@ template<size_t N = 3> </div>
|
||||
</dl>
|
||||
<dl class="section return"><dt>Returns</dt><dd><span class="tt">true</span> if index is within the board, else <span class="tt">false</span> </dd></dl>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html#l00090">90</a> of file <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html">a_star_search.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 90</span>{ <span class="keywordflow">return</span> <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">value</a> < <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">N</a>; }</div>
|
||||
<p class="definition">Definition at line <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html#l00092">92</a> of file <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html">a_star_search.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 92</span>{ <span class="keywordflow">return</span> <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">value</a> < <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">N</a>; }</div>
|
||||
</div><!-- fragment -->
|
||||
</div>
|
||||
</div>
|
||||
@@ -626,17 +626,17 @@ template<size_t N = 3> </div>
|
||||
<p>check whether one board is lexicographically smaller </p>
|
||||
<dl class="section return"><dt>Returns</dt><dd><span class="tt">true</span> if this->state is lexicographically smaller than <span class="tt">check.state</span>, else <span class="tt">false</span> </dd></dl>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html#l00218">218</a> of file <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html">a_star_search.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 218</span> {</div>
|
||||
<div class="line"><span class="lineno"> 219</span> <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">i</a> = 0; <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">i</a> < <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">N</a>; ++<a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">i</a>) {</div>
|
||||
<div class="line"><span class="lineno"> 220</span> <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">j</a> = 0; <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">j</a> < <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">N</a>; ++<a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">j</a>) {</div>
|
||||
<div class="line"><span class="lineno"> 221</span> <span class="keywordflow">if</span> (board[<a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">i</a>][<a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">j</a>] != <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">check</a>.board[<a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">i</a>][<a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">j</a>]) {</div>
|
||||
<div class="line"><span class="lineno"> 222</span> <span class="keywordflow">return</span> board[<a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">i</a>][<a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">j</a>] < <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">check</a>.board[<a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">i</a>][<a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">j</a>];</div>
|
||||
<div class="line"><span class="lineno"> 223</span> }</div>
|
||||
<div class="line"><span class="lineno"> 224</span> }</div>
|
||||
<div class="line"><span class="lineno"> 225</span> }</div>
|
||||
<div class="line"><span class="lineno"> 226</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
|
||||
<div class="line"><span class="lineno"> 227</span> }</div>
|
||||
<p class="definition">Definition at line <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html#l00220">220</a> of file <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html">a_star_search.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 220</span> {</div>
|
||||
<div class="line"><span class="lineno"> 221</span> <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">i</a> = 0; <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">i</a> < <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">N</a>; ++<a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">i</a>) {</div>
|
||||
<div class="line"><span class="lineno"> 222</span> <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">j</a> = 0; <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">j</a> < <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">N</a>; ++<a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">j</a>) {</div>
|
||||
<div class="line"><span class="lineno"> 223</span> <span class="keywordflow">if</span> (board[<a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">i</a>][<a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">j</a>] != <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">check</a>.board[<a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">i</a>][<a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">j</a>]) {</div>
|
||||
<div class="line"><span class="lineno"> 224</span> <span class="keywordflow">return</span> board[<a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">i</a>][<a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">j</a>] < <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">check</a>.board[<a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">i</a>][<a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">j</a>];</div>
|
||||
<div class="line"><span class="lineno"> 225</span> }</div>
|
||||
<div class="line"><span class="lineno"> 226</span> }</div>
|
||||
<div class="line"><span class="lineno"> 227</span> }</div>
|
||||
<div class="line"><span class="lineno"> 228</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
|
||||
<div class="line"><span class="lineno"> 229</span> }</div>
|
||||
</div><!-- fragment -->
|
||||
</div>
|
||||
</div>
|
||||
@@ -668,17 +668,17 @@ template<size_t N = 3> </div>
|
||||
<p>check whether one board is lexicographically smaller or equal </p>
|
||||
<dl class="section return"><dt>Returns</dt><dd><span class="tt">true</span> if this->state is lexicographically smaller than <span class="tt">check.state</span> or same, else <span class="tt">false</span> </dd></dl>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html#l00233">233</a> of file <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html">a_star_search.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 233</span> {</div>
|
||||
<div class="line"><span class="lineno"> 234</span> <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">i</a> = 0; <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">i</a> < <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">N</a>; ++<a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">i</a>) {</div>
|
||||
<div class="line"><span class="lineno"> 235</span> <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">j</a> = 0; <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">j</a> < <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">N</a>; ++<a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">j</a>) {</div>
|
||||
<div class="line"><span class="lineno"> 236</span> <span class="keywordflow">if</span> (board[<a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">i</a>][<a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">j</a>] != <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">check</a>.board[<a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">i</a>][<a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">j</a>]) {</div>
|
||||
<div class="line"><span class="lineno"> 237</span> <span class="keywordflow">return</span> board[<a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">i</a>][<a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">j</a>] < <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">check</a>.board[<a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">i</a>][<a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">j</a>];</div>
|
||||
<div class="line"><span class="lineno"> 238</span> }</div>
|
||||
<div class="line"><span class="lineno"> 239</span> }</div>
|
||||
<div class="line"><span class="lineno"> 240</span> }</div>
|
||||
<div class="line"><span class="lineno"> 241</span> <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
|
||||
<div class="line"><span class="lineno"> 242</span> }</div>
|
||||
<p class="definition">Definition at line <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html#l00235">235</a> of file <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html">a_star_search.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 235</span> {</div>
|
||||
<div class="line"><span class="lineno"> 236</span> <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">i</a> = 0; <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">i</a> < <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">N</a>; ++<a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">i</a>) {</div>
|
||||
<div class="line"><span class="lineno"> 237</span> <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">j</a> = 0; <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">j</a> < <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">N</a>; ++<a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">j</a>) {</div>
|
||||
<div class="line"><span class="lineno"> 238</span> <span class="keywordflow">if</span> (board[<a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">i</a>][<a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">j</a>] != <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">check</a>.board[<a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">i</a>][<a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">j</a>]) {</div>
|
||||
<div class="line"><span class="lineno"> 239</span> <span class="keywordflow">return</span> board[<a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">i</a>][<a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">j</a>] < <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">check</a>.board[<a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">i</a>][<a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">j</a>];</div>
|
||||
<div class="line"><span class="lineno"> 240</span> }</div>
|
||||
<div class="line"><span class="lineno"> 241</span> }</div>
|
||||
<div class="line"><span class="lineno"> 242</span> }</div>
|
||||
<div class="line"><span class="lineno"> 243</span> <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
|
||||
<div class="line"><span class="lineno"> 244</span> }</div>
|
||||
</div><!-- fragment -->
|
||||
</div>
|
||||
</div>
|
||||
@@ -715,11 +715,11 @@ template<size_t N = 3> </div>
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html#l00156">156</a> of file <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html">a_star_search.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 156</span> {</div>
|
||||
<div class="line"><span class="lineno"> 157</span> board = <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">A</a>.board;</div>
|
||||
<div class="line"><span class="lineno"> 158</span> <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
|
||||
<div class="line"><span class="lineno"> 159</span> }</div>
|
||||
<p class="definition">Definition at line <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html#l00158">158</a> of file <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html">a_star_search.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 158</span> {</div>
|
||||
<div class="line"><span class="lineno"> 159</span> board = <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">A</a>.board;</div>
|
||||
<div class="line"><span class="lineno"> 160</span> <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
|
||||
<div class="line"><span class="lineno"> 161</span> }</div>
|
||||
</div><!-- fragment -->
|
||||
</div>
|
||||
</div>
|
||||
@@ -756,11 +756,11 @@ template<size_t N = 3> </div>
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html#l00165">165</a> of file <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html">a_star_search.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 165</span> {</div>
|
||||
<div class="line"><span class="lineno"> 166</span> board = <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">std::move</a>(<a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">A</a>.board);</div>
|
||||
<div class="line"><span class="lineno"> 167</span> <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
|
||||
<div class="line"><span class="lineno"> 168</span> }</div>
|
||||
<p class="definition">Definition at line <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html#l00167">167</a> of file <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html">a_star_search.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 167</span> {</div>
|
||||
<div class="line"><span class="lineno"> 168</span> board = <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">std::move</a>(<a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">A</a>.board);</div>
|
||||
<div class="line"><span class="lineno"> 169</span> <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
|
||||
<div class="line"><span class="lineno"> 170</span> }</div>
|
||||
</div><!-- fragment -->
|
||||
</div>
|
||||
</div>
|
||||
@@ -792,21 +792,21 @@ template<size_t N = 3> </div>
|
||||
<p>check whether two boards are equal </p>
|
||||
<dl class="section return"><dt>Returns</dt><dd><span class="tt">true</span> if check.state is equal to <span class="tt">this->state</span>, else <span class="tt">false</span> </dd></dl>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html#l00200">200</a> of file <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html">a_star_search.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 200</span> {</div>
|
||||
<div class="line"><span class="lineno"> 201</span> <span class="keywordflow">if</span> (<a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">check</a>.<a class="code hl_function" href="#ae145ac4a0d2ec58945b58fad3c04f00f">get_size</a>() != <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">N</a>) {</div>
|
||||
<div class="line"><span class="lineno"> 202</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
|
||||
<div class="line"><span class="lineno"> 203</span> }</div>
|
||||
<div class="line"><span class="lineno"> 204</span> <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">i</a> = 0; <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">i</a> < <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">N</a>; ++<a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">i</a>) {</div>
|
||||
<div class="line"><span class="lineno"> 205</span> <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">j</a> = 0; <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">j</a> < <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">N</a>; ++<a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">j</a>) {</div>
|
||||
<div class="line"><span class="lineno"> 206</span> <span class="keywordflow">if</span> (board[<a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">i</a>][<a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">j</a>] != <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">check</a>.board[<a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">i</a>][<a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">j</a>]) {</div>
|
||||
<div class="line"><span class="lineno"> 207</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
|
||||
<div class="line"><span class="lineno"> 208</span> }</div>
|
||||
<div class="line"><span class="lineno"> 209</span> }</div>
|
||||
<div class="line"><span class="lineno"> 210</span> }</div>
|
||||
<div class="line"><span class="lineno"> 211</span> <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
|
||||
<div class="line"><span class="lineno"> 212</span> }</div>
|
||||
<div class="ttc" id="aclassmachine__learning_1_1aystar__search_1_1_eight_puzzle_html_ae145ac4a0d2ec58945b58fad3c04f00f"><div class="ttname"><a href="#ae145ac4a0d2ec58945b58fad3c04f00f">machine_learning::aystar_search::EightPuzzle::get_size</a></div><div class="ttdeci">size_t get_size() const</div><div class="ttdoc">returns the size of the EightPuzzle (number of row / column)</div><div class="ttdef"><b>Definition</b> <a href="../../dd/dec/a__star__search_8cpp_source.html#l00117">a_star_search.cpp:117</a></div></div>
|
||||
<p class="definition">Definition at line <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html#l00202">202</a> of file <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html">a_star_search.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 202</span> {</div>
|
||||
<div class="line"><span class="lineno"> 203</span> <span class="keywordflow">if</span> (<a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">check</a>.<a class="code hl_function" href="#ae145ac4a0d2ec58945b58fad3c04f00f">get_size</a>() != <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">N</a>) {</div>
|
||||
<div class="line"><span class="lineno"> 204</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
|
||||
<div class="line"><span class="lineno"> 205</span> }</div>
|
||||
<div class="line"><span class="lineno"> 206</span> <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">i</a> = 0; <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">i</a> < <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">N</a>; ++<a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">i</a>) {</div>
|
||||
<div class="line"><span class="lineno"> 207</span> <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">j</a> = 0; <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">j</a> < <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">N</a>; ++<a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">j</a>) {</div>
|
||||
<div class="line"><span class="lineno"> 208</span> <span class="keywordflow">if</span> (board[<a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">i</a>][<a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">j</a>] != <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">check</a>.board[<a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">i</a>][<a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">j</a>]) {</div>
|
||||
<div class="line"><span class="lineno"> 209</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
|
||||
<div class="line"><span class="lineno"> 210</span> }</div>
|
||||
<div class="line"><span class="lineno"> 211</span> }</div>
|
||||
<div class="line"><span class="lineno"> 212</span> }</div>
|
||||
<div class="line"><span class="lineno"> 213</span> <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
|
||||
<div class="line"><span class="lineno"> 214</span> }</div>
|
||||
<div class="ttc" id="aclassmachine__learning_1_1aystar__search_1_1_eight_puzzle_html_ae145ac4a0d2ec58945b58fad3c04f00f"><div class="ttname"><a href="#ae145ac4a0d2ec58945b58fad3c04f00f">machine_learning::aystar_search::EightPuzzle::get_size</a></div><div class="ttdeci">size_t get_size() const</div><div class="ttdoc">returns the size of the EightPuzzle (number of row / column)</div><div class="ttdef"><b>Definition</b> <a href="../../dd/dec/a__star__search_8cpp_source.html#l00119">a_star_search.cpp:119</a></div></div>
|
||||
</div><!-- fragment -->
|
||||
</div>
|
||||
</div>
|
||||
@@ -850,16 +850,16 @@ template<size_t N = 3> </div>
|
||||
</dl>
|
||||
<dl class="section return"><dt>Returns</dt><dd>ostream operator op </dd></dl>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html#l00250">250</a> of file <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html">a_star_search.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 251</span> {</div>
|
||||
<div class="line"><span class="lineno"> 252</span> <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">i</a> = 0; <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">i</a> < <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">N</a>; ++<a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">i</a>) {</div>
|
||||
<div class="line"><span class="lineno"> 253</span> <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">j</a> = 0; <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">j</a> < <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">N</a>; ++<a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">j</a>) {</div>
|
||||
<div class="line"><span class="lineno"> 254</span> <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">op</a> << <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">SomeState</a>.board[<a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">i</a>][<a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">j</a>] << <span class="stringliteral">" "</span>;</div>
|
||||
<div class="line"><span class="lineno"> 255</span> }</div>
|
||||
<div class="line"><span class="lineno"> 256</span> <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">op</a> << <span class="stringliteral">"\n"</span>;</div>
|
||||
<div class="line"><span class="lineno"> 257</span> }</div>
|
||||
<div class="line"><span class="lineno"> 258</span> <span class="keywordflow">return</span> <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">op</a>;</div>
|
||||
<div class="line"><span class="lineno"> 259</span> }</div>
|
||||
<p class="definition">Definition at line <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html#l00252">252</a> of file <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html">a_star_search.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 253</span> {</div>
|
||||
<div class="line"><span class="lineno"> 254</span> <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">i</a> = 0; <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">i</a> < <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">N</a>; ++<a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">i</a>) {</div>
|
||||
<div class="line"><span class="lineno"> 255</span> <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">j</a> = 0; <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">j</a> < <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">N</a>; ++<a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">j</a>) {</div>
|
||||
<div class="line"><span class="lineno"> 256</span> <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">op</a> << <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">SomeState</a>.board[<a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">i</a>][<a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">j</a>] << <span class="stringliteral">" "</span>;</div>
|
||||
<div class="line"><span class="lineno"> 257</span> }</div>
|
||||
<div class="line"><span class="lineno"> 258</span> <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">op</a> << <span class="stringliteral">"\n"</span>;</div>
|
||||
<div class="line"><span class="lineno"> 259</span> }</div>
|
||||
<div class="line"><span class="lineno"> 260</span> <span class="keywordflow">return</span> <a class="code hl_class" href="../../dd/d9c/classmachine__learning_1_1aystar__search_1_1_eight_puzzle.html">op</a>;</div>
|
||||
<div class="line"><span class="lineno"> 261</span> }</div>
|
||||
</div><!-- fragment -->
|
||||
</div>
|
||||
</div>
|
||||
@@ -886,7 +886,7 @@ template<size_t N = 3> </div>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html#l00062">62</a> of file <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html">a_star_search.cpp</a>.</p>
|
||||
<p class="definition">Definition at line <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html#l00064">64</a> of file <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html">a_star_search.cpp</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@@ -920,13 +920,13 @@ template<size_t N = 3> </div>
|
||||
</div><!-- fragment -->
|
||||
<p>N x N array to store the current state of the Puzzle. </p>
|
||||
|
||||
<p class="definition">Definition at line <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html#l00064">64</a> of file <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html">a_star_search.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 64</span> {</div>
|
||||
<div class="line"><span class="lineno"> 65</span> {0, 1},</div>
|
||||
<div class="line"><span class="lineno"> 66</span> {1, 0},</div>
|
||||
<div class="line"><span class="lineno"> 67</span> {0, -1},</div>
|
||||
<div class="line"><span class="lineno"> 68</span> {-1,</div>
|
||||
<div class="line"><span class="lineno"> 69</span> 0}}; </div>
|
||||
<p class="definition">Definition at line <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html#l00066">66</a> of file <a class="el" href="../../dd/dec/a__star__search_8cpp_source.html">a_star_search.cpp</a>.</p>
|
||||
<div class="fragment"><div class="line"><span class="lineno"> 66</span> {</div>
|
||||
<div class="line"><span class="lineno"> 67</span> {0, 1},</div>
|
||||
<div class="line"><span class="lineno"> 68</span> {1, 0},</div>
|
||||
<div class="line"><span class="lineno"> 69</span> {0, -1},</div>
|
||||
<div class="line"><span class="lineno"> 70</span> {-1,</div>
|
||||
<div class="line"><span class="lineno"> 71</span> 0}}; </div>
|
||||
</div><!-- fragment -->
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -1,13 +1,15 @@
|
||||
<map id="data_structures/trie_tree.cpp" name="data_structures/trie_tree.cpp">
|
||||
<area shape="rect" id="Node000001" title="Implementation of Trie data structure for English alphabets in small characters." alt="" coords="137,5,270,46"/>
|
||||
<area shape="rect" id="Node000001" title="Implementation of Trie data structure for English alphabets in small characters." alt="" coords="176,5,309,46"/>
|
||||
<area shape="rect" id="Node000002" title=" " alt="" coords="5,94,56,120"/>
|
||||
<area shape="poly" id="edge1_Node000001_Node000002" title=" " alt="" coords="162,49,71,90,69,85,159,44"/>
|
||||
<area shape="poly" id="edge1_Node000001_Node000002" title=" " alt="" coords="190,49,71,93,69,88,189,44"/>
|
||||
<area shape="rect" id="Node000003" title=" " alt="" coords="80,94,144,120"/>
|
||||
<area shape="poly" id="edge2_Node000001_Node000003" title=" " alt="" coords="183,48,139,86,136,82,179,44"/>
|
||||
<area shape="rect" id="Node000004" title=" " alt="" coords="168,94,240,120"/>
|
||||
<area shape="poly" id="edge3_Node000001_Node000004" title=" " alt="" coords="206,46,206,78,201,78,201,46"/>
|
||||
<area shape="rect" id="Node000005" title=" " alt="" coords="263,94,331,120"/>
|
||||
<area shape="poly" id="edge4_Node000001_Node000005" title=" " alt="" coords="229,44,273,82,269,86,225,48"/>
|
||||
<area shape="rect" id="Node000006" title=" " alt="" coords="356,94,409,120"/>
|
||||
<area shape="poly" id="edge5_Node000001_Node000006" title=" " alt="" coords="250,44,343,85,341,90,247,49"/>
|
||||
<area shape="poly" id="edge2_Node000001_Node000003" title=" " alt="" coords="211,49,146,88,143,83,208,44"/>
|
||||
<area shape="rect" id="Node000004" title=" " alt="" coords="168,94,229,120"/>
|
||||
<area shape="poly" id="edge3_Node000001_Node000004" title=" " alt="" coords="234,48,215,82,210,79,229,45"/>
|
||||
<area shape="rect" id="Node000005" title=" " alt="" coords="252,94,324,120"/>
|
||||
<area shape="poly" id="edge4_Node000001_Node000005" title=" " alt="" coords="256,45,276,79,271,82,251,48"/>
|
||||
<area shape="rect" id="Node000006" title=" " alt="" coords="347,94,415,120"/>
|
||||
<area shape="poly" id="edge5_Node000001_Node000006" title=" " alt="" coords="278,44,348,84,346,88,276,49"/>
|
||||
<area shape="rect" id="Node000007" title=" " alt="" coords="440,94,493,120"/>
|
||||
<area shape="poly" id="edge6_Node000001_Node000007" title=" " alt="" coords="299,44,426,89,425,94,298,49"/>
|
||||
</map>
|
||||
|
||||
@@ -1 +1 @@
|
||||
25563c9822626b8e6bcc2e85f96288f5
|
||||
940b2d7c888c712661bea1640683da0f
|
||||
@@ -4,8 +4,8 @@
|
||||
<!-- Generated by graphviz version 13.1.2 (20250808.2320)
|
||||
-->
|
||||
<!-- Title: data_structures/trie_tree.cpp Pages: 1 -->
|
||||
<svg width="311pt" height="94pt"
|
||||
viewBox="0.00 0.00 311.00 94.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<svg width="374pt" height="94pt"
|
||||
viewBox="0.00 0.00 374.00 94.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
|
||||
<svg id="main" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve">
|
||||
|
||||
@@ -23,9 +23,9 @@
|
||||
<g id="Node000001" class="node">
|
||||
<title>Node1</title>
|
||||
<g id="a_Node000001"><a xlink:title="Implementation of Trie data structure for English alphabets in small characters.">
|
||||
<polygon fill="#999999" stroke="#666666" points="198.88,-85.75 98.88,-85.75 98.88,-55.25 198.88,-55.25 198.88,-85.75"/>
|
||||
<text xml:space="preserve" text-anchor="start" x="106.88" y="-72.25" font-family="Helvetica,sans-Serif" font-size="10.00">data_structures/trie</text>
|
||||
<text xml:space="preserve" text-anchor="middle" x="148.88" y="-61" font-family="Helvetica,sans-Serif" font-size="10.00">_tree.cpp</text>
|
||||
<polygon fill="#999999" stroke="#666666" points="227.88,-85.75 127.88,-85.75 127.88,-55.25 227.88,-55.25 227.88,-85.75"/>
|
||||
<text xml:space="preserve" text-anchor="start" x="135.88" y="-72.25" font-family="Helvetica,sans-Serif" font-size="10.00">data_structures/trie</text>
|
||||
<text xml:space="preserve" text-anchor="middle" x="177.88" y="-61" font-family="Helvetica,sans-Serif" font-size="10.00">_tree.cpp</text>
|
||||
</a>
|
||||
</g>
|
||||
</g>
|
||||
@@ -42,8 +42,8 @@
|
||||
<g id="edge1_Node000001_Node000002" class="edge">
|
||||
<title>Node1->Node2</title>
|
||||
<g id="a_edge1_Node000001_Node000002"><a xlink:title=" ">
|
||||
<path fill="none" stroke="#63b8ff" d="M116.41,-54.8C95.5,-45.33 68.54,-33.12 48.26,-23.93"/>
|
||||
<polygon fill="#63b8ff" stroke="#63b8ff" points="49.98,-20.87 39.43,-19.93 47.1,-27.25 49.98,-20.87"/>
|
||||
<path fill="none" stroke="#63b8ff" d="M138.16,-54.8C110.4,-44.52 73.93,-31.01 48.65,-21.65"/>
|
||||
<polygon fill="#63b8ff" stroke="#63b8ff" points="49.91,-18.38 39.32,-18.19 47.48,-24.95 49.91,-18.38"/>
|
||||
</a>
|
||||
</g>
|
||||
</g>
|
||||
@@ -60,8 +60,8 @@
|
||||
<g id="edge2_Node000001_Node000003" class="edge">
|
||||
<title>Node1->Node3</title>
|
||||
<g id="a_edge2_Node000001_Node000003"><a xlink:title=" ">
|
||||
<path fill="none" stroke="#63b8ff" d="M131.82,-54.95C121.92,-46.5 109.42,-35.83 99.16,-27.08"/>
|
||||
<polygon fill="#63b8ff" stroke="#63b8ff" points="101.54,-24.51 91.66,-20.68 97,-29.84 101.54,-24.51"/>
|
||||
<path fill="none" stroke="#63b8ff" d="M153.4,-54.8C138.47,-45.83 119.46,-34.41 104.51,-25.42"/>
|
||||
<polygon fill="#63b8ff" stroke="#63b8ff" points="106.58,-22.58 96.2,-20.43 102.97,-28.58 106.58,-22.58"/>
|
||||
</a>
|
||||
</g>
|
||||
</g>
|
||||
@@ -69,8 +69,8 @@
|
||||
<g id="Node000004" class="node">
|
||||
<title>Node4</title>
|
||||
<g id="a_Node000004"><a xlink:title=" ">
|
||||
<polygon fill="#e0e0e0" stroke="#999999" points="175.62,-19.25 122.12,-19.25 122.12,0 175.62,0 175.62,-19.25"/>
|
||||
<text xml:space="preserve" text-anchor="middle" x="148.88" y="-5.75" font-family="Helvetica,sans-Serif" font-size="10.00">iostream</text>
|
||||
<polygon fill="#e0e0e0" stroke="#999999" points="167.5,-19.25 122.25,-19.25 122.25,0 167.5,0 167.5,-19.25"/>
|
||||
<text xml:space="preserve" text-anchor="middle" x="144.88" y="-5.75" font-family="Helvetica,sans-Serif" font-size="10.00">cstdint</text>
|
||||
</a>
|
||||
</g>
|
||||
</g>
|
||||
@@ -78,8 +78,8 @@
|
||||
<g id="edge3_Node000001_Node000004" class="edge">
|
||||
<title>Node1->Node4</title>
|
||||
<g id="a_edge3_Node000001_Node000004"><a xlink:title=" ">
|
||||
<path fill="none" stroke="#63b8ff" d="M148.88,-54.95C148.88,-47.71 148.88,-38.84 148.88,-30.94"/>
|
||||
<polygon fill="#63b8ff" stroke="#63b8ff" points="152.38,-31.21 148.88,-21.21 145.38,-31.21 152.38,-31.21"/>
|
||||
<path fill="none" stroke="#63b8ff" d="M169.72,-54.95C165.42,-47.28 160.09,-37.77 155.48,-29.54"/>
|
||||
<polygon fill="#63b8ff" stroke="#63b8ff" points="158.64,-28.03 150.7,-21.02 152.54,-31.46 158.64,-28.03"/>
|
||||
</a>
|
||||
</g>
|
||||
</g>
|
||||
@@ -87,8 +87,8 @@
|
||||
<g id="Node000005" class="node">
|
||||
<title>Node5</title>
|
||||
<g id="a_Node000005"><a xlink:title=" ">
|
||||
<polygon fill="#e0e0e0" stroke="#999999" points="244.5,-19.25 193.25,-19.25 193.25,0 244.5,0 244.5,-19.25"/>
|
||||
<text xml:space="preserve" text-anchor="middle" x="218.88" y="-5.75" font-family="Helvetica,sans-Serif" font-size="10.00">memory</text>
|
||||
<polygon fill="#e0e0e0" stroke="#999999" points="238.62,-19.25 185.12,-19.25 185.12,0 238.62,0 238.62,-19.25"/>
|
||||
<text xml:space="preserve" text-anchor="middle" x="211.88" y="-5.75" font-family="Helvetica,sans-Serif" font-size="10.00">iostream</text>
|
||||
</a>
|
||||
</g>
|
||||
</g>
|
||||
@@ -96,8 +96,8 @@
|
||||
<g id="edge4_Node000001_Node000005" class="edge">
|
||||
<title>Node1->Node5</title>
|
||||
<g id="a_edge4_Node000001_Node000005"><a xlink:title=" ">
|
||||
<path fill="none" stroke="#63b8ff" d="M166.18,-54.95C176.22,-46.5 188.9,-35.83 199.31,-27.08"/>
|
||||
<polygon fill="#63b8ff" stroke="#63b8ff" points="201.53,-29.79 206.93,-20.68 197.02,-24.43 201.53,-29.79"/>
|
||||
<path fill="none" stroke="#63b8ff" d="M186.28,-54.95C190.71,-47.28 196.2,-37.77 200.95,-29.54"/>
|
||||
<polygon fill="#63b8ff" stroke="#63b8ff" points="203.91,-31.42 205.88,-21.01 197.84,-27.92 203.91,-31.42"/>
|
||||
</a>
|
||||
</g>
|
||||
</g>
|
||||
@@ -105,8 +105,8 @@
|
||||
<g id="Node000006" class="node">
|
||||
<title>Node6</title>
|
||||
<g id="a_Node000006"><a xlink:title=" ">
|
||||
<polygon fill="#e0e0e0" stroke="#999999" points="302.88,-19.25 262.88,-19.25 262.88,0 302.88,0 302.88,-19.25"/>
|
||||
<text xml:space="preserve" text-anchor="middle" x="282.88" y="-5.75" font-family="Helvetica,sans-Serif" font-size="10.00">string</text>
|
||||
<polygon fill="#e0e0e0" stroke="#999999" points="307.5,-19.25 256.25,-19.25 256.25,0 307.5,0 307.5,-19.25"/>
|
||||
<text xml:space="preserve" text-anchor="middle" x="281.88" y="-5.75" font-family="Helvetica,sans-Serif" font-size="10.00">memory</text>
|
||||
</a>
|
||||
</g>
|
||||
</g>
|
||||
@@ -114,8 +114,26 @@
|
||||
<g id="edge5_Node000001_Node000006" class="edge">
|
||||
<title>Node1->Node6</title>
|
||||
<g id="a_edge5_Node000001_Node000006"><a xlink:title=" ">
|
||||
<path fill="none" stroke="#63b8ff" d="M182.34,-54.8C203.76,-45.38 231.35,-33.26 252.2,-24.1"/>
|
||||
<polygon fill="#63b8ff" stroke="#63b8ff" points="253.58,-27.32 261.33,-20.09 250.77,-20.91 253.58,-27.32"/>
|
||||
<path fill="none" stroke="#63b8ff" d="M203.85,-54.8C219.84,-45.74 240.26,-34.19 256.19,-25.16"/>
|
||||
<polygon fill="#63b8ff" stroke="#63b8ff" points="257.63,-28.37 264.61,-20.4 254.18,-22.28 257.63,-28.37"/>
|
||||
</a>
|
||||
</g>
|
||||
</g>
|
||||
<!-- Node7 -->
|
||||
<g id="Node000007" class="node">
|
||||
<title>Node7</title>
|
||||
<g id="a_Node000007"><a xlink:title=" ">
|
||||
<polygon fill="#e0e0e0" stroke="#999999" points="365.88,-19.25 325.88,-19.25 325.88,0 365.88,0 365.88,-19.25"/>
|
||||
<text xml:space="preserve" text-anchor="middle" x="345.88" y="-5.75" font-family="Helvetica,sans-Serif" font-size="10.00">string</text>
|
||||
</a>
|
||||
</g>
|
||||
</g>
|
||||
<!-- Node1->Node7 -->
|
||||
<g id="edge6_Node000001_Node000007" class="edge">
|
||||
<title>Node1->Node7</title>
|
||||
<g id="a_edge6_Node000001_Node000007"><a xlink:title=" ">
|
||||
<path fill="none" stroke="#63b8ff" d="M219.84,-54.8C249.43,-44.42 288.4,-30.77 315.13,-21.4"/>
|
||||
<polygon fill="#63b8ff" stroke="#63b8ff" points="316.07,-24.78 324.35,-18.17 313.75,-18.17 316.07,-24.78"/>
|
||||
</a>
|
||||
</g>
|
||||
</g>
|
||||
|
||||
|
Before Width: | Height: | Size: 5.6 KiB After Width: | Height: | Size: 6.3 KiB |
@@ -4,17 +4,17 @@
|
||||
<!-- Generated by graphviz version 13.1.2 (20250808.2320)
|
||||
-->
|
||||
<!-- Title: data_structures/trie_tree.cpp Pages: 1 -->
|
||||
<svg width="311pt" height="94pt"
|
||||
viewBox="0.00 0.00 311.00 94.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<svg width="374pt" height="94pt"
|
||||
viewBox="0.00 0.00 374.00 94.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 89.75)">
|
||||
<title>data_structures/trie_tree.cpp</title>
|
||||
<!-- Node1 -->
|
||||
<g id="Node000001" class="node">
|
||||
<title>Node1</title>
|
||||
<g id="a_Node000001"><a xlink:title="Implementation of Trie data structure for English alphabets in small characters.">
|
||||
<polygon fill="#999999" stroke="#666666" points="198.88,-85.75 98.88,-85.75 98.88,-55.25 198.88,-55.25 198.88,-85.75"/>
|
||||
<text xml:space="preserve" text-anchor="start" x="106.88" y="-72.25" font-family="Helvetica,sans-Serif" font-size="10.00">data_structures/trie</text>
|
||||
<text xml:space="preserve" text-anchor="middle" x="148.88" y="-61" font-family="Helvetica,sans-Serif" font-size="10.00">_tree.cpp</text>
|
||||
<polygon fill="#999999" stroke="#666666" points="227.88,-85.75 127.88,-85.75 127.88,-55.25 227.88,-55.25 227.88,-85.75"/>
|
||||
<text xml:space="preserve" text-anchor="start" x="135.88" y="-72.25" font-family="Helvetica,sans-Serif" font-size="10.00">data_structures/trie</text>
|
||||
<text xml:space="preserve" text-anchor="middle" x="177.88" y="-61" font-family="Helvetica,sans-Serif" font-size="10.00">_tree.cpp</text>
|
||||
</a>
|
||||
</g>
|
||||
</g>
|
||||
@@ -31,8 +31,8 @@
|
||||
<g id="edge1_Node000001_Node000002" class="edge">
|
||||
<title>Node1->Node2</title>
|
||||
<g id="a_edge1_Node000001_Node000002"><a xlink:title=" ">
|
||||
<path fill="none" stroke="#63b8ff" d="M116.41,-54.8C95.5,-45.33 68.54,-33.12 48.26,-23.93"/>
|
||||
<polygon fill="#63b8ff" stroke="#63b8ff" points="49.98,-20.87 39.43,-19.93 47.1,-27.25 49.98,-20.87"/>
|
||||
<path fill="none" stroke="#63b8ff" d="M138.16,-54.8C110.4,-44.52 73.93,-31.01 48.65,-21.65"/>
|
||||
<polygon fill="#63b8ff" stroke="#63b8ff" points="49.91,-18.38 39.32,-18.19 47.48,-24.95 49.91,-18.38"/>
|
||||
</a>
|
||||
</g>
|
||||
</g>
|
||||
@@ -49,8 +49,8 @@
|
||||
<g id="edge2_Node000001_Node000003" class="edge">
|
||||
<title>Node1->Node3</title>
|
||||
<g id="a_edge2_Node000001_Node000003"><a xlink:title=" ">
|
||||
<path fill="none" stroke="#63b8ff" d="M131.82,-54.95C121.92,-46.5 109.42,-35.83 99.16,-27.08"/>
|
||||
<polygon fill="#63b8ff" stroke="#63b8ff" points="101.54,-24.51 91.66,-20.68 97,-29.84 101.54,-24.51"/>
|
||||
<path fill="none" stroke="#63b8ff" d="M153.4,-54.8C138.47,-45.83 119.46,-34.41 104.51,-25.42"/>
|
||||
<polygon fill="#63b8ff" stroke="#63b8ff" points="106.58,-22.58 96.2,-20.43 102.97,-28.58 106.58,-22.58"/>
|
||||
</a>
|
||||
</g>
|
||||
</g>
|
||||
@@ -58,8 +58,8 @@
|
||||
<g id="Node000004" class="node">
|
||||
<title>Node4</title>
|
||||
<g id="a_Node000004"><a xlink:title=" ">
|
||||
<polygon fill="#e0e0e0" stroke="#999999" points="175.62,-19.25 122.12,-19.25 122.12,0 175.62,0 175.62,-19.25"/>
|
||||
<text xml:space="preserve" text-anchor="middle" x="148.88" y="-5.75" font-family="Helvetica,sans-Serif" font-size="10.00">iostream</text>
|
||||
<polygon fill="#e0e0e0" stroke="#999999" points="167.5,-19.25 122.25,-19.25 122.25,0 167.5,0 167.5,-19.25"/>
|
||||
<text xml:space="preserve" text-anchor="middle" x="144.88" y="-5.75" font-family="Helvetica,sans-Serif" font-size="10.00">cstdint</text>
|
||||
</a>
|
||||
</g>
|
||||
</g>
|
||||
@@ -67,8 +67,8 @@
|
||||
<g id="edge3_Node000001_Node000004" class="edge">
|
||||
<title>Node1->Node4</title>
|
||||
<g id="a_edge3_Node000001_Node000004"><a xlink:title=" ">
|
||||
<path fill="none" stroke="#63b8ff" d="M148.88,-54.95C148.88,-47.71 148.88,-38.84 148.88,-30.94"/>
|
||||
<polygon fill="#63b8ff" stroke="#63b8ff" points="152.38,-31.21 148.88,-21.21 145.38,-31.21 152.38,-31.21"/>
|
||||
<path fill="none" stroke="#63b8ff" d="M169.72,-54.95C165.42,-47.28 160.09,-37.77 155.48,-29.54"/>
|
||||
<polygon fill="#63b8ff" stroke="#63b8ff" points="158.64,-28.03 150.7,-21.02 152.54,-31.46 158.64,-28.03"/>
|
||||
</a>
|
||||
</g>
|
||||
</g>
|
||||
@@ -76,8 +76,8 @@
|
||||
<g id="Node000005" class="node">
|
||||
<title>Node5</title>
|
||||
<g id="a_Node000005"><a xlink:title=" ">
|
||||
<polygon fill="#e0e0e0" stroke="#999999" points="244.5,-19.25 193.25,-19.25 193.25,0 244.5,0 244.5,-19.25"/>
|
||||
<text xml:space="preserve" text-anchor="middle" x="218.88" y="-5.75" font-family="Helvetica,sans-Serif" font-size="10.00">memory</text>
|
||||
<polygon fill="#e0e0e0" stroke="#999999" points="238.62,-19.25 185.12,-19.25 185.12,0 238.62,0 238.62,-19.25"/>
|
||||
<text xml:space="preserve" text-anchor="middle" x="211.88" y="-5.75" font-family="Helvetica,sans-Serif" font-size="10.00">iostream</text>
|
||||
</a>
|
||||
</g>
|
||||
</g>
|
||||
@@ -85,8 +85,8 @@
|
||||
<g id="edge4_Node000001_Node000005" class="edge">
|
||||
<title>Node1->Node5</title>
|
||||
<g id="a_edge4_Node000001_Node000005"><a xlink:title=" ">
|
||||
<path fill="none" stroke="#63b8ff" d="M166.18,-54.95C176.22,-46.5 188.9,-35.83 199.31,-27.08"/>
|
||||
<polygon fill="#63b8ff" stroke="#63b8ff" points="201.53,-29.79 206.93,-20.68 197.02,-24.43 201.53,-29.79"/>
|
||||
<path fill="none" stroke="#63b8ff" d="M186.28,-54.95C190.71,-47.28 196.2,-37.77 200.95,-29.54"/>
|
||||
<polygon fill="#63b8ff" stroke="#63b8ff" points="203.91,-31.42 205.88,-21.01 197.84,-27.92 203.91,-31.42"/>
|
||||
</a>
|
||||
</g>
|
||||
</g>
|
||||
@@ -94,8 +94,8 @@
|
||||
<g id="Node000006" class="node">
|
||||
<title>Node6</title>
|
||||
<g id="a_Node000006"><a xlink:title=" ">
|
||||
<polygon fill="#e0e0e0" stroke="#999999" points="302.88,-19.25 262.88,-19.25 262.88,0 302.88,0 302.88,-19.25"/>
|
||||
<text xml:space="preserve" text-anchor="middle" x="282.88" y="-5.75" font-family="Helvetica,sans-Serif" font-size="10.00">string</text>
|
||||
<polygon fill="#e0e0e0" stroke="#999999" points="307.5,-19.25 256.25,-19.25 256.25,0 307.5,0 307.5,-19.25"/>
|
||||
<text xml:space="preserve" text-anchor="middle" x="281.88" y="-5.75" font-family="Helvetica,sans-Serif" font-size="10.00">memory</text>
|
||||
</a>
|
||||
</g>
|
||||
</g>
|
||||
@@ -103,8 +103,26 @@
|
||||
<g id="edge5_Node000001_Node000006" class="edge">
|
||||
<title>Node1->Node6</title>
|
||||
<g id="a_edge5_Node000001_Node000006"><a xlink:title=" ">
|
||||
<path fill="none" stroke="#63b8ff" d="M182.34,-54.8C203.76,-45.38 231.35,-33.26 252.2,-24.1"/>
|
||||
<polygon fill="#63b8ff" stroke="#63b8ff" points="253.58,-27.32 261.33,-20.09 250.77,-20.91 253.58,-27.32"/>
|
||||
<path fill="none" stroke="#63b8ff" d="M203.85,-54.8C219.84,-45.74 240.26,-34.19 256.19,-25.16"/>
|
||||
<polygon fill="#63b8ff" stroke="#63b8ff" points="257.63,-28.37 264.61,-20.4 254.18,-22.28 257.63,-28.37"/>
|
||||
</a>
|
||||
</g>
|
||||
</g>
|
||||
<!-- Node7 -->
|
||||
<g id="Node000007" class="node">
|
||||
<title>Node7</title>
|
||||
<g id="a_Node000007"><a xlink:title=" ">
|
||||
<polygon fill="#e0e0e0" stroke="#999999" points="365.88,-19.25 325.88,-19.25 325.88,0 365.88,0 365.88,-19.25"/>
|
||||
<text xml:space="preserve" text-anchor="middle" x="345.88" y="-5.75" font-family="Helvetica,sans-Serif" font-size="10.00">string</text>
|
||||
</a>
|
||||
</g>
|
||||
</g>
|
||||
<!-- Node1->Node7 -->
|
||||
<g id="edge6_Node000001_Node000007" class="edge">
|
||||
<title>Node1->Node7</title>
|
||||
<g id="a_edge6_Node000001_Node000007"><a xlink:title=" ">
|
||||
<path fill="none" stroke="#63b8ff" d="M219.84,-54.8C249.43,-44.42 288.4,-30.77 315.13,-21.4"/>
|
||||
<polygon fill="#63b8ff" stroke="#63b8ff" points="316.07,-24.78 324.35,-18.17 313.75,-18.17 316.07,-24.78"/>
|
||||
</a>
|
||||
</g>
|
||||
</g>
|
||||
|
||||
|
Before Width: | Height: | Size: 4.8 KiB After Width: | Height: | Size: 5.6 KiB |
@@ -417,9 +417,9 @@ Functions</h2></td></tr>
|
||||
<div class="line"><span class="lineno"> 130</span> std::cout << <span class="stringliteral">"Passed Test 5!"</span> << std::endl;</div>
|
||||
<div class="line"><span class="lineno"> 131</span>}</div>
|
||||
<div class="ttc" id="afibonacci__sum_8cpp_html_a493fbaa7a94e3b7ca573111237bb3742"><div class="ttname"><a href="#a493fbaa7a94e3b7ca573111237bb3742">math::fibonacci_sum::fiboSum</a></div><div class="ttdeci">uint64_t fiboSum(uint64_t n, uint64_t m)</div><div class="ttdef"><b>Definition</b> <a href="../../de/dc3/fibonacci__sum_8cpp_source.html#l00091">fibonacci_sum.cpp:91</a></div></div>
|
||||
<div class="ttc" id="aheavy__light__decomposition_8cpp_html_a34b8683a2b429de5cce57e6d733ec817"><div class="ttname"><a href="../../d2/de9/heavy__light__decomposition_8cpp.html#a34b8683a2b429de5cce57e6d733ec817">test_1</a></div><div class="ttdeci">static void test_1()</div><div class="ttdef"><b>Definition</b> <a href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00505">heavy_light_decomposition.cpp:505</a></div></div>
|
||||
<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="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00549">heavy_light_decomposition.cpp:549</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="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00592">heavy_light_decomposition.cpp:592</a></div></div>
|
||||
<div class="ttc" id="aheavy__light__decomposition_8cpp_html_a34b8683a2b429de5cce57e6d733ec817"><div class="ttname"><a href="../../d2/de9/heavy__light__decomposition_8cpp.html#a34b8683a2b429de5cce57e6d733ec817">test_1</a></div><div class="ttdeci">static void test_1()</div><div class="ttdef"><b>Definition</b> <a href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00511">heavy_light_decomposition.cpp:511</a></div></div>
|
||||
<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="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00555">heavy_light_decomposition.cpp:555</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="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00599">heavy_light_decomposition.cpp:599</a></div></div>
|
||||
</div><!-- fragment -->
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -221,9 +221,9 @@ $(function(){initNavTree('de/dc3/fibonacci__sum_8cpp_source.html','../../','');
|
||||
<div class="ttc" id="afibonacci__sum_8cpp_html_aa8dca7b867074164d5f45b0f3851269d"><div class="ttname"><a href="../../de/dc3/fibonacci__sum_8cpp.html#aa8dca7b867074164d5f45b0f3851269d">test</a></div><div class="ttdeci">static void test()</div><div class="ttdef"><b>Definition</b> <a href="#l00102">fibonacci_sum.cpp:102</a></div></div>
|
||||
<div class="ttc" id="afibonacci__sum_8cpp_html_aadb40ac4c74a7efc0680b83eeee138aa"><div class="ttname"><a href="../../de/dc3/fibonacci__sum_8cpp.html#aadb40ac4c74a7efc0680b83eeee138aa">math::fibonacci_sum::result</a></div><div class="ttdeci">uint64_t result(uint64_t n)</div><div class="ttdef"><b>Definition</b> <a href="#l00077">fibonacci_sum.cpp:77</a></div></div>
|
||||
<div class="ttc" id="afibonacci__sum_8cpp_html_ae66f6b31b5ad750f1fe042a706a4e3d4"><div class="ttname"><a href="../../de/dc3/fibonacci__sum_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4">main</a></div><div class="ttdeci">int main()</div><div class="ttdoc">Main function.</div><div class="ttdef"><b>Definition</b> <a href="#l00137">fibonacci_sum.cpp:137</a></div></div>
|
||||
<div class="ttc" id="aheavy__light__decomposition_8cpp_html_a34b8683a2b429de5cce57e6d733ec817"><div class="ttname"><a href="../../d2/de9/heavy__light__decomposition_8cpp.html#a34b8683a2b429de5cce57e6d733ec817">test_1</a></div><div class="ttdeci">static void test_1()</div><div class="ttdef"><b>Definition</b> <a href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00505">heavy_light_decomposition.cpp:505</a></div></div>
|
||||
<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="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00549">heavy_light_decomposition.cpp:549</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="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00592">heavy_light_decomposition.cpp:592</a></div></div>
|
||||
<div class="ttc" id="aheavy__light__decomposition_8cpp_html_a34b8683a2b429de5cce57e6d733ec817"><div class="ttname"><a href="../../d2/de9/heavy__light__decomposition_8cpp.html#a34b8683a2b429de5cce57e6d733ec817">test_1</a></div><div class="ttdeci">static void test_1()</div><div class="ttdef"><b>Definition</b> <a href="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00511">heavy_light_decomposition.cpp:511</a></div></div>
|
||||
<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="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00555">heavy_light_decomposition.cpp:555</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="../../d2/de9/heavy__light__decomposition_8cpp_source.html#l00599">heavy_light_decomposition.cpp:599</a></div></div>
|
||||
<div class="ttc" id="alu__decomposition_8h_html_ac029b636b353cefbb18b2fcc71e427e4"><div class="ttname"><a href="../../d1/dbe/lu__decomposition_8h.html#ac029b636b353cefbb18b2fcc71e427e4">matrix</a></div><div class="ttdeci">std::vector< std::valarray< T > > matrix</div><div class="ttdef"><b>Definition</b> <a href="../../d1/dbe/lu__decomposition_8h_source.html#l00019">lu_decomposition.h:19</a></div></div>
|
||||
<div class="ttc" id="anamespacefibonacci__sum_html"><div class="ttname"><a href="../../d3/dc9/namespacefibonacci__sum.html">fibonacci_sum</a></div><div class="ttdoc">Functions for the sum of the Fibonacci Sequence: .</div></div>
|
||||
<div class="ttc" id="anamespacemath_html"><div class="ttname"><a href="../../dd/d47/namespacemath.html">math</a></div><div class="ttdoc">for assert</div></div>
|
||||
|
||||