This commit is contained in:
lavafroth
2025-11-24 16:10:23 +00:00
parent f28697a44c
commit c45df4cccc
19 changed files with 175 additions and 121 deletions

102
index.xml
View File

@@ -10,49 +10,73 @@ enums.</p>
<blockquote>
<p>I highly encourage you to try out the code snippets and follow along with this article.
Use the collapse explanation button to copy multiple code blocks in one go.&lt;/p&gt;</description></item><item><title>note skta4v7n8h8</title><link>https://lavafroth.is-a.dev/skta4v7n8h8/</link><pubDate>Fri, 31 Oct 2025 20:24:35 +0530</pubDate><guid>https://lavafroth.is-a.dev/skta4v7n8h8/</guid><description>&lt;h1 id="grpa-1"&gt;GrPA 1&lt;/h1&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;def&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;swap&lt;/span&gt;(arr, i, j):
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; arr[i], arr[j] &lt;span style="color:#f92672"&gt;=&lt;/span&gt; arr[j], arr[i]
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;from&lt;/span&gt; typing &lt;span style="color:#f92672"&gt;import&lt;/span&gt; List
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;def&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;constructWord&lt;/span&gt;(s: str, chunks: List[str]) &lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt; List[List[str]]:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; memo &lt;span style="color:#f92672"&gt;=&lt;/span&gt; {}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;def&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;max_heapify&lt;/span&gt;(arr, end, current):
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; left &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;2&lt;/span&gt; &lt;span style="color:#f92672"&gt;*&lt;/span&gt; current &lt;span style="color:#f92672"&gt;+&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; right &lt;span style="color:#f92672"&gt;=&lt;/span&gt; left &lt;span style="color:#f92672"&gt;+&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; largest &lt;span style="color:#f92672"&gt;=&lt;/span&gt; current
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; left &lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt; end &lt;span style="color:#f92672"&gt;and&lt;/span&gt; arr[left] &lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt; arr[largest]:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; largest &lt;span style="color:#f92672"&gt;=&lt;/span&gt; left
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; right &lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt; end &lt;span style="color:#f92672"&gt;and&lt;/span&gt; arr[right] &lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt; arr[largest]:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; largest &lt;span style="color:#f92672"&gt;=&lt;/span&gt; right
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; largest &lt;span style="color:#f92672"&gt;!=&lt;/span&gt; current:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; swap(arr, current, largest)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; max_heapify(arr, end, largest)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;def&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;mergeKLists&lt;/span&gt;(arr):
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; arr &lt;span style="color:#f92672"&gt;=&lt;/span&gt; [value &lt;span style="color:#66d9ef"&gt;for&lt;/span&gt; subarray &lt;span style="color:#f92672"&gt;in&lt;/span&gt; arr &lt;span style="color:#66d9ef"&gt;for&lt;/span&gt; value &lt;span style="color:#f92672"&gt;in&lt;/span&gt; subarray]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; n &lt;span style="color:#f92672"&gt;=&lt;/span&gt; len(arr)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;for&lt;/span&gt; i &lt;span style="color:#f92672"&gt;in&lt;/span&gt; reversed(range(n &lt;span style="color:#f92672"&gt;//&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;2&lt;/span&gt;)):
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; max_heapify(arr, n, i)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;for&lt;/span&gt; i &lt;span style="color:#f92672"&gt;in&lt;/span&gt; range(n&lt;span style="color:#f92672"&gt;-&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;,&lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;,&lt;span style="color:#f92672"&gt;-&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;):
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; swap(arr, &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;, i)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; max_heapify(arr, i, &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; arr
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h1 id="grpa-2"&gt;GrPA 2&lt;/h1&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;def&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;maxLessThan&lt;/span&gt;(root, x):
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; floor &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;None&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;while&lt;/span&gt; &lt;span style="color:#f92672"&gt;not&lt;/span&gt; root&lt;span style="color:#f92672"&gt;.&lt;/span&gt;isempty():
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; root&lt;span style="color:#f92672"&gt;.&lt;/span&gt;value &lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt; x:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; root &lt;span style="color:#f92672"&gt;=&lt;/span&gt; root&lt;span style="color:#f92672"&gt;.&lt;/span&gt;left
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;def&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;solve&lt;/span&gt;(remaining_suffix: str) &lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt; List[List[str]]:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; &lt;span style="color:#f92672"&gt;not&lt;/span&gt; remaining_suffix:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; [[]]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;elif&lt;/span&gt; root&lt;span style="color:#f92672"&gt;.&lt;/span&gt;value &lt;span style="color:#f92672"&gt;&amp;lt;=&lt;/span&gt; x:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; floor &lt;span style="color:#f92672"&gt;=&lt;/span&gt; root&lt;span style="color:#f92672"&gt;.&lt;/span&gt;value
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; root &lt;span style="color:#f92672"&gt;=&lt;/span&gt; root&lt;span style="color:#f92672"&gt;.&lt;/span&gt;right
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; floor
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; remaining_suffix &lt;span style="color:#f92672"&gt;in&lt;/span&gt; memo:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; memo[remaining_suffix]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; possible_combos &lt;span style="color:#f92672"&gt;=&lt;/span&gt; []
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;for&lt;/span&gt; chunk &lt;span style="color:#f92672"&gt;in&lt;/span&gt; chunks:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; &lt;span style="color:#f92672"&gt;not&lt;/span&gt; remaining_suffix&lt;span style="color:#f92672"&gt;.&lt;/span&gt;startswith(chunk):
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;continue&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; leftover_results &lt;span style="color:#f92672"&gt;=&lt;/span&gt; solve(remaining_suffix[len(chunk):])
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; &lt;span style="color:#f92672"&gt;not&lt;/span&gt; leftover_results:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;continue&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;for&lt;/span&gt; rest &lt;span style="color:#f92672"&gt;in&lt;/span&gt; leftover_results:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; possible_combos&lt;span style="color:#f92672"&gt;.&lt;/span&gt;append([chunk] &lt;span style="color:#f92672"&gt;+&lt;/span&gt; rest)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; memo[remaining_suffix] &lt;span style="color:#f92672"&gt;=&lt;/span&gt; possible_combos
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; possible_combos
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; solve(s)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h1 id="grpa-2"&gt;GrPA 2&lt;/h1&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;import&lt;/span&gt; numpy &lt;span style="color:#66d9ef"&gt;as&lt;/span&gt; np
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;def&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;MaxCoinPath&lt;/span&gt;(M, x1, y1, x2, y2):
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; M &lt;span style="color:#f92672"&gt;=&lt;/span&gt; np&lt;span style="color:#f92672"&gt;.&lt;/span&gt;array(M, dtype&lt;span style="color:#f92672"&gt;=&lt;/span&gt;int)[x1:x2&lt;span style="color:#f92672"&gt;+&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;, y1:y2&lt;span style="color:#f92672"&gt;+&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; cost &lt;span style="color:#f92672"&gt;=&lt;/span&gt; np&lt;span style="color:#f92672"&gt;.&lt;/span&gt;zeros((M&lt;span style="color:#f92672"&gt;.&lt;/span&gt;shape[&lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;]&lt;span style="color:#f92672"&gt;+&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;, M&lt;span style="color:#f92672"&gt;.&lt;/span&gt;shape[&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;]&lt;span style="color:#f92672"&gt;+&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;), dtype&lt;span style="color:#f92672"&gt;=&lt;/span&gt;int)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;for&lt;/span&gt; i &lt;span style="color:#f92672"&gt;in&lt;/span&gt; range(M&lt;span style="color:#f92672"&gt;.&lt;/span&gt;shape[&lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;]&lt;span style="color:#f92672"&gt;-&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;, &lt;span style="color:#f92672"&gt;-&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;, &lt;span style="color:#f92672"&gt;-&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;):
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;for&lt;/span&gt; j &lt;span style="color:#f92672"&gt;in&lt;/span&gt; range(M&lt;span style="color:#f92672"&gt;.&lt;/span&gt;shape[&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;]&lt;span style="color:#f92672"&gt;-&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;, &lt;span style="color:#f92672"&gt;-&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;, &lt;span style="color:#f92672"&gt;-&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;):
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; cost[i, j] &lt;span style="color:#f92672"&gt;=&lt;/span&gt; max(M[i, j] &lt;span style="color:#f92672"&gt;+&lt;/span&gt; cost[i&lt;span style="color:#f92672"&gt;+&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;, j], M[i, j] &lt;span style="color:#f92672"&gt;+&lt;/span&gt; cost[i, j&lt;span style="color:#f92672"&gt;+&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;])
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; cost[&lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;,&lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h1 id="grpa-3"&gt;GrPA 3&lt;/h1&gt;
&lt;p&gt;Note that this &lt;code&gt;max_heapify&lt;/code&gt; is a workhorse function which you should learn well
because you&amp;rsquo;re gonna use it very frequently to implement a priority queue.&lt;/p&gt;</description></item><item><title>secret note jfgp3d7rrx0</title><link>https://lavafroth.is-a.dev/jfgp3d7rrx0/</link><pubDate>Tue, 28 Oct 2025 16:09:00 +0530</pubDate><guid>https://lavafroth.is-a.dev/jfgp3d7rrx0/</guid><description>&lt;p&gt;There will be an explanation for non-trivial questions.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;def&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;LDS&lt;/span&gt;(arr):
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; n &lt;span style="color:#f92672"&gt;=&lt;/span&gt; len(arr)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; n &lt;span style="color:#f92672"&gt;==&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; []
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; memo &lt;span style="color:#f92672"&gt;=&lt;/span&gt; [&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;] &lt;span style="color:#f92672"&gt;*&lt;/span&gt; n
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; parent &lt;span style="color:#f92672"&gt;=&lt;/span&gt; [&lt;span style="color:#f92672"&gt;-&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;] &lt;span style="color:#f92672"&gt;*&lt;/span&gt; n
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; max_len &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; end_index &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#f92672"&gt;-&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;for&lt;/span&gt; i &lt;span style="color:#f92672"&gt;in&lt;/span&gt; range(n):
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;for&lt;/span&gt; j &lt;span style="color:#f92672"&gt;in&lt;/span&gt; range(i):
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; arr[i] &lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt; arr[j] &lt;span style="color:#f92672"&gt;and&lt;/span&gt; memo[i] &lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt; memo[j] &lt;span style="color:#f92672"&gt;+&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; memo[i] &lt;span style="color:#f92672"&gt;=&lt;/span&gt; memo[j] &lt;span style="color:#f92672"&gt;+&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; parent[i] &lt;span style="color:#f92672"&gt;=&lt;/span&gt; j
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; memo[i] &lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt; max_len:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; max_len &lt;span style="color:#f92672"&gt;=&lt;/span&gt; memo[i]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; end_index &lt;span style="color:#f92672"&gt;=&lt;/span&gt; i
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; subsequence &lt;span style="color:#f92672"&gt;=&lt;/span&gt; []
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; current_index &lt;span style="color:#f92672"&gt;=&lt;/span&gt; end_index
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;while&lt;/span&gt; current_index &lt;span style="color:#f92672"&gt;!=&lt;/span&gt; &lt;span style="color:#f92672"&gt;-&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; subsequence&lt;span style="color:#f92672"&gt;.&lt;/span&gt;append(arr[current_index])
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; current_index &lt;span style="color:#f92672"&gt;=&lt;/span&gt; parent[current_index]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; subsequence[::&lt;span style="color:#f92672"&gt;-&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>secret note jfgp3d7rrx0</title><link>https://lavafroth.is-a.dev/jfgp3d7rrx0/</link><pubDate>Tue, 28 Oct 2025 16:09:00 +0530</pubDate><guid>https://lavafroth.is-a.dev/jfgp3d7rrx0/</guid><description>&lt;p&gt;There will be an explanation for non-trivial questions.&lt;/p&gt;
&lt;h1 id="activity-1"&gt;Activity 1&lt;/h1&gt;
&lt;h2 id="1"&gt;1&lt;/h2&gt;
&lt;p&gt;Dijkstra&amp;rsquo;s algorithm guarantees finding the shortest path from a single source to all other vertices under which of the following conditions?&lt;/p&gt;

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -1 +1 @@
{"version":"1.0.3","languages":{"en-us":{"hash":"en-us_6f20d1343543d","wasm":"en-us","page_count":59}}}
{"version":"1.0.3","languages":{"en-us":{"hash":"en-us_2a7de922a61d5","wasm":"en-us","page_count":59}}}

Binary file not shown.

View File

@@ -1,102 +1,132 @@
<!doctype html><html lang=en-us><head><meta charset=utf-8><meta http-equiv=X-UA-Compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><title>note skta4v7n8h8 - lavafroth</title><meta name=description content='GrPA 1
def swap(arr, i, j):
arr[i], arr[j] = arr[j], arr[i]
from typing import List
def constructWord(s: str, chunks: List[str]) -> List[List[str]]:
memo = {}
def max_heapify(arr, end, current):
left = 2 * current + 1
right = left + 1
largest = current
def solve(remaining_suffix: str) -> List[List[str]]:
if not remaining_suffix:
return [[]]
if remaining_suffix in memo:
return memo[remaining_suffix]
if left < end and arr[left] > arr[largest]:
largest = left
if right < end and arr[right] > arr[largest]:
largest = right
possible_combos = []
if largest != current:
swap(arr, current, largest)
max_heapify(arr, end, largest)
for chunk in chunks:
if not remaining_suffix.startswith(chunk):
continue
leftover_results = solve(remaining_suffix[len(chunk):])
if not leftover_results:
continue
def mergeKLists(arr):
arr = [value for subarray in arr for value in subarray]
n = len(arr)
for i in reversed(range(n // 2)):
max_heapify(arr, n, i)
for rest in leftover_results:
possible_combos.append([chunk] + rest)
for i in range(n-1,0,-1):
swap(arr, 0, i)
max_heapify(arr, i, 0)
return arr
memo[remaining_suffix] = possible_combos
return possible_combos
return solve(s)
GrPA 2
def maxLessThan(root, x):
floor = None
while not root.isempty():
if root.value > x:
root = root.left
import numpy as np
def MaxCoinPath(M, x1, y1, x2, y2):
M = np.array(M, dtype=int)[x1:x2+1, y1:y2+1]
cost = np.zeros((M.shape[0]+1, M.shape[1]+1), dtype=int)
elif root.value <= x:
floor = root.value
root = root.right
return floor
for i in range(M.shape[0]-1, -1, -1):
for j in range(M.shape[1]-1, -1, -1):
cost[i, j] = max(M[i, j] + cost[i+1, j], M[i, j] + cost[i, j+1])
return cost[0,0]
GrPA 3
Note that this max_heapify is a workhorse function which you should learn well
because you&rsquo;re gonna use it very frequently to implement a priority queue.'><meta name=author content><link rel="preload stylesheet" as=style href=https://lavafroth.is-a.dev/app.min.css><link rel=preload as=image href=../header.svg><link as=font href=https://lavafroth.is-a.dev/latinmodern-math.otf><link rel=preload as=image href=https://lavafroth.is-a.dev/github.svg><link rel=preload as=image href=https://lavafroth.is-a.dev/about.svg><link rel=preload as=image href=https://lavafroth.is-a.dev/art.svg><link rel=preload as=image href=https://lavafroth.is-a.dev/rss.svg><link rel=icon href=https://lavafroth.is-a.dev/favicon.png><link rel=blog-icon href=https://lavafroth.is-a.dev/icon.png></head><body><header><a class=site-name href=https://lavafroth.is-a.dev/><svg viewBox="0 0 8790 2080"><path d="M80 1935V465h216v1270h286v2e2zm853 0 222-1470h264l222 1470h-210l-40-3e2h-208l-40 3e2zm280-528h148l-62-494-6-78h-12l-6 78zm1025 528L2014 465h210l108 868 8 142h12l8-142 108-868h210l-224 1470zm813 0 222-1470h264l222 1470h-210l-40-3e2h-208l-40 3e2zm280-528h148l-62-494-6-78h-12l-6 78zm851 528V465h514v222h-298v386h2e2v222h-2e2v640zm910 0V465h216q194 0 286 108 92 107 92 316 0 124-43 215-44 90-106 132l147 699h-216l-122-620h-38v620zm216-820q60 0 95-26 35-27 50-76t15-116q0-105-34-161-35-57-126-57zm1084 836q-90 0-154-42-65-42-99-114-35-72-35-162V767q0-91 35-162 34-72 99-114 64-42 154-42t155 42q64 42 99 114 34 72 34 162v866q0 90-34 162-35 72-99 114-65 42-155 42zm0-210q40 0 56-33 16-34 16-75V767q0-41-17-74-17-34-55-34-37 0-54 34-18 33-18 74v866q0 41 17 75 17 33 55 33zm890 194V687h-204V465h624v222h-204v1248zm828 0V465h216v608h168V465h216v1470h-216v-640h-168v640z"/></svg></a><nav><a style=--url:url(./github.svg) href=https://github.com/lavafroth aria-label=github target=_blank></a><a href=../about/ aria-label=about style=--url:url(./about.svg)></a><a href=../art/ aria-label=art style=--url:url(./art.svg)></a><a href=../index.xml aria-label=rss style=--url:url(./rss.svg)></a><nav></header><main><hgroup data-pagefind-body><p data-pagefind-ignore><time>Oct 31, 2025 | 2 minutes read</time></p><h1 data-pagefind-meta=title>note skta4v7n8h8</h1></hgroup><section class=post-content data-pagefind-body><h1 id=grpa-1>GrPA 1</h1><div class=highlight><pre tabindex=0 style=color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-python data-lang=python><span style=display:flex><span><span style=color:#66d9ef>def</span> <span style=color:#a6e22e>swap</span>(arr, i, j):
</span></span><span style=display:flex><span> arr[i], arr[j] <span style=color:#f92672>=</span> arr[j], arr[i]
def LDS(arr):
n = len(arr)
if n == 0:
return []
memo = [1] * n
parent = [-1] * n
max_len = 0
end_index = -1
for i in range(n):
for j in range(i):
if arr[i] < arr[j] and memo[i] < memo[j] + 1:
memo[i] = memo[j] + 1
parent[i] = j
if memo[i] > max_len:
max_len = memo[i]
end_index = i
subsequence = []
current_index = end_index
while current_index != -1:
subsequence.append(arr[current_index])
current_index = parent[current_index]
return subsequence[::-1]
'><meta name=author content><link rel="preload stylesheet" as=style href=https://lavafroth.is-a.dev/app.min.css><link rel=preload as=image href=../header.svg><link as=font href=https://lavafroth.is-a.dev/latinmodern-math.otf><link rel=preload as=image href=https://lavafroth.is-a.dev/github.svg><link rel=preload as=image href=https://lavafroth.is-a.dev/about.svg><link rel=preload as=image href=https://lavafroth.is-a.dev/art.svg><link rel=preload as=image href=https://lavafroth.is-a.dev/rss.svg><link rel=icon href=https://lavafroth.is-a.dev/favicon.png><link rel=blog-icon href=https://lavafroth.is-a.dev/icon.png></head><body><header><a class=site-name href=https://lavafroth.is-a.dev/><svg viewBox="0 0 8790 2080"><path d="M80 1935V465h216v1270h286v2e2zm853 0 222-1470h264l222 1470h-210l-40-3e2h-208l-40 3e2zm280-528h148l-62-494-6-78h-12l-6 78zm1025 528L2014 465h210l108 868 8 142h12l8-142 108-868h210l-224 1470zm813 0 222-1470h264l222 1470h-210l-40-3e2h-208l-40 3e2zm280-528h148l-62-494-6-78h-12l-6 78zm851 528V465h514v222h-298v386h2e2v222h-2e2v640zm910 0V465h216q194 0 286 108 92 107 92 316 0 124-43 215-44 90-106 132l147 699h-216l-122-620h-38v620zm216-820q60 0 95-26 35-27 50-76t15-116q0-105-34-161-35-57-126-57zm1084 836q-90 0-154-42-65-42-99-114-35-72-35-162V767q0-91 35-162 34-72 99-114 64-42 154-42t155 42q64 42 99 114 34 72 34 162v866q0 90-34 162-35 72-99 114-65 42-155 42zm0-210q40 0 56-33 16-34 16-75V767q0-41-17-74-17-34-55-34-37 0-54 34-18 33-18 74v866q0 41 17 75 17 33 55 33zm890 194V687h-204V465h624v222h-204v1248zm828 0V465h216v608h168V465h216v1470h-216v-640h-168v640z"/></svg></a><nav><a style=--url:url(./github.svg) href=https://github.com/lavafroth aria-label=github target=_blank></a><a href=../about/ aria-label=about style=--url:url(./about.svg)></a><a href=../art/ aria-label=art style=--url:url(./art.svg)></a><a href=../index.xml aria-label=rss style=--url:url(./rss.svg)></a><nav></header><main><hgroup data-pagefind-body><p data-pagefind-ignore><time>Oct 31, 2025 | 1 minute read</time></p><h1 data-pagefind-meta=title>note skta4v7n8h8</h1></hgroup><section class=post-content data-pagefind-body><h1 id=grpa-1>GrPA 1</h1><div class=highlight><pre tabindex=0 style=color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-python data-lang=python><span style=display:flex><span><span style=color:#f92672>from</span> typing <span style=color:#f92672>import</span> List
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#66d9ef>def</span> <span style=color:#a6e22e>constructWord</span>(s: str, chunks: List[str]) <span style=color:#f92672>-&gt;</span> List[List[str]]:
</span></span><span style=display:flex><span> memo <span style=color:#f92672>=</span> {}
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#66d9ef>def</span> <span style=color:#a6e22e>max_heapify</span>(arr, end, current):
</span></span><span style=display:flex><span> left <span style=color:#f92672>=</span> <span style=color:#ae81ff>2</span> <span style=color:#f92672>*</span> current <span style=color:#f92672>+</span> <span style=color:#ae81ff>1</span>
</span></span><span style=display:flex><span> right <span style=color:#f92672>=</span> left <span style=color:#f92672>+</span> <span style=color:#ae81ff>1</span>
</span></span><span style=display:flex><span> largest <span style=color:#f92672>=</span> current
</span></span><span style=display:flex><span> <span style=color:#66d9ef>def</span> <span style=color:#a6e22e>solve</span>(remaining_suffix: str) <span style=color:#f92672>-&gt;</span> List[List[str]]:
</span></span><span style=display:flex><span> <span style=color:#66d9ef>if</span> <span style=color:#f92672>not</span> remaining_suffix:
</span></span><span style=display:flex><span> <span style=color:#66d9ef>return</span> [[]]
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> <span style=color:#66d9ef>if</span> remaining_suffix <span style=color:#f92672>in</span> memo:
</span></span><span style=display:flex><span> <span style=color:#66d9ef>return</span> memo[remaining_suffix]
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> <span style=color:#66d9ef>if</span> left <span style=color:#f92672>&lt;</span> end <span style=color:#f92672>and</span> arr[left] <span style=color:#f92672>&gt;</span> arr[largest]:
</span></span><span style=display:flex><span> largest <span style=color:#f92672>=</span> left
</span></span><span style=display:flex><span> <span style=color:#66d9ef>if</span> right <span style=color:#f92672>&lt;</span> end <span style=color:#f92672>and</span> arr[right] <span style=color:#f92672>&gt;</span> arr[largest]:
</span></span><span style=display:flex><span> largest <span style=color:#f92672>=</span> right
</span></span><span style=display:flex><span> possible_combos <span style=color:#f92672>=</span> []
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> <span style=color:#66d9ef>if</span> largest <span style=color:#f92672>!=</span> current:
</span></span><span style=display:flex><span> swap(arr, current, largest)
</span></span><span style=display:flex><span> max_heapify(arr, end, largest)
</span></span><span style=display:flex><span> <span style=color:#66d9ef>for</span> chunk <span style=color:#f92672>in</span> chunks:
</span></span><span style=display:flex><span> <span style=color:#66d9ef>if</span> <span style=color:#f92672>not</span> remaining_suffix<span style=color:#f92672>.</span>startswith(chunk):
</span></span><span style=display:flex><span> <span style=color:#66d9ef>continue</span>
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> leftover_results <span style=color:#f92672>=</span> solve(remaining_suffix[len(chunk):])
</span></span><span style=display:flex><span> <span style=color:#66d9ef>if</span> <span style=color:#f92672>not</span> leftover_results:
</span></span><span style=display:flex><span> <span style=color:#66d9ef>continue</span>
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#66d9ef>def</span> <span style=color:#a6e22e>mergeKLists</span>(arr):
</span></span><span style=display:flex><span> arr <span style=color:#f92672>=</span> [value <span style=color:#66d9ef>for</span> subarray <span style=color:#f92672>in</span> arr <span style=color:#66d9ef>for</span> value <span style=color:#f92672>in</span> subarray]
</span></span><span style=display:flex><span> n <span style=color:#f92672>=</span> len(arr)
</span></span><span style=display:flex><span> <span style=color:#66d9ef>for</span> i <span style=color:#f92672>in</span> reversed(range(n <span style=color:#f92672>//</span> <span style=color:#ae81ff>2</span>)):
</span></span><span style=display:flex><span> max_heapify(arr, n, i)
</span></span><span style=display:flex><span> <span style=color:#66d9ef>for</span> rest <span style=color:#f92672>in</span> leftover_results:
</span></span><span style=display:flex><span> possible_combos<span style=color:#f92672>.</span>append([chunk] <span style=color:#f92672>+</span> rest)
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> <span style=color:#66d9ef>for</span> i <span style=color:#f92672>in</span> range(n<span style=color:#f92672>-</span><span style=color:#ae81ff>1</span>,<span style=color:#ae81ff>0</span>,<span style=color:#f92672>-</span><span style=color:#ae81ff>1</span>):
</span></span><span style=display:flex><span> swap(arr, <span style=color:#ae81ff>0</span>, i)
</span></span><span style=display:flex><span> max_heapify(arr, i, <span style=color:#ae81ff>0</span>)
</span></span><span style=display:flex><span> <span style=color:#66d9ef>return</span> arr
</span></span></code></pre></div><h1 id=grpa-2>GrPA 2</h1><div class=highlight><pre tabindex=0 style=color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-python data-lang=python><span style=display:flex><span><span style=color:#66d9ef>def</span> <span style=color:#a6e22e>maxLessThan</span>(root, x):
</span></span><span style=display:flex><span> floor <span style=color:#f92672>=</span> <span style=color:#66d9ef>None</span>
</span></span><span style=display:flex><span> <span style=color:#66d9ef>while</span> <span style=color:#f92672>not</span> root<span style=color:#f92672>.</span>isempty():
</span></span><span style=display:flex><span> <span style=color:#66d9ef>if</span> root<span style=color:#f92672>.</span>value <span style=color:#f92672>&gt;</span> x:
</span></span><span style=display:flex><span> root <span style=color:#f92672>=</span> root<span style=color:#f92672>.</span>left
</span></span><span style=display:flex><span> memo[remaining_suffix] <span style=color:#f92672>=</span> possible_combos
</span></span><span style=display:flex><span> <span style=color:#66d9ef>return</span> possible_combos
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> <span style=color:#66d9ef>return</span> solve(s)
</span></span></code></pre></div><h1 id=grpa-2>GrPA 2</h1><div class=highlight><pre tabindex=0 style=color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-python data-lang=python><span style=display:flex><span><span style=color:#f92672>import</span> numpy <span style=color:#66d9ef>as</span> np
</span></span><span style=display:flex><span><span style=color:#66d9ef>def</span> <span style=color:#a6e22e>MaxCoinPath</span>(M, x1, y1, x2, y2):
</span></span><span style=display:flex><span> M <span style=color:#f92672>=</span> np<span style=color:#f92672>.</span>array(M, dtype<span style=color:#f92672>=</span>int)[x1:x2<span style=color:#f92672>+</span><span style=color:#ae81ff>1</span>, y1:y2<span style=color:#f92672>+</span><span style=color:#ae81ff>1</span>]
</span></span><span style=display:flex><span> cost <span style=color:#f92672>=</span> np<span style=color:#f92672>.</span>zeros((M<span style=color:#f92672>.</span>shape[<span style=color:#ae81ff>0</span>]<span style=color:#f92672>+</span><span style=color:#ae81ff>1</span>, M<span style=color:#f92672>.</span>shape[<span style=color:#ae81ff>1</span>]<span style=color:#f92672>+</span><span style=color:#ae81ff>1</span>), dtype<span style=color:#f92672>=</span>int)
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> <span style=color:#66d9ef>elif</span> root<span style=color:#f92672>.</span>value <span style=color:#f92672>&lt;=</span> x:
</span></span><span style=display:flex><span> floor <span style=color:#f92672>=</span> root<span style=color:#f92672>.</span>value
</span></span><span style=display:flex><span> root <span style=color:#f92672>=</span> root<span style=color:#f92672>.</span>right
</span></span><span style=display:flex><span> <span style=color:#66d9ef>return</span> floor
</span></span></code></pre></div><h1 id=grpa-3>GrPA 3</h1><p>Note that this <code>max_heapify</code> is a workhorse function which you should learn well
because you&rsquo;re gonna use it very frequently to implement a priority queue.</p><div class=highlight><pre tabindex=0 style=color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-python data-lang=python><span style=display:flex><span><span style=color:#66d9ef>def</span> <span style=color:#a6e22e>max_heapify</span>(arr, end, current):
</span></span><span style=display:flex><span> left <span style=color:#f92672>=</span> <span style=color:#ae81ff>2</span> <span style=color:#f92672>*</span> current <span style=color:#f92672>+</span> <span style=color:#ae81ff>1</span>
</span></span><span style=display:flex><span> right <span style=color:#f92672>=</span> left <span style=color:#f92672>+</span> <span style=color:#ae81ff>1</span>
</span></span><span style=display:flex><span> largest <span style=color:#f92672>=</span> current
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> <span style=color:#66d9ef>if</span> left <span style=color:#f92672>&lt;</span> end <span style=color:#f92672>and</span> arr[left] <span style=color:#f92672>&gt;</span> arr[largest]:
</span></span><span style=display:flex><span> largest <span style=color:#f92672>=</span> left
</span></span><span style=display:flex><span> <span style=color:#66d9ef>if</span> right <span style=color:#f92672>&lt;</span> end <span style=color:#f92672>and</span> arr[right] <span style=color:#f92672>&gt;</span> arr[largest]:
</span></span><span style=display:flex><span> largest <span style=color:#f92672>=</span> right
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> <span style=color:#66d9ef>if</span> largest <span style=color:#f92672>!=</span> current:
</span></span><span style=display:flex><span> swap(arr, current, largest)
</span></span><span style=display:flex><span> max_heapify(arr, end, largest)
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#66d9ef>def</span> <span style=color:#a6e22e>min_max</span>(arr):
</span></span><span style=display:flex><span> <span style=color:#66d9ef>for</span> i <span style=color:#f92672>in</span> range(M<span style=color:#f92672>.</span>shape[<span style=color:#ae81ff>0</span>]<span style=color:#f92672>-</span><span style=color:#ae81ff>1</span>, <span style=color:#f92672>-</span><span style=color:#ae81ff>1</span>, <span style=color:#f92672>-</span><span style=color:#ae81ff>1</span>):
</span></span><span style=display:flex><span> <span style=color:#66d9ef>for</span> j <span style=color:#f92672>in</span> range(M<span style=color:#f92672>.</span>shape[<span style=color:#ae81ff>1</span>]<span style=color:#f92672>-</span><span style=color:#ae81ff>1</span>, <span style=color:#f92672>-</span><span style=color:#ae81ff>1</span>, <span style=color:#f92672>-</span><span style=color:#ae81ff>1</span>):
</span></span><span style=display:flex><span> cost[i, j] <span style=color:#f92672>=</span> max(M[i, j] <span style=color:#f92672>+</span> cost[i<span style=color:#f92672>+</span><span style=color:#ae81ff>1</span>, j], M[i, j] <span style=color:#f92672>+</span> cost[i, j<span style=color:#f92672>+</span><span style=color:#ae81ff>1</span>])
</span></span><span style=display:flex><span> <span style=color:#66d9ef>return</span> cost[<span style=color:#ae81ff>0</span>,<span style=color:#ae81ff>0</span>]
</span></span></code></pre></div><h1 id=grpa-3>GrPA 3</h1><div class=highlight><pre tabindex=0 style=color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-python data-lang=python><span style=display:flex><span><span style=color:#66d9ef>def</span> <span style=color:#a6e22e>LDS</span>(arr):
</span></span><span style=display:flex><span> n <span style=color:#f92672>=</span> len(arr)
</span></span><span style=display:flex><span> <span style=color:#66d9ef>for</span> i <span style=color:#f92672>in</span> reversed(range(n <span style=color:#f92672>//</span> <span style=color:#ae81ff>2</span>)):
</span></span><span style=display:flex><span> max_heapify(arr, n, i)
</span></span><span style=display:flex><span> <span style=color:#66d9ef>if</span> n <span style=color:#f92672>==</span> <span style=color:#ae81ff>0</span>:
</span></span><span style=display:flex><span> <span style=color:#66d9ef>return</span> []
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> memo <span style=color:#f92672>=</span> [<span style=color:#ae81ff>1</span>] <span style=color:#f92672>*</span> n
</span></span><span style=display:flex><span> parent <span style=color:#f92672>=</span> [<span style=color:#f92672>-</span><span style=color:#ae81ff>1</span>] <span style=color:#f92672>*</span> n
</span></span><span style=display:flex><span> max_len <span style=color:#f92672>=</span> <span style=color:#ae81ff>0</span>
</span></span><span style=display:flex><span> end_index <span style=color:#f92672>=</span> <span style=color:#f92672>-</span><span style=color:#ae81ff>1</span>
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> <span style=color:#66d9ef>for</span> i <span style=color:#f92672>in</span> range(n):
</span></span><span style=display:flex><span> <span style=color:#66d9ef>for</span> j <span style=color:#f92672>in</span> range(i):
</span></span><span style=display:flex><span> <span style=color:#66d9ef>if</span> arr[i] <span style=color:#f92672>&lt;</span> arr[j] <span style=color:#f92672>and</span> memo[i] <span style=color:#f92672>&lt;</span> memo[j] <span style=color:#f92672>+</span> <span style=color:#ae81ff>1</span>:
</span></span><span style=display:flex><span> memo[i] <span style=color:#f92672>=</span> memo[j] <span style=color:#f92672>+</span> <span style=color:#ae81ff>1</span>
</span></span><span style=display:flex><span> parent[i] <span style=color:#f92672>=</span> j
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> <span style=color:#66d9ef>if</span> memo[i] <span style=color:#f92672>&gt;</span> max_len:
</span></span><span style=display:flex><span> max_len <span style=color:#f92672>=</span> memo[i]
</span></span><span style=display:flex><span> end_index <span style=color:#f92672>=</span> i
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> subsequence <span style=color:#f92672>=</span> []
</span></span><span style=display:flex><span> current_index <span style=color:#f92672>=</span> end_index
</span></span><span style=display:flex><span> <span style=color:#66d9ef>while</span> current_index <span style=color:#f92672>!=</span> <span style=color:#f92672>-</span><span style=color:#ae81ff>1</span>:
</span></span><span style=display:flex><span> subsequence<span style=color:#f92672>.</span>append(arr[current_index])
</span></span><span style=display:flex><span> current_index <span style=color:#f92672>=</span> parent[current_index]
</span></span><span style=display:flex><span> <span style=color:#66d9ef>return</span> subsequence[::<span style=color:#f92672>-</span><span style=color:#ae81ff>1</span>]
</span></span></code></pre></div></section><footer class=post-tags data-pagefind-meta=tags></footer></main><footer class=footer><p>&copy; 2025 <a href=https://lavafroth.is-a.dev/>lavafroth</a></p><p><a href=https://github.com/lavafroth/lavafroth.github.io/issues/new/choose>Report an issue</a></p><p><a href=https://github.com/lavafroth/lavafroth.github.io/discussions/>Discuss</a></p><p><a href=https://lavafroth.is-a.dev/privacy>Privacy</a></p><p><a href=https://creativecommons.org/licenses/by-sa/4.0/legalcode>License</a></p></footer></body></html>