<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>KMP on Nan0inPsyLog</title><link>https://nan0in27.cn/tags/kmp/</link><description>Recent content in KMP on Nan0inPsyLog</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><copyright>楠牧音 | glow Nan0in</copyright><lastBuildDate>Fri, 05 Jun 2026 13:46:04 +0800</lastBuildDate><atom:link href="https://nan0in27.cn/tags/kmp/index.xml" rel="self" type="application/rss+xml"/><item><title>高级数据结构学习笔记</title><link>https://nan0in27.cn/p/%E9%AB%98%E7%BA%A7%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/</link><pubDate>Thu, 04 Jun 2026 00:00:00 +0000</pubDate><guid>https://nan0in27.cn/p/%E9%AB%98%E7%BA%A7%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/</guid><description>&lt;img src="https://nan0in27.cn/p/%E9%AB%98%E7%BA%A7%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/banner.png" alt="Featured image of post 高级数据结构学习笔记" /&gt;&amp;lt;h2 id=&amp;#34;一树状数组-binary-indexed-tree&amp;#34;&amp;gt;一、树状数组 (Binary Indexed Tree)
&amp;lt;/h2&amp;gt;&amp;lt;blockquote&amp;gt;
&amp;lt;p&amp;gt;树状数组是一种支持 &amp;lt;strong&amp;gt;单点修改&amp;lt;/strong&amp;gt; 和 &amp;lt;strong&amp;gt;区间查询&amp;lt;/strong&amp;gt; 的，代码量小的数据结构。&amp;lt;/p&amp;gt;
&amp;lt;/blockquote&amp;gt;
&amp;lt;p&amp;gt;定义每一列的顶端节点为树状数组元素，一般不需要再记录原始数据。&amp;lt;/p&amp;gt;
&amp;lt;h3 id=&amp;#34;结构特点&amp;#34;&amp;gt;结构特点
&amp;lt;/h3&amp;gt;&amp;lt;div class=&amp;#34;highlight&amp;#34;&amp;gt;&amp;lt;div class=&amp;#34;chroma&amp;#34;&amp;gt;
&amp;lt;table class=&amp;#34;lntable&amp;#34;&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td class=&amp;#34;lntd&amp;#34;&amp;gt;
&amp;lt;pre tabindex=&amp;#34;0&amp;#34; class=&amp;#34;chroma&amp;#34;&amp;gt;&amp;lt;code&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;1
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;2
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;3
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;4
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;5
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;6
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;7
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;8
&amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;#34;lntd&amp;#34;&amp;gt;
&amp;lt;pre tabindex=&amp;#34;0&amp;#34; class=&amp;#34;chroma&amp;#34;&amp;gt;&amp;lt;code class=&amp;#34;language-fallback&amp;#34; data-lang=&amp;#34;fallback&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;c[1]=a[1] (001)
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;c[2]=a[1]+a[2] (010)
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;c[3]=a[3] (011)
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;c[4]=a[1]+a[2]+a[3]+a[4] (100)
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;c[5]=a[5] (101)
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;c[6]=a[5]+a[6] (110)
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;c[7]=a[7] (111)
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;c[8]=a[1]+...+a[8] (1000)
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;&amp;lt;p&amp;gt;&amp;lt;code&amp;gt;c[i]&amp;lt;/code&amp;gt; 相当于前 n 个数据的和，而这个 n 来自于 i 的二进制中的最后一个 1 代表的值。树状数组之所以求前缀和快，是因为其将前缀和拆成了 $log,n$ 段区间进行求和。&amp;lt;/p&amp;gt;
&amp;lt;h3 id=&amp;#34;lowbit-函数&amp;#34;&amp;gt;lowbit 函数
&amp;lt;/h3&amp;gt;&amp;lt;div class=&amp;#34;highlight&amp;#34;&amp;gt;&amp;lt;div class=&amp;#34;chroma&amp;#34;&amp;gt;
&amp;lt;table class=&amp;#34;lntable&amp;#34;&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td class=&amp;#34;lntd&amp;#34;&amp;gt;
&amp;lt;pre tabindex=&amp;#34;0&amp;#34; class=&amp;#34;chroma&amp;#34;&amp;gt;&amp;lt;code&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;1
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;2
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;3
&amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;#34;lntd&amp;#34;&amp;gt;
&amp;lt;pre tabindex=&amp;#34;0&amp;#34; class=&amp;#34;chroma&amp;#34;&amp;gt;&amp;lt;code class=&amp;#34;language-c&amp;#34; data-lang=&amp;#34;c&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;nf&amp;#34;&amp;gt;lowbit&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;x&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;{&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;return&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;x&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;amp;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;-&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;x&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;}&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;&amp;lt;p&amp;gt;将二进制位全部取反，再加 1 就是 &amp;lt;code&amp;gt;-x&amp;lt;/code&amp;gt; 的二进制编码（如 &amp;lt;code&amp;gt;6 -&amp;amp;gt; 110&amp;lt;/code&amp;gt;，&amp;lt;code&amp;gt;-6 -&amp;amp;gt; 010&amp;lt;/code&amp;gt;）。两边相与就可以取出低位的 1 以及后面的 0。&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;另一种等价写法：&amp;lt;/p&amp;gt;
&amp;lt;div class=&amp;#34;highlight&amp;#34;&amp;gt;&amp;lt;div class=&amp;#34;chroma&amp;#34;&amp;gt;
&amp;lt;table class=&amp;#34;lntable&amp;#34;&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td class=&amp;#34;lntd&amp;#34;&amp;gt;
&amp;lt;pre tabindex=&amp;#34;0&amp;#34; class=&amp;#34;chroma&amp;#34;&amp;gt;&amp;lt;code&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;1
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;2
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;3
&amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;#34;lntd&amp;#34;&amp;gt;
&amp;lt;pre tabindex=&amp;#34;0&amp;#34; class=&amp;#34;chroma&amp;#34;&amp;gt;&amp;lt;code class=&amp;#34;language-c&amp;#34; data-lang=&amp;#34;c&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;nf&amp;#34;&amp;gt;lowbit&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;x&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;{&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;return&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;x&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;-&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;x&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;amp;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;x&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;-&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;));&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;}&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;&amp;lt;p&amp;gt;&amp;lt;code&amp;gt;x &amp;amp;amp; (x-1)&amp;lt;/code&amp;gt; 去掉二进制中最后一个 1，再用 x 减掉即求得最后一个 1 代表的数。&amp;lt;/p&amp;gt;
&amp;lt;h3 id=&amp;#34;树状数组构建及核心函数&amp;#34;&amp;gt;树状数组构建及核心函数
&amp;lt;/h3&amp;gt;&amp;lt;p&amp;gt;&amp;lt;code&amp;gt;tree[i]&amp;lt;/code&amp;gt; 的关键：每一个节点 i 都存储了一段区间的总和，区间长度为 &amp;lt;code&amp;gt;lowbit(i)&amp;lt;/code&amp;gt;。&amp;lt;/p&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;tree[i]&amp;lt;/code&amp;gt; 存的是原数组从 &amp;lt;code&amp;gt;i - lowbit(i) + 1&amp;lt;/code&amp;gt; 到 &amp;lt;code&amp;gt;i&amp;lt;/code&amp;gt; 这几个元素的和&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;如 &amp;lt;code&amp;gt;tree[6]&amp;lt;/code&amp;gt;，&amp;lt;code&amp;gt;lowbit(6) = 2&amp;lt;/code&amp;gt;，存了原数组 5 和 6 两个元素&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;add 函数&amp;lt;/strong&amp;gt;——由于 lowbit 包含当前组，可以一直溯源到顶部数组：&amp;lt;/p&amp;gt;
&amp;lt;div class=&amp;#34;highlight&amp;#34;&amp;gt;&amp;lt;div class=&amp;#34;chroma&amp;#34;&amp;gt;
&amp;lt;table class=&amp;#34;lntable&amp;#34;&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td class=&amp;#34;lntd&amp;#34;&amp;gt;
&amp;lt;pre tabindex=&amp;#34;0&amp;#34; class=&amp;#34;chroma&amp;#34;&amp;gt;&amp;lt;code&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;1
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;2
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;3
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;4
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;5
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;6
&amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;#34;lntd&amp;#34;&amp;gt;
&amp;lt;pre tabindex=&amp;#34;0&amp;#34; class=&amp;#34;chroma&amp;#34;&amp;gt;&amp;lt;code class=&amp;#34;language-c&amp;#34; data-lang=&amp;#34;c&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;void&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;nf&amp;#34;&amp;gt;Add&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;tree&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[],&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;n&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;{&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;while&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;lt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;n&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;{&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;tree&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;]&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;+=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;+=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;nf&amp;#34;&amp;gt;lowbit&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;);&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;}&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;}&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;&amp;lt;p&amp;gt;之所以 &amp;lt;code&amp;gt;+lowbit(i)&amp;lt;/code&amp;gt;，是在保证包含当前 &amp;lt;code&amp;gt;tree[i]&amp;lt;/code&amp;gt; 的情况下扩大范围。&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;query 函数&amp;lt;/strong&amp;gt;——查询前 i 长度的前缀和：&amp;lt;/p&amp;gt;
&amp;lt;div class=&amp;#34;highlight&amp;#34;&amp;gt;&amp;lt;div class=&amp;#34;chroma&amp;#34;&amp;gt;
&amp;lt;table class=&amp;#34;lntable&amp;#34;&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td class=&amp;#34;lntd&amp;#34;&amp;gt;
&amp;lt;pre tabindex=&amp;#34;0&amp;#34; class=&amp;#34;chroma&amp;#34;&amp;gt;&amp;lt;code&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;1
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;2
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;3
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;4
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;5
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;6
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;7
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;8
&amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;#34;lntd&amp;#34;&amp;gt;
&amp;lt;pre tabindex=&amp;#34;0&amp;#34; class=&amp;#34;chroma&amp;#34;&amp;gt;&amp;lt;code class=&amp;#34;language-c&amp;#34; data-lang=&amp;#34;c&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;nf&amp;#34;&amp;gt;Query&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;tree&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[],&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;{&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;sum&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;0&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;while&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;0&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;{&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;sum&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;+=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;tree&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;];&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;-=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;nf&amp;#34;&amp;gt;lowbit&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;);&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;}&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;return&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;sum&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;}&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;&amp;lt;h3 id=&amp;#34;应用冒泡排序与逆序对&amp;#34;&amp;gt;应用：冒泡排序与逆序对
&amp;lt;/h3&amp;gt;&amp;lt;p&amp;gt;冒泡排序的交换次数取决于逆序对数量。用树状数组存储数字 i 到 j 的区间前缀和，数字 x 出现便置为 1 并更新数组：&amp;lt;/p&amp;gt;
&amp;lt;div class=&amp;#34;highlight&amp;#34;&amp;gt;&amp;lt;div class=&amp;#34;chroma&amp;#34;&amp;gt;
&amp;lt;table class=&amp;#34;lntable&amp;#34;&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td class=&amp;#34;lntd&amp;#34;&amp;gt;
&amp;lt;pre tabindex=&amp;#34;0&amp;#34; class=&amp;#34;chroma&amp;#34;&amp;gt;&amp;lt;code&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 1
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 2
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 3
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 4
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 5
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 6
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 7
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 8
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 9
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;10
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;11
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;12
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;13
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;14
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;15
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;16
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;17
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;18
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;19
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;20
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;21
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;22
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;23
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;24
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;25
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;26
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;27
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;28
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;29
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;30
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;31
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;32
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;33
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;34
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;35
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;36
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;37
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;38
&amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;#34;lntd&amp;#34;&amp;gt;
&amp;lt;pre tabindex=&amp;#34;0&amp;#34; class=&amp;#34;chroma&amp;#34;&amp;gt;&amp;lt;code class=&amp;#34;language-c&amp;#34; data-lang=&amp;#34;c&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cp&amp;#34;&amp;gt;#include&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;cpf&amp;#34;&amp;gt;&amp;amp;lt;stdio.h&amp;amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;cp&amp;#34;&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cp&amp;#34;&amp;gt;#include&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;cpf&amp;#34;&amp;gt;&amp;amp;lt;string.h&amp;amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;cp&amp;#34;&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;n&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;tree&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;100005&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;];&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;nf&amp;#34;&amp;gt;lowbit&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;x&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;{&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;return&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;x&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;amp;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;-&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;x&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;);&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;}&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;void&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;nf&amp;#34;&amp;gt;add&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;val&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;{&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;c1&amp;#34;&amp;gt;// 标记数字 i 出现了 1 次
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;while&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;lt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;n&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;{&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;tree&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;]&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;+=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;val&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;+=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;nf&amp;#34;&amp;gt;lowbit&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;);&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;}&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;}&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;nf&amp;#34;&amp;gt;query&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;{&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;c1&amp;#34;&amp;gt;// 查询 [1, i] 出现了多少个数字
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;sum&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;0&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;while&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;0&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;{&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;sum&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;+=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;tree&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;];&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;-=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;nf&amp;#34;&amp;gt;lowbit&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;);&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;}&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;return&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;sum&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;}&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;nf&amp;#34;&amp;gt;main&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;()&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;{&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;while&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;nf&amp;#34;&amp;gt;scanf&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;s&amp;#34;&amp;gt;&amp;amp;#34;%d&amp;amp;#34;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;amp;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;n&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;!=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;EOF&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;{&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;nf&amp;#34;&amp;gt;memset&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;tree&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;0&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;sizeof&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;tree&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;));&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;long&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;long&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;swaps&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;0&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;for&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;0&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;lt;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;n&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;++&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;{&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;x&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;nf&amp;#34;&amp;gt;scanf&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;s&amp;#34;&amp;gt;&amp;amp;#34;%d&amp;amp;#34;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;amp;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;x&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;);&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;swaps&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;+=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;-&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;nf&amp;#34;&amp;gt;query&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;x&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;);&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;c1&amp;#34;&amp;gt;// 比 x 大的数有多少个
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;nf&amp;#34;&amp;gt;add&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;x&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;);&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;}&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;nf&amp;#34;&amp;gt;printf&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;s&amp;#34;&amp;gt;&amp;amp;#34;%lld&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;se&amp;#34;&amp;gt;\n&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;s&amp;#34;&amp;gt;&amp;amp;#34;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;swaps&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;);&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;}&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;return&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;0&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;}&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;&amp;lt;h3 id=&amp;#34;与差分数组的关系&amp;#34;&amp;gt;与差分数组的关系
&amp;lt;/h3&amp;gt;&amp;lt;p&amp;gt;如果每次对区间 &amp;lt;code&amp;gt;[a, b]&amp;lt;/code&amp;gt; 进行了统一修改，那么区间内部的差分为 0。但：&amp;lt;/p&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;a 处相对于上一个数差分 +1&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;b+1 处相对于上一个数差分 -1&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;p&amp;gt;而差分数组的前缀和，就是精准到点的具体值。&amp;lt;/p&amp;gt;
&amp;lt;hr&amp;gt;
&amp;lt;h2 id=&amp;#34;二线段树-segment-tree&amp;#34;&amp;gt;二、线段树 (Segment Tree)
&amp;lt;/h2&amp;gt;&amp;lt;blockquote&amp;gt;
&amp;lt;p&amp;gt;树状数组可以做的线段树都可以做到，但是代码上会复杂一些。&amp;lt;/p&amp;gt;
&amp;lt;/blockquote&amp;gt;
&amp;lt;p&amp;gt;每一次操作都是对某一段区间的修改或查询。&amp;lt;/p&amp;gt;
&amp;lt;h3 id=&amp;#34;线段树原理&amp;#34;&amp;gt;线段树原理
&amp;lt;/h3&amp;gt;&amp;lt;p&amp;gt;假设有编号 1-n 的 n 个点，每个点都存了一些信息，用 &amp;lt;code&amp;gt;[L, R]&amp;lt;/code&amp;gt; 表示下标从 L 到 R 的区间信息。&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;将 &amp;lt;code&amp;gt;[1, n]&amp;lt;/code&amp;gt; 分解成若干特定子区间（数量不超过 &amp;lt;code&amp;gt;4n&amp;lt;/code&amp;gt;），然后将每个区间 &amp;lt;code&amp;gt;[L, R]&amp;lt;/code&amp;gt; 都分解成少量特定子区间，通过对这些少量子区间的修改或统计，来实现快速对 &amp;lt;code&amp;gt;[L, R]&amp;lt;/code&amp;gt; 的修改或统计。&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;线段树是一棵&amp;lt;strong&amp;gt;平衡二叉树&amp;lt;/strong&amp;gt;，但不是完全二叉树。&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;
&amp;lt;div class=&amp;#34;post-img-view&amp;#34;&amp;gt;
&amp;lt;a data-fancybox=&amp;#34;gallery&amp;#34; href=&amp;#34;/p/%E9%AB%98%E7%BA%A7%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/image-20260324151842-lhsdn7r.png&amp;#34;&amp;gt;
&amp;lt;img src=&amp;#34;/p/%E9%AB%98%E7%BA%A7%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/image-20260324151842-lhsdn7r.png&amp;#34;
width=&amp;#34;559&amp;#34;
height=&amp;#34;213&amp;#34;
srcset=&amp;#34;/p/%E9%AB%98%E7%BA%A7%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/image-20260324151842-lhsdn7r_hu_5d4298f449e164e8.png 480w, /p/%E9%AB%98%E7%BA%A7%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/image-20260324151842-lhsdn7r_hu_e4c86c51f332a44a.png 1024w&amp;#34;
loading=&amp;#34;lazy&amp;#34;
alt=&amp;#34;线段树结构&amp;#34;
class=&amp;#34;gallery-image&amp;#34;
data-flex-grow=&amp;#34;262&amp;#34;
data-flex-basis=&amp;#34;629px&amp;#34;
/&amp;gt;
&amp;lt;/a&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/p&amp;gt;
&amp;lt;h4 id=&amp;#34;性质&amp;#34;&amp;gt;性质
&amp;lt;/h4&amp;gt;&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;每个区间长度是区间整数的个数&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;叶子节点长度为 1，不可再分
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;若单个节点对应区间 &amp;lt;code&amp;gt;[a, b]&amp;lt;/code&amp;gt;，则其子区间对应节点为 &amp;lt;code&amp;gt;[a, (a+b)/2]&amp;lt;/code&amp;gt; 和 &amp;lt;code&amp;gt;[(a+b)/2+1, b]&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;线段树高度为 $\lceil \log_2(b-a+1) \rceil + 1$&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;线段树把区间上任意一条线段都分成不超过 $2\log N$ 条&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;div class=&amp;#34;details admonition info&amp;#34;&amp;gt;
&amp;lt;div class=&amp;#34;details-summary admonition-title&amp;#34;&amp;gt;
&amp;lt;i class=&amp;#34;icon fas fa-info-circle fa-fw&amp;#34;&amp;gt;&amp;lt;/i&amp;gt;注意&amp;lt;i class=&amp;#34;details-icon fas fa-angle-right fa-fw&amp;#34;&amp;gt;&amp;lt;/i&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;#34;details-content&amp;#34;&amp;gt;
&amp;lt;div class=&amp;#34;admonition-content&amp;#34;&amp;gt;例如上图中要查询 5-10，只需要 5-7 + 8-10 两条合起来即可。即每一层最多只需选择两个节点组合出父节点，而高度为 $\log N$。&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;h3 id=&amp;#34;线段树定义&amp;#34;&amp;gt;线段树定义
&amp;lt;/h3&amp;gt;&amp;lt;div class=&amp;#34;highlight&amp;#34;&amp;gt;&amp;lt;div class=&amp;#34;chroma&amp;#34;&amp;gt;
&amp;lt;table class=&amp;#34;lntable&amp;#34;&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td class=&amp;#34;lntd&amp;#34;&amp;gt;
&amp;lt;pre tabindex=&amp;#34;0&amp;#34; class=&amp;#34;chroma&amp;#34;&amp;gt;&amp;lt;code&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;1
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;2
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;3
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;4
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;5
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;6
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;7
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;8
&amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;#34;lntd&amp;#34;&amp;gt;
&amp;lt;pre tabindex=&amp;#34;0&amp;#34; class=&amp;#34;chroma&amp;#34;&amp;gt;&amp;lt;code class=&amp;#34;language-c&amp;#34; data-lang=&amp;#34;c&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cp&amp;#34;&amp;gt;#define maxn 100007 &amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;c1&amp;#34;&amp;gt;// 元素总个数
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;A&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;maxn&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;];&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;c1&amp;#34;&amp;gt;// 原始数组，不一定要用
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;struct&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;SegTreeNode&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;{&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;val&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;c1&amp;#34;&amp;gt;// 节点值
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;c1&amp;#34;&amp;gt;// int lazy; // 懒惰标记（延迟更新标记）
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;c1&amp;#34;&amp;gt;// 根据题目需要增加元素
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;}&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;SegTree&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;maxn&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;lt;&amp;amp;lt;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;2&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;];&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;c1&amp;#34;&amp;gt;// 定义线段树
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;&amp;lt;h3 id=&amp;#34;线段树构造&amp;#34;&amp;gt;线段树构造
&amp;lt;/h3&amp;gt;&amp;lt;div class=&amp;#34;highlight&amp;#34;&amp;gt;&amp;lt;div class=&amp;#34;chroma&amp;#34;&amp;gt;
&amp;lt;table class=&amp;#34;lntable&amp;#34;&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td class=&amp;#34;lntd&amp;#34;&amp;gt;
&amp;lt;pre tabindex=&amp;#34;0&amp;#34; class=&amp;#34;chroma&amp;#34;&amp;gt;&amp;lt;code&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 1
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 2
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 3
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 4
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 5
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 6
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 7
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 8
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 9
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;10
&amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;#34;lntd&amp;#34;&amp;gt;
&amp;lt;pre tabindex=&amp;#34;0&amp;#34; class=&amp;#34;chroma&amp;#34;&amp;gt;&amp;lt;code class=&amp;#34;language-c&amp;#34; data-lang=&amp;#34;c&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;void&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;nf&amp;#34;&amp;gt;build&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;l&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;r&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;rt&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;{&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;c1&amp;#34;&amp;gt;// 根为 rt，区间为 [l, r]
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;if&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;l&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;==&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;r&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;{&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;SegTree&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;rt&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;].&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;val&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;A&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;l&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;];&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;return&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;}&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;m&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;l&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;+&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;r&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;/&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;2&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;nf&amp;#34;&amp;gt;build&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;l&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;m&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;rt&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;*&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;2&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;);&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;c1&amp;#34;&amp;gt;// 递归构造左右子树
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;nf&amp;#34;&amp;gt;build&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;m&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;+&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;r&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;rt&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;*&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;2&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;+&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;);&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;nf&amp;#34;&amp;gt;PushUp&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;rt&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;);&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;c1&amp;#34;&amp;gt;// 回溯，向上更新
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;}&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;&amp;lt;p&amp;gt;&amp;lt;code&amp;gt;rt&amp;lt;/code&amp;gt; 可以理解为实际存储的下标。递归到最后将值给回父节点，实际上只需做求子树和：&amp;lt;/p&amp;gt;
&amp;lt;div class=&amp;#34;highlight&amp;#34;&amp;gt;&amp;lt;div class=&amp;#34;chroma&amp;#34;&amp;gt;
&amp;lt;table class=&amp;#34;lntable&amp;#34;&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td class=&amp;#34;lntd&amp;#34;&amp;gt;
&amp;lt;pre tabindex=&amp;#34;0&amp;#34; class=&amp;#34;chroma&amp;#34;&amp;gt;&amp;lt;code&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;1
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;2
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;3
&amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;#34;lntd&amp;#34;&amp;gt;
&amp;lt;pre tabindex=&amp;#34;0&amp;#34; class=&amp;#34;chroma&amp;#34;&amp;gt;&amp;lt;code class=&amp;#34;language-c&amp;#34; data-lang=&amp;#34;c&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;void&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;nf&amp;#34;&amp;gt;PushUp&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;rt&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;{&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;SegTree&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;rt&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;].&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;val&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;SegTree&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;rt&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;lt;&amp;amp;lt;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;].&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;val&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;+&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;SegTree&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;rt&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;lt;&amp;amp;lt;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;1&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;|&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;].&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;val&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;}&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;&amp;lt;h3 id=&amp;#34;单点更新假设-al--c&amp;#34;&amp;gt;单点更新（假设 A[L] += C）
&amp;lt;/h3&amp;gt;&amp;lt;div class=&amp;#34;highlight&amp;#34;&amp;gt;&amp;lt;div class=&amp;#34;chroma&amp;#34;&amp;gt;
&amp;lt;table class=&amp;#34;lntable&amp;#34;&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td class=&amp;#34;lntd&amp;#34;&amp;gt;
&amp;lt;pre tabindex=&amp;#34;0&amp;#34; class=&amp;#34;chroma&amp;#34;&amp;gt;&amp;lt;code&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 1
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 2
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 3
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 4
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 5
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 6
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 7
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 8
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 9
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;10
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;11
&amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;#34;lntd&amp;#34;&amp;gt;
&amp;lt;pre tabindex=&amp;#34;0&amp;#34; class=&amp;#34;chroma&amp;#34;&amp;gt;&amp;lt;code class=&amp;#34;language-c&amp;#34; data-lang=&amp;#34;c&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;c1&amp;#34;&amp;gt;// l, r 表示当前节点区间，rt 表示当前线段树的根节点编号
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;void&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;nf&amp;#34;&amp;gt;Update&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;L&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;C&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;l&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;r&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;rt&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;{&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;if&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;l&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;==&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;r&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;{&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;SegTree&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;rt&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;].&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;val&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;+=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;C&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;return&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;}&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;m&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;l&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;+&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;r&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;if&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;L&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;lt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;m&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;nf&amp;#34;&amp;gt;Update&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;L&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;C&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;l&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;m&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;rt&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;lt;&amp;amp;lt;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;);&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;else&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;nf&amp;#34;&amp;gt;Update&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;L&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;C&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;m&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;+&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;r&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;rt&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;lt;&amp;amp;lt;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;1&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;|&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;);&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;nf&amp;#34;&amp;gt;PushUp&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;rt&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;);&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;}&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;&amp;lt;h3 id=&amp;#34;区间查询询问-alr-的和&amp;#34;&amp;gt;区间查询（询问 A[L..R] 的和）
&amp;lt;/h3&amp;gt;&amp;lt;div class=&amp;#34;highlight&amp;#34;&amp;gt;&amp;lt;div class=&amp;#34;chroma&amp;#34;&amp;gt;
&amp;lt;table class=&amp;#34;lntable&amp;#34;&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td class=&amp;#34;lntd&amp;#34;&amp;gt;
&amp;lt;pre tabindex=&amp;#34;0&amp;#34; class=&amp;#34;chroma&amp;#34;&amp;gt;&amp;lt;code&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 1
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 2
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 3
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 4
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 5
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 6
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 7
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 8
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 9
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;10
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;11
&amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;#34;lntd&amp;#34;&amp;gt;
&amp;lt;pre tabindex=&amp;#34;0&amp;#34; class=&amp;#34;chroma&amp;#34;&amp;gt;&amp;lt;code class=&amp;#34;language-c&amp;#34; data-lang=&amp;#34;c&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;c1&amp;#34;&amp;gt;// [L,R] 是操作区间，[l,r] 是当前区间，rt 是当前节点编号
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;nf&amp;#34;&amp;gt;Query&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;L&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;R&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;l&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;r&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;rt&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;{&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;if&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;L&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;lt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;l&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;amp;&amp;amp;amp;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;r&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;lt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;R&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;return&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;SegTree&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;rt&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;].&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;val&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;if&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;L&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;r&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;||&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;R&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;lt;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;l&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;return&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;0&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;m&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;l&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;+&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;r&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;ANS&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;0&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;if&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;L&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;lt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;m&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;ANS&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;+=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;nf&amp;#34;&amp;gt;Query&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;L&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;R&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;l&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;m&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;rt&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;lt;&amp;amp;lt;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;);&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;if&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;R&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;m&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;ANS&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;+=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;nf&amp;#34;&amp;gt;Query&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;L&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;R&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;m&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;+&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;r&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;rt&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;lt;&amp;amp;lt;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;1&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;|&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;);&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;return&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;ANS&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;}&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;&amp;lt;h3 id=&amp;#34;区间更新引入--延迟标记-lazy-tag&amp;#34;&amp;gt;区间更新引入 — 延迟标记 (Lazy Tag)
&amp;lt;/h3&amp;gt;&amp;lt;p&amp;gt;由于更新某个区间内所有叶子节点的值会影响其相应的非叶子节点，回溯更新的非叶子节点也会有很多，时间复杂度会大幅上升。&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;为此，引入线段树中的&amp;lt;strong&amp;gt;延迟标记&amp;lt;/strong&amp;gt;（Lazy Tag）概念。&amp;lt;/p&amp;gt;
&amp;lt;div class=&amp;#34;details admonition success&amp;#34;&amp;gt;
&amp;lt;div class=&amp;#34;details-summary admonition-title&amp;#34;&amp;gt;
&amp;lt;i class=&amp;#34;icon fas fa-check-circle fa-fw&amp;#34;&amp;gt;&amp;lt;/i&amp;gt;提示&amp;lt;i class=&amp;#34;details-icon fas fa-angle-right fa-fw&amp;#34;&amp;gt;&amp;lt;/i&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;#34;details-content&amp;#34;&amp;gt;
&amp;lt;div class=&amp;#34;admonition-content&amp;#34;&amp;gt;&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;延迟更新的意义：&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;ol&amp;gt;
&amp;lt;li&amp;gt;多次更新、一次下推&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;无需要，不下推 —— 用不到孩子就不用更新孩子&amp;lt;/li&amp;gt;
&amp;lt;/ol&amp;gt;&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;p&amp;gt;假设操作：把区间 &amp;lt;code&amp;gt;[1, 100000]&amp;lt;/code&amp;gt; 全部改成值 3。&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;如果&amp;lt;strong&amp;gt;逐个点更新&amp;lt;/strong&amp;gt;：更新 100000 次 ❌（会超时）&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;但你想表达的只是：&amp;lt;strong&amp;gt;这一整段都是 3&amp;lt;/strong&amp;gt;。所以不需要真改每个点，标记一下即可。&amp;lt;/p&amp;gt;
&amp;lt;h4 id=&amp;#34;什么时候才下发-lazy&amp;#34;&amp;gt;什么时候才&amp;amp;quot;下发&amp;amp;quot; lazy？
&amp;lt;/h4&amp;gt;&amp;lt;ol&amp;gt;
&amp;lt;li&amp;gt;要访问子节点时&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;要查询子节点时&amp;lt;/li&amp;gt;
&amp;lt;/ol&amp;gt;
&amp;lt;h4 id=&amp;#34;完整流程示例&amp;#34;&amp;gt;完整流程示例
&amp;lt;/h4&amp;gt;&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;初始&amp;lt;/strong&amp;gt;：&amp;lt;code&amp;gt;[1, 5] = 1 1 1 1 1&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;操作 1&amp;lt;/strong&amp;gt;：更新 &amp;lt;code&amp;gt;[1, 5] = 3&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;根节点直接 &amp;lt;code&amp;gt;val = 5 * 3 = 15&amp;lt;/code&amp;gt;，&amp;lt;code&amp;gt;lazy = 3&amp;lt;/code&amp;gt;，&amp;lt;strong&amp;gt;没有递归下去&amp;lt;/strong&amp;gt;。&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;操作 2&amp;lt;/strong&amp;gt;：更新 &amp;lt;code&amp;gt;[2, 3] = 2&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;现在问题来了：节点有 &amp;lt;code&amp;gt;lazy = 3&amp;lt;/code&amp;gt;，但你只想改 &amp;lt;code&amp;gt;[2, 3]&amp;lt;/code&amp;gt;，必须先 PushDown！&amp;lt;/p&amp;gt;
&amp;lt;div class=&amp;#34;highlight&amp;#34;&amp;gt;&amp;lt;div class=&amp;#34;chroma&amp;#34;&amp;gt;
&amp;lt;table class=&amp;#34;lntable&amp;#34;&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td class=&amp;#34;lntd&amp;#34;&amp;gt;
&amp;lt;pre tabindex=&amp;#34;0&amp;#34; class=&amp;#34;chroma&amp;#34;&amp;gt;&amp;lt;code&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;1
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;2
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;3
&amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;#34;lntd&amp;#34;&amp;gt;
&amp;lt;pre tabindex=&amp;#34;0&amp;#34; class=&amp;#34;chroma&amp;#34;&amp;gt;&amp;lt;code class=&amp;#34;language-fallback&amp;#34; data-lang=&amp;#34;fallback&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;把 [1,5] 的 lazy=3 下发：
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; 左：[1,3] = 3 3 3
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; 右：[4,5] = 3 3
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;&amp;lt;p&amp;gt;然后再继续更新 &amp;lt;code&amp;gt;[2, 3]&amp;lt;/code&amp;gt;。&amp;lt;/p&amp;gt;
&amp;lt;h3 id=&amp;#34;线段树定义有-lazy-标记&amp;#34;&amp;gt;线段树定义（有 lazy 标记）
&amp;lt;/h3&amp;gt;&amp;lt;blockquote&amp;gt;
&amp;lt;p&amp;gt;lazy = &amp;amp;ldquo;这个区间还没真正下发的操作&amp;amp;rdquo;&amp;lt;/p&amp;gt;
&amp;lt;/blockquote&amp;gt;
&amp;lt;div class=&amp;#34;highlight&amp;#34;&amp;gt;&amp;lt;div class=&amp;#34;chroma&amp;#34;&amp;gt;
&amp;lt;table class=&amp;#34;lntable&amp;#34;&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td class=&amp;#34;lntd&amp;#34;&amp;gt;
&amp;lt;pre tabindex=&amp;#34;0&amp;#34; class=&amp;#34;chroma&amp;#34;&amp;gt;&amp;lt;code&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;1
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;2
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;3
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;4
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;5
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;6
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;7
&amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;#34;lntd&amp;#34;&amp;gt;
&amp;lt;pre tabindex=&amp;#34;0&amp;#34; class=&amp;#34;chroma&amp;#34;&amp;gt;&amp;lt;code class=&amp;#34;language-c&amp;#34; data-lang=&amp;#34;c&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cp&amp;#34;&amp;gt;#define maxn 100007
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;A&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;maxn&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;];&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;struct&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;SegTreeNode&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;{&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;val&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;lazy&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;}&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;SegTree&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;maxn&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;lt;&amp;amp;lt;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;2&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;];&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;&amp;lt;h3 id=&amp;#34;线段树构造有-lazy-标记&amp;#34;&amp;gt;线段树构造（有 lazy 标记）
&amp;lt;/h3&amp;gt;&amp;lt;div class=&amp;#34;highlight&amp;#34;&amp;gt;&amp;lt;div class=&amp;#34;chroma&amp;#34;&amp;gt;
&amp;lt;table class=&amp;#34;lntable&amp;#34;&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td class=&amp;#34;lntd&amp;#34;&amp;gt;
&amp;lt;pre tabindex=&amp;#34;0&amp;#34; class=&amp;#34;chroma&amp;#34;&amp;gt;&amp;lt;code&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 1
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 2
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 3
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 4
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 5
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 6
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 7
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 8
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 9
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;10
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;11
&amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;#34;lntd&amp;#34;&amp;gt;
&amp;lt;pre tabindex=&amp;#34;0&amp;#34; class=&amp;#34;chroma&amp;#34;&amp;gt;&amp;lt;code class=&amp;#34;language-c&amp;#34; data-lang=&amp;#34;c&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;void&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;nf&amp;#34;&amp;gt;build&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;l&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;r&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;rt&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;{&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;SegTree&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;rt&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;].&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;lazy&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;0&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;if&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;l&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;==&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;r&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;{&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;SegTree&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;rt&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;].&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;val&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;A&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;l&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;];&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;return&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;}&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;m&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;l&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;+&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;r&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;/&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;2&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;nf&amp;#34;&amp;gt;build&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;l&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;m&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;rt&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;*&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;2&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;);&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;nf&amp;#34;&amp;gt;build&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;m&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;+&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;r&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;rt&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;*&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;2&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;+&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;);&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;nf&amp;#34;&amp;gt;PushUp&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;rt&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;);&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;}&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;&amp;lt;h3 id=&amp;#34;区间更新以-alr--c-为例&amp;#34;&amp;gt;区间更新（以 A[L,R] += C 为例）
&amp;lt;/h3&amp;gt;&amp;lt;div class=&amp;#34;highlight&amp;#34;&amp;gt;&amp;lt;div class=&amp;#34;chroma&amp;#34;&amp;gt;
&amp;lt;table class=&amp;#34;lntable&amp;#34;&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td class=&amp;#34;lntd&amp;#34;&amp;gt;
&amp;lt;pre tabindex=&amp;#34;0&amp;#34; class=&amp;#34;chroma&amp;#34;&amp;gt;&amp;lt;code&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 1
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 2
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 3
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 4
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 5
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 6
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 7
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 8
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 9
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;10
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;11
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;12
&amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;#34;lntd&amp;#34;&amp;gt;
&amp;lt;pre tabindex=&amp;#34;0&amp;#34; class=&amp;#34;chroma&amp;#34;&amp;gt;&amp;lt;code class=&amp;#34;language-c&amp;#34; data-lang=&amp;#34;c&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;void&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;nf&amp;#34;&amp;gt;Update&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;L&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;R&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;C&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;l&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;r&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;rt&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;{&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;if&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;L&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;lt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;l&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;amp;&amp;amp;amp;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;r&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;lt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;R&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;{&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;SegTree&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;rt&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;].&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;val&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;+=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;C&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;*&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;r&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;-&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;l&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;+&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;);&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;c1&amp;#34;&amp;gt;// 更新数字和
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;SegTree&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;rt&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;].&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;lazy&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;+=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;C&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;c1&amp;#34;&amp;gt;// 累加（或用赋值，看需求）
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;return&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;}&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;m&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;l&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;+&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;r&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;nf&amp;#34;&amp;gt;PushDown&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;rt&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;m&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;-&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;l&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;+&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;r&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;-&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;m&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;);&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;c1&amp;#34;&amp;gt;// 下推后才准确更新子节点
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;if&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;L&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;lt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;m&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;nf&amp;#34;&amp;gt;Update&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;L&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;R&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;C&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;l&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;m&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;rt&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;lt;&amp;amp;lt;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;);&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;if&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;R&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;m&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;nf&amp;#34;&amp;gt;Update&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;L&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;R&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;C&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;m&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;+&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;r&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;rt&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;lt;&amp;amp;lt;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;1&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;|&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;);&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;nf&amp;#34;&amp;gt;PushUp&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;rt&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;);&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;}&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;&amp;lt;p&amp;gt;PushDown 处理子节点：&amp;lt;/p&amp;gt;
&amp;lt;div class=&amp;#34;highlight&amp;#34;&amp;gt;&amp;lt;div class=&amp;#34;chroma&amp;#34;&amp;gt;
&amp;lt;table class=&amp;#34;lntable&amp;#34;&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td class=&amp;#34;lntd&amp;#34;&amp;gt;
&amp;lt;pre tabindex=&amp;#34;0&amp;#34; class=&amp;#34;chroma&amp;#34;&amp;gt;&amp;lt;code&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 1
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 2
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 3
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 4
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 5
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 6
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 7
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 8
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 9
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;10
&amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;#34;lntd&amp;#34;&amp;gt;
&amp;lt;pre tabindex=&amp;#34;0&amp;#34; class=&amp;#34;chroma&amp;#34;&amp;gt;&amp;lt;code class=&amp;#34;language-c&amp;#34; data-lang=&amp;#34;c&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;c1&amp;#34;&amp;gt;// ln, rn 分别表示左右子树的区间大小
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;void&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;nf&amp;#34;&amp;gt;PushDown&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;rt&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;ln&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;rn&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;{&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;if&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;SegTree&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;rt&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;].&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;lazy&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;{&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;SegTree&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;rt&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;lt;&amp;amp;lt;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;].&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;lazy&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;SegTree&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;rt&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;].&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;lazy&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;SegTree&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;rt&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;lt;&amp;amp;lt;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;1&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;|&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;].&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;lazy&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;SegTree&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;rt&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;].&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;lazy&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;SegTree&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;rt&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;lt;&amp;amp;lt;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;].&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;val&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;SegTree&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;rt&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;].&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;lazy&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;*&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;ln&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;SegTree&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;rt&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;lt;&amp;amp;lt;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;1&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;|&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;].&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;val&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;SegTree&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;rt&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;].&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;lazy&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;*&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;rn&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;SegTree&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;rt&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;].&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;lazy&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;0&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;c1&amp;#34;&amp;gt;// 清除本节点标记
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;}&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;}&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;&amp;lt;h3 id=&amp;#34;区间更新后的区间查询&amp;#34;&amp;gt;区间更新后的区间查询
&amp;lt;/h3&amp;gt;&amp;lt;div class=&amp;#34;highlight&amp;#34;&amp;gt;&amp;lt;div class=&amp;#34;chroma&amp;#34;&amp;gt;
&amp;lt;table class=&amp;#34;lntable&amp;#34;&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td class=&amp;#34;lntd&amp;#34;&amp;gt;
&amp;lt;pre tabindex=&amp;#34;0&amp;#34; class=&amp;#34;chroma&amp;#34;&amp;gt;&amp;lt;code&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;1
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;2
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;3
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;4
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;5
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;6
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;7
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;8
&amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;#34;lntd&amp;#34;&amp;gt;
&amp;lt;pre tabindex=&amp;#34;0&amp;#34; class=&amp;#34;chroma&amp;#34;&amp;gt;&amp;lt;code class=&amp;#34;language-c&amp;#34; data-lang=&amp;#34;c&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;nf&amp;#34;&amp;gt;Query&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;L&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;R&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;l&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;r&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;rt&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;{&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;if&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;L&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;lt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;l&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;amp;&amp;amp;amp;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;r&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;lt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;R&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;return&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;SegTree&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;rt&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;].&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;val&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;if&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;L&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;r&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;||&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;R&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;lt;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;l&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;return&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;0&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;m&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;l&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;+&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;r&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;nf&amp;#34;&amp;gt;PushDown&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;rt&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;m&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;-&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;l&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;+&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;r&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;-&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;m&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;);&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;c1&amp;#34;&amp;gt;// 下推让子节点数据正确
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;return&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;nf&amp;#34;&amp;gt;Query&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;L&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;R&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;l&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;m&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;rt&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;lt;&amp;amp;lt;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;+&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;nf&amp;#34;&amp;gt;Query&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;L&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;R&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;m&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;+&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;r&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;rt&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;lt;&amp;amp;lt;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;1&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;|&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;);&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;}&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;&amp;lt;h3 id=&amp;#34;线段树的应用范围&amp;#34;&amp;gt;线段树的应用范围
&amp;lt;/h3&amp;gt;&amp;lt;p&amp;gt;线段树统计的东西必须符合区间&amp;amp;quot;&amp;lt;strong&amp;gt;加法&amp;lt;/strong&amp;gt;&amp;amp;quot;——否则无法通过二分子区间得到 &amp;lt;code&amp;gt;[L, R]&amp;lt;/code&amp;gt; 的统计结果。&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;符合区间加法的例子：&amp;lt;/p&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;区间数字之和 = 左区间和 + 右区间和&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;区间最大值 = max(左区间最大, 右区间最大)&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;区间最大公因数 (GCD) = gcd(左区间 GCD, 右区间 GCD)&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;blockquote&amp;gt;
&amp;lt;p&amp;gt;线段树非常重要！一个问题只要能转化成对一些连续点的修改和统计问题，基本就可以用线段树解决。&amp;lt;/p&amp;gt;
&amp;lt;/blockquote&amp;gt;
&amp;lt;hr&amp;gt;
&amp;lt;h2 id=&amp;#34;三二分专题&amp;#34;&amp;gt;三、二分专题
&amp;lt;/h2&amp;gt;&amp;lt;h3 id=&amp;#34;二分查找&amp;#34;&amp;gt;二分查找
&amp;lt;/h3&amp;gt;&amp;lt;p&amp;gt;单调不下降数组 &amp;lt;code&amp;gt;a[1..n]&amp;lt;/code&amp;gt;，问 x 是否在其中。&amp;lt;/p&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;假设已知答案位于 &amp;lt;code&amp;gt;[l, r]&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;若 &amp;lt;code&amp;gt;l &amp;amp;gt; r&amp;lt;/code&amp;gt;，说明 x 不在其中&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;否则取 &amp;lt;code&amp;gt;mid = (l + r) / 2&amp;lt;/code&amp;gt;，比较 x 与 &amp;lt;code&amp;gt;a[mid]&amp;lt;/code&amp;gt;：
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;x == a[mid]&amp;lt;/code&amp;gt; 则找到&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;x &amp;amp;lt; a[mid]&amp;lt;/code&amp;gt; 则区间缩小为 &amp;lt;code&amp;gt;[l, mid-1]&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;x &amp;amp;gt; a[mid]&amp;lt;/code&amp;gt; 则区间缩小为 &amp;lt;code&amp;gt;[mid+1, r]&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;h3 id=&amp;#34;高级二分序列划分&amp;#34;&amp;gt;高级二分：序列划分
&amp;lt;/h3&amp;gt;&amp;lt;p&amp;gt;给定 n 个正整数 &amp;lt;code&amp;gt;a[1..n]&amp;lt;/code&amp;gt;，将这个序列从左到右划分成 m 段，每段至少一个数。&amp;lt;strong&amp;gt;需要让数字之和最大的那段尽可能小。&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;1 &amp;amp;lt;= m &amp;amp;lt;= n &amp;amp;lt;= 100000&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;1 &amp;amp;lt;= a[i] &amp;amp;lt;= 10^9&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;单调性&amp;lt;/strong&amp;gt;：最大的和不可能比所有和大，不可能比最大的数小 → 答案区间 &amp;lt;code&amp;gt;[max(a[1..n]), sum(a[1..n])]&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;h4 id=&amp;#34;思路&amp;#34;&amp;gt;思路
&amp;lt;/h4&amp;gt;&amp;lt;p&amp;gt;设 &amp;lt;code&amp;gt;f(x)&amp;lt;/code&amp;gt; 表示每一段数字之和不超过 x 时，至少划分成多少段。贪心计算：从左往右考虑每个数，能不切就不切。&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;code&amp;gt;f(x) &amp;amp;gt;= f(x+1)&amp;lt;/code&amp;gt; 显然是单调函数（x 增大，划分更宽松）。&amp;lt;/p&amp;gt;
&amp;lt;div class=&amp;#34;highlight&amp;#34;&amp;gt;&amp;lt;div class=&amp;#34;chroma&amp;#34;&amp;gt;
&amp;lt;table class=&amp;#34;lntable&amp;#34;&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td class=&amp;#34;lntd&amp;#34;&amp;gt;
&amp;lt;pre tabindex=&amp;#34;0&amp;#34; class=&amp;#34;chroma&amp;#34;&amp;gt;&amp;lt;code&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 1
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 2
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 3
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 4
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 5
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 6
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 7
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 8
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 9
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;10
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;11
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;12
&amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;#34;lntd&amp;#34;&amp;gt;
&amp;lt;pre tabindex=&amp;#34;0&amp;#34; class=&amp;#34;chroma&amp;#34;&amp;gt;&amp;lt;code class=&amp;#34;language-cpp&amp;#34; data-lang=&amp;#34;cpp&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;nf&amp;#34;&amp;gt;f&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;long&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;long&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;x&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;{&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;long&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;long&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;sum&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;0&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;c1&amp;#34;&amp;gt;// 当前段数字之和
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;cnt&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;c1&amp;#34;&amp;gt;// 最少切出段数
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;for&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;lt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;n&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;++&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;{&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;if&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;a&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;]&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;x&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;return&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;-&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;if&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;sum&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;+&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;a&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;]&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;lt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;x&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;sum&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;+=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;a&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;];&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;else&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;sum&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;a&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;],&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;cnt&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;++&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;c1&amp;#34;&amp;gt;// 开启新段
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;}&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;return&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;cnt&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;}&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;&amp;lt;p&amp;gt;二分求解：&amp;lt;/p&amp;gt;
&amp;lt;div class=&amp;#34;highlight&amp;#34;&amp;gt;&amp;lt;div class=&amp;#34;chroma&amp;#34;&amp;gt;
&amp;lt;table class=&amp;#34;lntable&amp;#34;&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td class=&amp;#34;lntd&amp;#34;&amp;gt;
&amp;lt;pre tabindex=&amp;#34;0&amp;#34; class=&amp;#34;chroma&amp;#34;&amp;gt;&amp;lt;code&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 1
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 2
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 3
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 4
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 5
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 6
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 7
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 8
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 9
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;10
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;11
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;12
&amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;#34;lntd&amp;#34;&amp;gt;
&amp;lt;pre tabindex=&amp;#34;0&amp;#34; class=&amp;#34;chroma&amp;#34;&amp;gt;&amp;lt;code class=&amp;#34;language-cpp&amp;#34; data-lang=&amp;#34;cpp&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;long&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;long&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;nf&amp;#34;&amp;gt;solve&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;long&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;long&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;mx&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;long&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;long&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;sum&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;{&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;long&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;long&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;l&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;mx&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;r&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;sum&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;ans&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;r&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;while&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;l&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;lt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;r&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;{&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;long&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;long&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;mid&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;l&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;+&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;r&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;/&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;2&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;tmp&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;f&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;mid&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;);&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;if&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;tmp&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;lt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;m&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;ans&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;mid&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;r&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;mid&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;-&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;else&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;l&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;mid&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;+&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;}&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;return&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;ans&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;}&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;&amp;lt;h3 id=&amp;#34;例2ice-cream-tower&amp;#34;&amp;gt;例2：Ice Cream Tower
&amp;lt;/h3&amp;gt;&amp;lt;p&amp;gt;给定 n 个正整数 &amp;lt;code&amp;gt;a[1..n]&amp;lt;/code&amp;gt; 和正整数 k。塔满足 &amp;lt;code&amp;gt;b[1]*2 &amp;amp;lt;= b[2]&amp;lt;/code&amp;gt;，&amp;lt;code&amp;gt;b[2]*2 &amp;amp;lt;= b[3]&amp;lt;/code&amp;gt;，以此类推。要从中选择数字叠出尽量多的高度为 k 的塔。&amp;lt;/p&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;2 &amp;amp;lt;= n &amp;amp;lt;= 10000&amp;lt;/code&amp;gt;，&amp;lt;code&amp;gt;2 &amp;amp;lt;= k &amp;amp;lt;= 30&amp;lt;/code&amp;gt;，&amp;lt;code&amp;gt;1 &amp;amp;lt;= a[i] &amp;amp;lt;= 10^9&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;二分&amp;lt;/strong&amp;gt;：最多 &amp;lt;code&amp;gt;mid&amp;lt;/code&amp;gt; 座塔，&amp;lt;code&amp;gt;mid ∈ [0, n/k]&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;贪心&amp;lt;/strong&amp;gt;：&amp;lt;/p&amp;gt;
&amp;lt;ol&amp;gt;
&amp;lt;li&amp;gt;排序 a&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;取出最小 &amp;lt;code&amp;gt;mid&amp;lt;/code&amp;gt; 个数作为每座塔第一层&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;对于 2~k 层，对每座塔在剩余数中找第一个 &amp;lt;code&amp;gt;&amp;amp;gt;= need&amp;lt;/code&amp;gt;（上一层 ×2）的数&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;若找不到足够数，&amp;lt;code&amp;gt;mid&amp;lt;/code&amp;gt; 不可行&amp;lt;/li&amp;gt;
&amp;lt;/ol&amp;gt;
&amp;lt;p&amp;gt;二分边界：下界 &amp;lt;code&amp;gt;lo = 0&amp;lt;/code&amp;gt;，上界 &amp;lt;code&amp;gt;hi = n/k&amp;lt;/code&amp;gt;。&amp;lt;/p&amp;gt;
&amp;lt;h3 id=&amp;#34;例3第-k-小的数&amp;#34;&amp;gt;例3：第 k 小的数
&amp;lt;/h3&amp;gt;&amp;lt;p&amp;gt;给定 n 个正整数 &amp;lt;code&amp;gt;a[1..n]&amp;lt;/code&amp;gt; 和 m 个正整数 &amp;lt;code&amp;gt;b[1..m]&amp;lt;/code&amp;gt;，在 &amp;lt;code&amp;gt;n*m&amp;lt;/code&amp;gt; 个 &amp;lt;code&amp;gt;a[i] + b[j]&amp;lt;/code&amp;gt; 中找到第 k 小的数。&amp;lt;/p&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;1 &amp;amp;lt;= n, m &amp;amp;lt;= 100000&amp;lt;/code&amp;gt;，&amp;lt;code&amp;gt;1 &amp;amp;lt;= k &amp;amp;lt;= n*m&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;二分答案&amp;lt;/strong&amp;gt;：答案区间在最小和与最大和之间。&amp;lt;code&amp;gt;f(x)&amp;lt;/code&amp;gt; 表示有多少对 &amp;lt;code&amp;gt;(i, j)&amp;lt;/code&amp;gt; 满足 &amp;lt;code&amp;gt;a[i] + b[j] &amp;amp;lt;= x&amp;lt;/code&amp;gt;，&amp;lt;code&amp;gt;f(x) &amp;amp;lt;= f(x+1)&amp;lt;/code&amp;gt; 为单调函数。找最小的 x 满足 &amp;lt;code&amp;gt;f(x) &amp;amp;gt;= k&amp;lt;/code&amp;gt;。&amp;lt;/p&amp;gt;
&amp;lt;div class=&amp;#34;details admonition success&amp;#34;&amp;gt;
&amp;lt;div class=&amp;#34;details-summary admonition-title&amp;#34;&amp;gt;
&amp;lt;i class=&amp;#34;icon fas fa-check-circle fa-fw&amp;#34;&amp;gt;&amp;lt;/i&amp;gt;提示&amp;lt;i class=&amp;#34;details-icon fas fa-angle-right fa-fw&amp;#34;&amp;gt;&amp;lt;/i&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;#34;details-content&amp;#34;&amp;gt;
&amp;lt;div class=&amp;#34;admonition-content&amp;#34;&amp;gt;给定 x 如何统计有多少对满足 &amp;lt;code&amp;gt;a[i] + b[j] &amp;amp;lt;= x&amp;lt;/code&amp;gt;？使用&amp;lt;strong&amp;gt;双指针&amp;lt;/strong&amp;gt;。&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;#34;highlight&amp;#34;&amp;gt;&amp;lt;div class=&amp;#34;chroma&amp;#34;&amp;gt;
&amp;lt;table class=&amp;#34;lntable&amp;#34;&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td class=&amp;#34;lntd&amp;#34;&amp;gt;
&amp;lt;pre tabindex=&amp;#34;0&amp;#34; class=&amp;#34;chroma&amp;#34;&amp;gt;&amp;lt;code&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;1
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;2
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;3
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;4
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;5
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;6
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;7
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;8
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;9
&amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;#34;lntd&amp;#34;&amp;gt;
&amp;lt;pre tabindex=&amp;#34;0&amp;#34; class=&amp;#34;chroma&amp;#34;&amp;gt;&amp;lt;code class=&amp;#34;language-cpp&amp;#34; data-lang=&amp;#34;cpp&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;long&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;long&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;nf&amp;#34;&amp;gt;f&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;x&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;{&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;long&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;long&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;cnt&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;0&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;j&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;m&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;for&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;lt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;n&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;++&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;{&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;while&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;j&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;amp;&amp;amp;amp;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;a&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;]&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;+&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;b&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;]&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;x&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;--&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;cnt&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;+=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;}&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;return&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;cnt&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;}&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;&amp;lt;hr&amp;gt;
&amp;lt;h2 id=&amp;#34;四kmp-字符串匹配&amp;#34;&amp;gt;四、KMP 字符串匹配
&amp;lt;/h2&amp;gt;&amp;lt;h3 id=&amp;#34;引入&amp;#34;&amp;gt;引入
&amp;lt;/h3&amp;gt;&amp;lt;p&amp;gt;暴力枚举字符串匹配：母串 A（长度为 n），模式串 B（长度为 m），复杂度 $O(nm)$。当匹配 99% 后最后一个字符失败时，效率极低。&amp;lt;/p&amp;gt;
&amp;lt;h3 id=&amp;#34;kmp-基本思想&amp;#34;&amp;gt;KMP 基本思想
&amp;lt;/h3&amp;gt;&amp;lt;div class=&amp;#34;details admonition success&amp;#34;&amp;gt;
&amp;lt;div class=&amp;#34;details-summary admonition-title&amp;#34;&amp;gt;
&amp;lt;i class=&amp;#34;icon fas fa-check-circle fa-fw&amp;#34;&amp;gt;&amp;lt;/i&amp;gt;提示&amp;lt;i class=&amp;#34;details-icon fas fa-angle-right fa-fw&amp;#34;&amp;gt;&amp;lt;/i&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;#34;details-content&amp;#34;&amp;gt;
&amp;lt;div class=&amp;#34;admonition-content&amp;#34;&amp;gt;&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;i 不会减小&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;永远比较 &amp;lt;code&amp;gt;i+1&amp;lt;/code&amp;gt; 和 &amp;lt;code&amp;gt;j+1&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;利用&amp;amp;quot;已匹配部分&amp;amp;quot;的对称性&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;用指针 i 表示 A 串，用指针 j 表示 B 串&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;A[i-j+1..i] = B[1..j]&amp;lt;/code&amp;gt; 并且 &amp;lt;code&amp;gt;j = m&amp;lt;/code&amp;gt; 时 B 是 A 的子串&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;p&amp;gt;当 &amp;lt;code&amp;gt;A[i+1] = B[j+1]&amp;lt;/code&amp;gt; 时，i 和 j 各加一。&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;当 &amp;lt;code&amp;gt;A[i+1] != B[j+1]&amp;lt;/code&amp;gt; 时，KMP 策略为调整 j 的位置（减小 j），使得 &amp;lt;code&amp;gt;A[i-j+1..i]&amp;lt;/code&amp;gt; 与 &amp;lt;code&amp;gt;B[1..j]&amp;lt;/code&amp;gt; 保持匹配，且新的 &amp;lt;code&amp;gt;B[j+1]&amp;lt;/code&amp;gt; 恰好与 &amp;lt;code&amp;gt;A[i+1]&amp;lt;/code&amp;gt; 匹配。&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;
&amp;lt;div class=&amp;#34;post-img-view&amp;#34;&amp;gt;
&amp;lt;a data-fancybox=&amp;#34;gallery&amp;#34; href=&amp;#34;/p/%E9%AB%98%E7%BA%A7%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/image-20260602210121-j9p8gd8.png&amp;#34;&amp;gt;
&amp;lt;img src=&amp;#34;/p/%E9%AB%98%E7%BA%A7%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/image-20260602210121-j9p8gd8.png&amp;#34;
width=&amp;#34;756&amp;#34;
height=&amp;#34;319&amp;#34;
srcset=&amp;#34;/p/%E9%AB%98%E7%BA%A7%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/image-20260602210121-j9p8gd8_hu_61e4df01c64db88a.png 480w, /p/%E9%AB%98%E7%BA%A7%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/image-20260602210121-j9p8gd8_hu_9279c9d6ca733dea.png 1024w&amp;#34;
loading=&amp;#34;lazy&amp;#34;
alt=&amp;#34;KMP 示例1&amp;#34;
class=&amp;#34;gallery-image&amp;#34;
data-flex-grow=&amp;#34;236&amp;#34;
data-flex-basis=&amp;#34;568px&amp;#34;
/&amp;gt;
&amp;lt;/a&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;这个回退过程其实是找&amp;lt;strong&amp;gt;最长相等真前后缀&amp;lt;/strong&amp;gt;（既是前缀又是后缀，但不能是它自己）。&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;
&amp;lt;div class=&amp;#34;post-img-view&amp;#34;&amp;gt;
&amp;lt;a data-fancybox=&amp;#34;gallery&amp;#34; href=&amp;#34;/p/%E9%AB%98%E7%BA%A7%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/image-20260602210504-nfh3cdx.png&amp;#34;&amp;gt;
&amp;lt;img src=&amp;#34;/p/%E9%AB%98%E7%BA%A7%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/image-20260602210504-nfh3cdx.png&amp;#34;
width=&amp;#34;732&amp;#34;
height=&amp;#34;284&amp;#34;
srcset=&amp;#34;/p/%E9%AB%98%E7%BA%A7%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/image-20260602210504-nfh3cdx_hu_98fe9a98c7afd0ed.png 480w, /p/%E9%AB%98%E7%BA%A7%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/image-20260602210504-nfh3cdx_hu_c27e05182d6274b5.png 1024w&amp;#34;
loading=&amp;#34;lazy&amp;#34;
alt=&amp;#34;KMP 示例2&amp;#34;
class=&amp;#34;gallery-image&amp;#34;
data-flex-grow=&amp;#34;257&amp;#34;
data-flex-basis=&amp;#34;618px&amp;#34;
/&amp;gt;
&amp;lt;/a&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;
&amp;lt;div class=&amp;#34;post-img-view&amp;#34;&amp;gt;
&amp;lt;a data-fancybox=&amp;#34;gallery&amp;#34; href=&amp;#34;/p/%E9%AB%98%E7%BA%A7%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/image-20260602211532-sccw5xr.png&amp;#34;&amp;gt;
&amp;lt;img src=&amp;#34;/p/%E9%AB%98%E7%BA%A7%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/image-20260602211532-sccw5xr.png&amp;#34;
width=&amp;#34;770&amp;#34;
height=&amp;#34;272&amp;#34;
srcset=&amp;#34;/p/%E9%AB%98%E7%BA%A7%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/image-20260602211532-sccw5xr_hu_4721d4c0ee5d6289.png 480w, /p/%E9%AB%98%E7%BA%A7%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/image-20260602211532-sccw5xr_hu_5002b91c2070833.png 1024w&amp;#34;
loading=&amp;#34;lazy&amp;#34;
alt=&amp;#34;KMP 示例3&amp;#34;
class=&amp;#34;gallery-image&amp;#34;
data-flex-grow=&amp;#34;283&amp;#34;
data-flex-basis=&amp;#34;679px&amp;#34;
/&amp;gt;
&amp;lt;/a&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/p&amp;gt;
&amp;lt;h3 id=&amp;#34;代码实现&amp;#34;&amp;gt;代码实现
&amp;lt;/h3&amp;gt;&amp;lt;div class=&amp;#34;highlight&amp;#34;&amp;gt;&amp;lt;div class=&amp;#34;chroma&amp;#34;&amp;gt;
&amp;lt;table class=&amp;#34;lntable&amp;#34;&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td class=&amp;#34;lntd&amp;#34;&amp;gt;
&amp;lt;pre tabindex=&amp;#34;0&amp;#34; class=&amp;#34;chroma&amp;#34;&amp;gt;&amp;lt;code&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 1
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 2
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 3
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 4
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 5
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 6
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 7
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 8
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 9
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;10
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;11
&amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;#34;lntd&amp;#34;&amp;gt;
&amp;lt;pre tabindex=&amp;#34;0&amp;#34; class=&amp;#34;chroma&amp;#34;&amp;gt;&amp;lt;code class=&amp;#34;language-cpp&amp;#34; data-lang=&amp;#34;cpp&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;c1&amp;#34;&amp;gt;// 字符串 A 和 B 都从下标 1 开始存储
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;ans&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;0&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;j&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;0&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;for&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;0&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;lt;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;n&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;++&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;{&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;while&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;j&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;0&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;amp;&amp;amp;amp;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;B&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;j&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;+&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;]&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;!=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;A&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;+&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;])&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;j&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;P&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;];&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;c1&amp;#34;&amp;gt;// 不能继续匹配且 j 还没到 0，右拉找最大前后缀匹配
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;if&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;B&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;j&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;+&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;]&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;==&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;A&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;+&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;])&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;++&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;if&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;j&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;==&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;m&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;{&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;printf&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;s&amp;#34;&amp;gt;&amp;amp;#34;%d&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;se&amp;#34;&amp;gt;\n&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;s&amp;#34;&amp;gt;&amp;amp;#34;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;-&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;m&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;+&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;);&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;c1&amp;#34;&amp;gt;// 输出子串在母串中的位置
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;j&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;P&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;];&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;c1&amp;#34;&amp;gt;// 继续寻找匹配（可重叠）
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;}&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;}&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;如果不允许重叠匹配：&amp;lt;code&amp;gt;j = P[j]&amp;lt;/code&amp;gt; 改为 &amp;lt;code&amp;gt;j = 0&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;时间复杂度缩短至 $O(n)$&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;h3 id=&amp;#34;p-数组预处理next-数组&amp;#34;&amp;gt;P 数组预处理（next 数组）
&amp;lt;/h3&amp;gt;&amp;lt;p&amp;gt;&amp;lt;code&amp;gt;P[j]&amp;lt;/code&amp;gt; 表示：&amp;lt;strong&amp;gt;当匹配到 B 数组的第 j 个字母而第 j+1 个字母不能匹配时，新的 j 最大是多少&amp;lt;/strong&amp;gt;。因此 &amp;lt;code&amp;gt;P[1] = 0&amp;lt;/code&amp;gt;。&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;创建 P 数组——自己和自己匹配即可：&amp;lt;/p&amp;gt;
&amp;lt;div class=&amp;#34;highlight&amp;#34;&amp;gt;&amp;lt;div class=&amp;#34;chroma&amp;#34;&amp;gt;
&amp;lt;table class=&amp;#34;lntable&amp;#34;&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td class=&amp;#34;lntd&amp;#34;&amp;gt;
&amp;lt;pre tabindex=&amp;#34;0&amp;#34; class=&amp;#34;chroma&amp;#34;&amp;gt;&amp;lt;code&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;1
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;2
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;3
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;4
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;5
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;6
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;7
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;8
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;9
&amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;#34;lntd&amp;#34;&amp;gt;
&amp;lt;pre tabindex=&amp;#34;0&amp;#34; class=&amp;#34;chroma&amp;#34;&amp;gt;&amp;lt;code class=&amp;#34;language-cpp&amp;#34; data-lang=&amp;#34;cpp&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;void&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;nf&amp;#34;&amp;gt;pre&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;()&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;{&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;P&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;]&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;0&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;j&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;0&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;for&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;lt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;m&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;++&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;{&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;while&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;j&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;0&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;amp;&amp;amp;amp;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;B&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;j&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;+&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;]&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;!=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;B&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;+&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;])&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;j&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;P&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;];&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;if&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;B&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;j&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;+&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;]&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;==&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;B&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;+&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;])&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;++&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;P&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;+&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;]&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;c1&amp;#34;&amp;gt;// 每趟循环求的是 i+1 位置的值
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;}&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;}&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;&amp;lt;p&amp;gt;要点：&amp;lt;/p&amp;gt;
&amp;lt;ol&amp;gt;
&amp;lt;li&amp;gt;B 串自我匹配&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;计算匹配长度&amp;lt;/li&amp;gt;
&amp;lt;/ol&amp;gt;
&amp;lt;h3 id=&amp;#34;示例最长公共前后缀&amp;#34;&amp;gt;示例：最长公共前后缀
&amp;lt;/h3&amp;gt;&amp;lt;p&amp;gt;有两个字符串 S1 和 S2，要求找出 S1 的一个前缀同时是 S2 的一个后缀，输出最长的及长度。&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;例如 S1 = &amp;amp;ldquo;riemann&amp;amp;rdquo;，S2 = &amp;amp;ldquo;marjorie&amp;amp;rdquo; → &amp;amp;ldquo;rie&amp;amp;rdquo; 为最长（长度 3）。&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;解法&amp;lt;/strong&amp;gt;：直接在二者中间加一个任意分隔符后使用 KMP 算法求解即可找到最大前后缀。&amp;lt;/p&amp;gt;
&amp;lt;hr&amp;gt;
&amp;lt;h2 id=&amp;#34;五矩阵快速幂&amp;#34;&amp;gt;五、矩阵快速幂
&amp;lt;/h2&amp;gt;&amp;lt;h3 id=&amp;#34;引入-1&amp;#34;&amp;gt;引入
&amp;lt;/h3&amp;gt;&amp;lt;p&amp;gt;一个 01 组成字符串，任何子串不能包含 &amp;amp;ldquo;101&amp;amp;rdquo; 和 &amp;amp;ldquo;111&amp;amp;rdquo;，求满足要求的长度为 L（$L \leq 10^8$）的字符串一共有多少，结果对 $10^9+7$ 取模。&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;递推公式：$f(n) = f(n-1) + f(n-3) + f(n-4)$&amp;lt;/p&amp;gt;
&amp;lt;div class=&amp;#34;details admonition example&amp;#34;&amp;gt;
&amp;lt;div class=&amp;#34;details-summary admonition-title&amp;#34;&amp;gt;
&amp;lt;i class=&amp;#34;icon fas fa-list-ol fa-fw&amp;#34;&amp;gt;&amp;lt;/i&amp;gt;重要&amp;lt;i class=&amp;#34;details-icon fas fa-angle-right fa-fw&amp;#34;&amp;gt;&amp;lt;/i&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;#34;details-content&amp;#34;&amp;gt;
&amp;lt;div class=&amp;#34;admonition-content&amp;#34;&amp;gt;&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;思考：&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;ol&amp;gt;
&amp;lt;li&amp;gt;递推公式如何得到？&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;有了递推公式怎么做？&amp;lt;/li&amp;gt;
&amp;lt;/ol&amp;gt;&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;使用场景：递推级 n 很大时用于快速求幂。&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;h3 id=&amp;#34;普通矩阵乘法&amp;#34;&amp;gt;普通矩阵乘法
&amp;lt;/h3&amp;gt;&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;结合律和分配律 ✅&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;交换律 ❌&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;div class=&amp;#34;highlight&amp;#34;&amp;gt;&amp;lt;div class=&amp;#34;chroma&amp;#34;&amp;gt;
&amp;lt;table class=&amp;#34;lntable&amp;#34;&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td class=&amp;#34;lntd&amp;#34;&amp;gt;
&amp;lt;pre tabindex=&amp;#34;0&amp;#34; class=&amp;#34;chroma&amp;#34;&amp;gt;&amp;lt;code&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;1
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;2
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;3
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;4
&amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;#34;lntd&amp;#34;&amp;gt;
&amp;lt;pre tabindex=&amp;#34;0&amp;#34; class=&amp;#34;chroma&amp;#34;&amp;gt;&amp;lt;code class=&amp;#34;language-c&amp;#34; data-lang=&amp;#34;c&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;for&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;0&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;lt;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;n&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;++&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;for&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;j&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;0&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;j&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;lt;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;n&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;++&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;for&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;k&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;0&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;k&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;lt;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;n&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;k&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;++&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;c&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;][&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;]&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;c&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;][&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;]&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;+&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;a&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;][&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;k&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;]&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;*&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;b&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;k&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;][&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;];&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;&amp;lt;p&amp;gt;但 n 比较大时，b 通过列访问，每次需要跳跃步长 n，缓存命中率低。以下是大幅提速的改进方法，调换了 j 和 k 顺序：&amp;lt;/p&amp;gt;
&amp;lt;div class=&amp;#34;highlight&amp;#34;&amp;gt;&amp;lt;div class=&amp;#34;chroma&amp;#34;&amp;gt;
&amp;lt;table class=&amp;#34;lntable&amp;#34;&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td class=&amp;#34;lntd&amp;#34;&amp;gt;
&amp;lt;pre tabindex=&amp;#34;0&amp;#34; class=&amp;#34;chroma&amp;#34;&amp;gt;&amp;lt;code&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;1
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;2
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;3
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;4
&amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;#34;lntd&amp;#34;&amp;gt;
&amp;lt;pre tabindex=&amp;#34;0&amp;#34; class=&amp;#34;chroma&amp;#34;&amp;gt;&amp;lt;code class=&amp;#34;language-c&amp;#34; data-lang=&amp;#34;c&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;for&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;0&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;lt;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;n&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;++&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;for&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;k&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;0&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;k&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;lt;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;n&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;k&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;++&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;for&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;j&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;0&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;j&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;lt;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;n&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;++&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;c&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;][&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;]&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;c&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;][&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;]&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;+&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;a&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;][&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;k&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;]&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;*&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;b&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;k&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;][&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;];&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;&amp;lt;p&amp;gt;此时 k 变化最快，&amp;lt;code&amp;gt;b[k][j]&amp;lt;/code&amp;gt; 和 &amp;lt;code&amp;gt;a[i][k]&amp;lt;/code&amp;gt; 同为行遍历，大幅提升缓存命中率。&amp;lt;/p&amp;gt;
&amp;lt;h3 id=&amp;#34;快速幂--矩阵乘法&amp;#34;&amp;gt;快速幂 + 矩阵乘法
&amp;lt;/h3&amp;gt;&amp;lt;p&amp;gt;快速幂模板：&amp;lt;/p&amp;gt;
&amp;lt;div class=&amp;#34;highlight&amp;#34;&amp;gt;&amp;lt;div class=&amp;#34;chroma&amp;#34;&amp;gt;
&amp;lt;table class=&amp;#34;lntable&amp;#34;&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td class=&amp;#34;lntd&amp;#34;&amp;gt;
&amp;lt;pre tabindex=&amp;#34;0&amp;#34; class=&amp;#34;chroma&amp;#34;&amp;gt;&amp;lt;code&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;1
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;2
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;3
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;4
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;5
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;6
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;7
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;8
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;9
&amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;#34;lntd&amp;#34;&amp;gt;
&amp;lt;pre tabindex=&amp;#34;0&amp;#34; class=&amp;#34;chroma&amp;#34;&amp;gt;&amp;lt;code class=&amp;#34;language-c&amp;#34; data-lang=&amp;#34;c&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;nf&amp;#34;&amp;gt;pow_mod&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;a&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;n&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;{&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;ans&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;while&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;n&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;{&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;if&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;n&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;amp;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;ans&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;ans&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;*&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;a&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;a&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;a&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;*&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;a&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;n&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;gt;&amp;amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;}&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;return&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;ans&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;}&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;&amp;lt;p&amp;gt;使用时要注意&amp;lt;strong&amp;gt;求模版本和开 long long&amp;lt;/strong&amp;gt;。&amp;lt;/p&amp;gt;
&amp;lt;h3 id=&amp;#34;核心斐波那契与矩阵&amp;#34;&amp;gt;核心：斐波那契与矩阵
&amp;lt;/h3&amp;gt;&amp;lt;p&amp;gt;$f[0] = 0$，$f[1] = 1$，$f[n] = f[n-1] + f[n-2]$，求 $f[k]$，结果对 $10^9+7$ 取余。&amp;lt;/p&amp;gt;
$$\begin{bmatrix} f[n] \\\\ f[n-1] \end{bmatrix} = \begin{bmatrix} 1 &amp;amp; 1 \\\\ 1 &amp;amp; 0 \end{bmatrix} \begin{bmatrix} f[n-1] \\\\ f[n-2] \end{bmatrix}$$&amp;lt;p&amp;gt;设 $C(n) = \begin{bmatrix} f[n] \\ f[n-1] \end{bmatrix}$，$B = \begin{bmatrix} 1 &amp;amp;amp; 1 \\ 1 &amp;amp;amp; 0 \end{bmatrix}$，则有：&amp;lt;/p&amp;gt;
$$C(n) = B \times C(n-1) = B^{\,n-1} \times C(1)$$&amp;lt;h3 id=&amp;#34;矩阵如何构造&amp;#34;&amp;gt;矩阵如何构造？
&amp;lt;/h3&amp;gt;&amp;lt;p&amp;gt;对于形如 $f(n) = a \cdot f(n-1) + b \cdot f(n-2)$ 的递推公式：&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;如 $f(n) = 3 \cdot f(n-1) + 5 \cdot f(n-3) + 9 \cdot f(n-4)$：&amp;lt;/p&amp;gt;
$$B = \begin{bmatrix} 3 &amp;amp; 0 &amp;amp; 5 &amp;amp; 9 \\\\ 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\\\ 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 \\\\ 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 \end{bmatrix} \qquad C(n) = \begin{bmatrix} f[n] \\\\ f[n-1] \\\\ f[n-2] \\\\ f[n-3] \end{bmatrix}$$&amp;lt;p&amp;gt;带常数项如 $f(n) = a \cdot f(n-1) + b \cdot f(n-3) + c$：&amp;lt;/p&amp;gt;
$$\begin{bmatrix} f[n] \\\\ f[n-1] \\\\ f[n-2] \\\\ c \end{bmatrix} = \begin{bmatrix} a &amp;amp; 0 &amp;amp; b &amp;amp; 1 \\\\ 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\\\ 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 \\\\ 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 \end{bmatrix} \cdot \begin{bmatrix} f[n-1] \\\\ f[n-2] \\\\ f[n-3] \\\\ c \end{bmatrix}$$&amp;lt;h3 id=&amp;#34;结合前缀和&amp;#34;&amp;gt;结合前缀和
&amp;lt;/h3&amp;gt;&amp;lt;p&amp;gt;$T[0] = T[1] = T[2] = 1$，$T[n] = T[n-1] + T[n-2] + T[n-3]$（$n \geq 3$）。&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;给定 a 和 b（均在 $10^9$ 范围内），求 $(T[a] + T[a+1] + \cdots + T[b]) \bmod (10^9+7)$。&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;难点&amp;lt;/strong&amp;gt;：要求前缀和 $S[b] - S[a-1]$，转化为求 $S[n]$：&amp;lt;/p&amp;gt;
$$\begin{bmatrix} S[n] \\\\ T[n] \\\\ T[n-1] \\\\ T[n-2] \end{bmatrix} = \begin{bmatrix} 1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1 \\\\ 0 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1 \\\\ 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 \\\\ 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 \end{bmatrix} \cdot \begin{bmatrix} S[n-1] \\\\ T[n-1] \\\\ T[n-2] \\\\ T[n-3] \end{bmatrix}$$&amp;lt;h3 id=&amp;#34;具体实现代码&amp;#34;&amp;gt;具体实现代码
&amp;lt;/h3&amp;gt;&amp;lt;div class=&amp;#34;details admonition warning&amp;#34;&amp;gt;
&amp;lt;div class=&amp;#34;details-summary admonition-title&amp;#34;&amp;gt;
&amp;lt;i class=&amp;#34;icon fas fa-exclamation-triangle fa-fw&amp;#34;&amp;gt;&amp;lt;/i&amp;gt;注意&amp;lt;i class=&amp;#34;details-icon fas fa-angle-right fa-fw&amp;#34;&amp;gt;&amp;lt;/i&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;#34;details-content&amp;#34;&amp;gt;
&amp;lt;div class=&amp;#34;admonition-content&amp;#34;&amp;gt;注意矩阵初始化！&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;朴素矩阵乘法：&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;div class=&amp;#34;highlight&amp;#34;&amp;gt;&amp;lt;div class=&amp;#34;chroma&amp;#34;&amp;gt;
&amp;lt;table class=&amp;#34;lntable&amp;#34;&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td class=&amp;#34;lntd&amp;#34;&amp;gt;
&amp;lt;pre tabindex=&amp;#34;0&amp;#34; class=&amp;#34;chroma&amp;#34;&amp;gt;&amp;lt;code&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 1
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 2
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 3
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 4
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 5
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 6
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 7
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 8
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 9
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;10
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;11
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;12
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;13
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;14
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;15
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;16
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;17
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;18
&amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;#34;lntd&amp;#34;&amp;gt;
&amp;lt;pre tabindex=&amp;#34;0&amp;#34; class=&amp;#34;chroma&amp;#34;&amp;gt;&amp;lt;code class=&amp;#34;language-cpp&amp;#34; data-lang=&amp;#34;cpp&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;struct&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;nc&amp;#34;&amp;gt;matrix&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;{&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;p&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;11&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;][&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;11&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;];&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;};&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;matrix&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;nf&amp;#34;&amp;gt;mul&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;matrix&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;a&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;matrix&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;b&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;{&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;matrix&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;ans&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;for&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;lt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;n&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;++&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;for&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;j&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;j&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;lt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;n&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;++&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;ans&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;p&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;][&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;]&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;0&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;for&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;lt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;n&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;++&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;for&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;k&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;k&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;lt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;n&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;k&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;++&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;for&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;j&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;j&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;lt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;n&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;++&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;{&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;ans&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;p&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;][&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;]&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;+=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;a&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;p&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;][&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;k&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;]&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;*&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;b&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;p&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;k&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;][&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;]&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;%&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;9973&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;ans&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;p&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;][&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;]&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;%=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;9973&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;}&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;return&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;ans&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;}&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;矩阵快速幂：&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;div class=&amp;#34;highlight&amp;#34;&amp;gt;&amp;lt;div class=&amp;#34;chroma&amp;#34;&amp;gt;
&amp;lt;table class=&amp;#34;lntable&amp;#34;&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td class=&amp;#34;lntd&amp;#34;&amp;gt;
&amp;lt;pre tabindex=&amp;#34;0&amp;#34; class=&amp;#34;chroma&amp;#34;&amp;gt;&amp;lt;code&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 1
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 2
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 3
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 4
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 5
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 6
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 7
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 8
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 9
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;10
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;11
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;12
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;13
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;14
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;15
&amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;#34;lntd&amp;#34;&amp;gt;
&amp;lt;pre tabindex=&amp;#34;0&amp;#34; class=&amp;#34;chroma&amp;#34;&amp;gt;&amp;lt;code class=&amp;#34;language-cpp&amp;#34; data-lang=&amp;#34;cpp&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;matrix&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;nf&amp;#34;&amp;gt;ksm&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;matrix&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;a&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;k&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;{&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;matrix&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;ans&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;for&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;lt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;n&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;++&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;for&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;j&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;j&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;lt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;n&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;++&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;ans&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;p&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;][&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;]&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;0&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;for&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;lt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;n&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;++&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;ans&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;p&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;][&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;]&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;while&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;k&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;0&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;{&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;if&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;k&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;%&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;2&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;==&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;ans&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;mul&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;ans&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;a&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;);&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;a&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;mul&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;a&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;a&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;);&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;k&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;/=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;2&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;}&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;return&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;ans&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;}&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;&amp;lt;hr&amp;gt;
&amp;lt;h2 id=&amp;#34;六数论基础--逆元&amp;#34;&amp;gt;六、数论基础 — 逆元
&amp;lt;/h2&amp;gt;&amp;lt;h3 id=&amp;#34;欧几里得算法辗转相除法&amp;#34;&amp;gt;欧几里得算法（辗转相除法）
&amp;lt;/h3&amp;gt;&amp;lt;div class=&amp;#34;highlight&amp;#34;&amp;gt;&amp;lt;div class=&amp;#34;chroma&amp;#34;&amp;gt;
&amp;lt;table class=&amp;#34;lntable&amp;#34;&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td class=&amp;#34;lntd&amp;#34;&amp;gt;
&amp;lt;pre tabindex=&amp;#34;0&amp;#34; class=&amp;#34;chroma&amp;#34;&amp;gt;&amp;lt;code&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;1
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;2
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;3
&amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;#34;lntd&amp;#34;&amp;gt;
&amp;lt;pre tabindex=&amp;#34;0&amp;#34; class=&amp;#34;chroma&amp;#34;&amp;gt;&amp;lt;code class=&amp;#34;language-c&amp;#34; data-lang=&amp;#34;c&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;nf&amp;#34;&amp;gt;gcd&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;a&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;b&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;{&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;return&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;b&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;==&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;0&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;?&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;nl&amp;#34;&amp;gt;a&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;:&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;nf&amp;#34;&amp;gt;gcd&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;b&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;a&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;%&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;b&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;);&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;}&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;&amp;lt;h3 id=&amp;#34;扩展欧几里得算法贝祖定理&amp;#34;&amp;gt;扩展欧几里得算法（贝祖定理）
&amp;lt;/h3&amp;gt;&amp;lt;p&amp;gt;$ax + by = \gcd(a, b) = d$&amp;lt;/p&amp;gt;
&amp;lt;div class=&amp;#34;details admonition info&amp;#34;&amp;gt;
&amp;lt;div class=&amp;#34;details-summary admonition-title&amp;#34;&amp;gt;
&amp;lt;i class=&amp;#34;icon fas fa-info-circle fa-fw&amp;#34;&amp;gt;&amp;lt;/i&amp;gt;注意&amp;lt;i class=&amp;#34;details-icon fas fa-angle-right fa-fw&amp;#34;&amp;gt;&amp;lt;/i&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;#34;details-content&amp;#34;&amp;gt;
&amp;lt;div class=&amp;#34;admonition-content&amp;#34;&amp;gt;&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;贝祖定理证明：&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;$b \cdot x_0 + (a \bmod b) \cdot y_0 = d$&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;即 $b \cdot x_0 + (a - \lfloor a/b \rfloor \cdot b) \cdot y_0 = a \cdot y_0 + b \cdot (x_0 - \lfloor a/b \rfloor \cdot y_0)$&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;令 $x_1 = y_0$，$y_1 = x_0 - \lfloor a/b \rfloor \cdot y_0$，则得 $a \cdot x_1 + b \cdot y_1 = d = \gcd(a, b)$。得证。&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;#34;highlight&amp;#34;&amp;gt;&amp;lt;div class=&amp;#34;chroma&amp;#34;&amp;gt;
&amp;lt;table class=&amp;#34;lntable&amp;#34;&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td class=&amp;#34;lntd&amp;#34;&amp;gt;
&amp;lt;pre tabindex=&amp;#34;0&amp;#34; class=&amp;#34;chroma&amp;#34;&amp;gt;&amp;lt;code&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;1
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;2
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;3
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;4
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;5
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;6
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;7
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;8
&amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;#34;lntd&amp;#34;&amp;gt;
&amp;lt;pre tabindex=&amp;#34;0&amp;#34; class=&amp;#34;chroma&amp;#34;&amp;gt;&amp;lt;code class=&amp;#34;language-c&amp;#34; data-lang=&amp;#34;c&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;nf&amp;#34;&amp;gt;ex_gcd&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;a&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;b&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;amp;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;x&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;amp;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;y&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;{&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;if&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;b&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;==&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;0&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;{&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;x&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;y&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;0&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;return&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;a&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;}&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;d&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;nf&amp;#34;&amp;gt;ex_gcd&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;b&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;a&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;%&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;b&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;x&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;y&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;);&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;tmp&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;x&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;x&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;y&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;y&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;tmp&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;-&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;a&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;/&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;b&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;*&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;y&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;return&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;d&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;}&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;&amp;lt;p&amp;gt;求 $Xa + Yb = 1$ 的非负整数 X 和整数 Y（扩展到 long long）：&amp;lt;/p&amp;gt;
&amp;lt;div class=&amp;#34;highlight&amp;#34;&amp;gt;&amp;lt;div class=&amp;#34;chroma&amp;#34;&amp;gt;
&amp;lt;table class=&amp;#34;lntable&amp;#34;&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td class=&amp;#34;lntd&amp;#34;&amp;gt;
&amp;lt;pre tabindex=&amp;#34;0&amp;#34; class=&amp;#34;chroma&amp;#34;&amp;gt;&amp;lt;code&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 1
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 2
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 3
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 4
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 5
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 6
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 7
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 8
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 9
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;10
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;11
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;12
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;13
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;14
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;15
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;16
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;17
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;18
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;19
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;20
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;21
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;22
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;23
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;24
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;25
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;26
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;27
&amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;#34;lntd&amp;#34;&amp;gt;
&amp;lt;pre tabindex=&amp;#34;0&amp;#34; class=&amp;#34;chroma&amp;#34;&amp;gt;&amp;lt;code class=&amp;#34;language-cpp&amp;#34; data-lang=&amp;#34;cpp&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cp&amp;#34;&amp;gt;#include&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;cpf&amp;#34;&amp;gt;&amp;amp;lt;iostream&amp;amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;cp&amp;#34;&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;using&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;namespace&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;std&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;long&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;long&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;nf&amp;#34;&amp;gt;ex_gcd&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;long&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;long&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;a&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;long&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;long&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;b&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;long&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;long&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;amp;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;x&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;long&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;long&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;amp;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;y&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;{&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;if&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;b&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;==&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;0&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;{&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;x&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;y&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;0&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;return&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;a&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;}&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;long&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;long&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;d&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;ex_gcd&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;b&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;a&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;%&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;b&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;x&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;y&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;);&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;long&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;long&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;tmp&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;x&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;x&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;y&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;y&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;tmp&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;-&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;a&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;/&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;b&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;*&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;y&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;return&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;d&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;}&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;void&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;nf&amp;#34;&amp;gt;solve&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;()&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;{&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;long&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;long&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;a&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;b&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;while&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;cin&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;a&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;b&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;{&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;long&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;long&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;x0&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;y0&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;long&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;long&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;g&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;ex_gcd&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;a&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;b&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;x0&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;y0&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;);&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;if&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;g&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;!=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;{&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;cout&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;lt;&amp;amp;lt;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;s&amp;#34;&amp;gt;&amp;amp;#34;sorry&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;se&amp;#34;&amp;gt;\n&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;s&amp;#34;&amp;gt;&amp;amp;#34;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;continue&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;}&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;c1&amp;#34;&amp;gt;// 调整 X 到 [0, b-1]，保证同余情况下最小
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;long&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;long&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;ans_x&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;x0&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;%&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;b&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;+&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;b&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;%&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;b&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;long&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;long&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;ans_y&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;1&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;-&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;ans_x&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;*&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;a&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;/&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;b&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;cout&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;lt;&amp;amp;lt;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;ans_x&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;lt;&amp;amp;lt;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;s&amp;#34;&amp;gt;&amp;amp;#34; &amp;amp;#34;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;lt;&amp;amp;lt;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;ans_y&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;lt;&amp;amp;lt;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;endl&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;}&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;}&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;&amp;lt;h3 id=&amp;#34;线性同余方程&amp;#34;&amp;gt;线性同余方程
&amp;lt;/h3&amp;gt;&amp;lt;p&amp;gt;$ax \equiv k \pmod b$，等价于 $ax + by = k$。&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;定理&amp;lt;/strong&amp;gt;：对于未知量 x 有解当且仅当 $\gcd(a, b) \mid k$（k 是 gcd 的倍数）。&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;推论&amp;lt;/strong&amp;gt;：若 $ax \equiv 1 \pmod b$ 有解，则必须 $\gcd(a, b) = 1$。此时 x 的解称为 &amp;lt;strong&amp;gt;a 模 b 的逆&amp;lt;/strong&amp;gt;，所有解模 b 同余。&amp;lt;/p&amp;gt;
&amp;lt;div class=&amp;#34;details admonition warning&amp;#34;&amp;gt;
&amp;lt;div class=&amp;#34;details-summary admonition-title&amp;#34;&amp;gt;
&amp;lt;i class=&amp;#34;icon fas fa-exclamation-triangle fa-fw&amp;#34;&amp;gt;&amp;lt;/i&amp;gt;注意&amp;lt;i class=&amp;#34;details-icon fas fa-angle-right fa-fw&amp;#34;&amp;gt;&amp;lt;/i&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;#34;details-content&amp;#34;&amp;gt;
&amp;lt;div class=&amp;#34;admonition-content&amp;#34;&amp;gt;如何确保求得的 x 是最小正整数解：&amp;lt;code&amp;gt;x = (x % b + b) % b&amp;lt;/code&amp;gt;（再取模一次）。&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;h3 id=&amp;#34;费马小定理&amp;#34;&amp;gt;费马小定理
&amp;lt;/h3&amp;gt;&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;作用&amp;lt;/strong&amp;gt;：欧拉定理的特殊情况。&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;$a^{p-1} = a \cdot a^{p-2} \equiv 1 \pmod p$&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;所以在模 p 条件下，整数 a 的逆元是 $a^{p-2}$。&amp;lt;/p&amp;gt;
&amp;lt;div class=&amp;#34;details admonition success&amp;#34;&amp;gt;
&amp;lt;div class=&amp;#34;details-summary admonition-title&amp;#34;&amp;gt;
&amp;lt;i class=&amp;#34;icon fas fa-check-circle fa-fw&amp;#34;&amp;gt;&amp;lt;/i&amp;gt;提示&amp;lt;i class=&amp;#34;details-icon fas fa-angle-right fa-fw&amp;#34;&amp;gt;&amp;lt;/i&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;#34;details-content&amp;#34;&amp;gt;
&amp;lt;div class=&amp;#34;admonition-content&amp;#34;&amp;gt;&amp;lt;strong&amp;gt;费马小定理 + 快速幂&amp;lt;/strong&amp;gt; 绑定运算，注意用 &amp;lt;code&amp;gt;long long&amp;lt;/code&amp;gt;。&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;#34;highlight&amp;#34;&amp;gt;&amp;lt;div class=&amp;#34;chroma&amp;#34;&amp;gt;
&amp;lt;table class=&amp;#34;lntable&amp;#34;&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td class=&amp;#34;lntd&amp;#34;&amp;gt;
&amp;lt;pre tabindex=&amp;#34;0&amp;#34; class=&amp;#34;chroma&amp;#34;&amp;gt;&amp;lt;code&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 1
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 2
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 3
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 4
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 5
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 6
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 7
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 8
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 9
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;10
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;11
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;12
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;13
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;14
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;15
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;16
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;17
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;18
&amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;#34;lntd&amp;#34;&amp;gt;
&amp;lt;pre tabindex=&amp;#34;0&amp;#34; class=&amp;#34;chroma&amp;#34;&amp;gt;&amp;lt;code class=&amp;#34;language-cpp&amp;#34; data-lang=&amp;#34;cpp&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;const&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;MOD&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mf&amp;#34;&amp;gt;1e9&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;+&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;7&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;c1&amp;#34;&amp;gt;// 快速幂
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;long&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;long&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;nf&amp;#34;&amp;gt;quick_pow&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;long&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;long&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;base&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;long&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;long&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;exp&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;{&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;long&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;long&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;res&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;base&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;%=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;MOD&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;while&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;exp&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;0&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;{&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;if&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;exp&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;amp;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;res&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;res&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;*&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;base&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;%&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;MOD&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;base&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;base&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;*&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;base&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;%&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;MOD&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;exp&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;gt;&amp;amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;}&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;return&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;res&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;}&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;c1&amp;#34;&amp;gt;// 求逆元：x^(MOD-2) % MOD
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;long&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;long&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;nf&amp;#34;&amp;gt;inv&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;long&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;long&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;x&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;{&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;return&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;quick_pow&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;x&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;MOD&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;-&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;2&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;);&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;}&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;应用示例&amp;lt;/strong&amp;gt;（等比数列取模）：&amp;lt;/p&amp;gt;
&amp;lt;div class=&amp;#34;highlight&amp;#34;&amp;gt;&amp;lt;div class=&amp;#34;chroma&amp;#34;&amp;gt;
&amp;lt;table class=&amp;#34;lntable&amp;#34;&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td class=&amp;#34;lntd&amp;#34;&amp;gt;
&amp;lt;pre tabindex=&amp;#34;0&amp;#34; class=&amp;#34;chroma&amp;#34;&amp;gt;&amp;lt;code&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;1
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;2
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;3
&amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;#34;lntd&amp;#34;&amp;gt;
&amp;lt;pre tabindex=&amp;#34;0&amp;#34; class=&amp;#34;chroma&amp;#34;&amp;gt;&amp;lt;code class=&amp;#34;language-fallback&amp;#34; data-lang=&amp;#34;fallback&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;SUM(k) % P = k * (k^m - 1) / (k - 1) % P
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; = k * (k^m - 1) * (k-1)^(-1) % P
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; = (k * (k^m - 1) % P) * ((k-1)^(P-2) % P) % P
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;#34;highlight&amp;#34;&amp;gt;&amp;lt;div class=&amp;#34;chroma&amp;#34;&amp;gt;
&amp;lt;table class=&amp;#34;lntable&amp;#34;&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td class=&amp;#34;lntd&amp;#34;&amp;gt;
&amp;lt;pre tabindex=&amp;#34;0&amp;#34; class=&amp;#34;chroma&amp;#34;&amp;gt;&amp;lt;code&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 1
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 2
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 3
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 4
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 5
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 6
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 7
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 8
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 9
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;10
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;11
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;12
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;13
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;14
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;15
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;16
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;17
&amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;#34;lntd&amp;#34;&amp;gt;
&amp;lt;pre tabindex=&amp;#34;0&amp;#34; class=&amp;#34;chroma&amp;#34;&amp;gt;&amp;lt;code class=&amp;#34;language-cpp&amp;#34; data-lang=&amp;#34;cpp&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;void&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;nf&amp;#34;&amp;gt;solve&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;()&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;{&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;n&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;m&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;while&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;cin&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;n&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;m&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;{&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;long&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;long&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;sum&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;0&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;for&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;k&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;k&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;lt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;n&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;k&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;++&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;{&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;if&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;k&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;==&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;{&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;sum&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;sum&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;+&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;m&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;%&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;MOD&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;}&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;else&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;{&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;long&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;long&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;num&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;k&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;*&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;quick_pow&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;k&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;m&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;-&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;%&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;MOD&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;long&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;long&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;dev_inv&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;inv&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;k&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;-&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;);&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;long&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;long&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;tmp_sum&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;num&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;*&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;dev_inv&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;%&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;MOD&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;sum&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;sum&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;+&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;tmp_sum&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;%&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;MOD&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;}&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;}&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;cout&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;lt;&amp;amp;lt;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;sum&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;lt;&amp;amp;lt;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;endl&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;}&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;}&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;&amp;lt;h3 id=&amp;#34;线性求逆元&amp;#34;&amp;gt;线性求逆元
&amp;lt;/h3&amp;gt;&amp;lt;p&amp;gt;记 i 的逆元为 $i^{-1}$，设 $p = k \cdot i + r$。&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;则有 $k \cdot i + r \equiv 0 \pmod p$&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;同时乘 r 和 i 的逆元：&amp;lt;/p&amp;gt;
$$k \cdot r^{-1} + i^{-1} \equiv 0 \pmod p$$$$i^{-1} \equiv -k \cdot r^{-1} \pmod p$$&amp;lt;p&amp;gt;其中 k = p / i（整除），r = p % i。&amp;lt;/p&amp;gt;
&amp;lt;div class=&amp;#34;highlight&amp;#34;&amp;gt;&amp;lt;div class=&amp;#34;chroma&amp;#34;&amp;gt;
&amp;lt;table class=&amp;#34;lntable&amp;#34;&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td class=&amp;#34;lntd&amp;#34;&amp;gt;
&amp;lt;pre tabindex=&amp;#34;0&amp;#34; class=&amp;#34;chroma&amp;#34;&amp;gt;&amp;lt;code&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;1
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;2
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;3
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;4
&amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;#34;lntd&amp;#34;&amp;gt;
&amp;lt;pre tabindex=&amp;#34;0&amp;#34; class=&amp;#34;chroma&amp;#34;&amp;gt;&amp;lt;code class=&amp;#34;language-c&amp;#34; data-lang=&amp;#34;c&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;inv&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;]&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;for&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;2&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;lt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;N&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;++&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;{&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;inv&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;]&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;long&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;long&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;P&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;-&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;P&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;/&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;*&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;inv&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;P&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;%&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;]&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;%&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;P&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;}&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;&amp;lt;hr&amp;gt;
&amp;lt;h2 id=&amp;#34;七中国剩余定理-crt&amp;#34;&amp;gt;七、中国剩余定理 (CRT)
&amp;lt;/h2&amp;gt;&amp;lt;h3 id=&amp;#34;标准-crt模数两两互质&amp;#34;&amp;gt;标准 CRT（模数两两互质）
&amp;lt;/h3&amp;gt;&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;定理&amp;lt;/strong&amp;gt;：$m_1, m_2, \dots, m_n$ 是&amp;lt;strong&amp;gt;两两互质&amp;lt;/strong&amp;gt;的正整数，对于任意 n 个整数 $a_1, a_2, \dots, a_n$，同余方程组 $x \equiv a_i \pmod{m_i}$ 有整数解，且在模 M 下解唯一。&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;构造解&amp;lt;/strong&amp;gt;：$x = a_1 M_1 x_1 + a_2 M_2 x_2 + \cdots + a_n M_n x_n$&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;其中 $M_i = M / m_i$，$x_i$ 是线性同余方程 $M_i x_i \equiv 1 \pmod{m_i}$ 的一个解（$M_i$ 和 $m_i$ 互质，必有解）。&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;以 $a_1 M_1 x_1$ 为例：$a_1 M_1 x_1 \equiv a_1 \pmod{m_1}$&amp;lt;/p&amp;gt;
&amp;lt;div class=&amp;#34;details admonition info&amp;#34;&amp;gt;
&amp;lt;div class=&amp;#34;details-summary admonition-title&amp;#34;&amp;gt;
&amp;lt;i class=&amp;#34;icon fas fa-info-circle fa-fw&amp;#34;&amp;gt;&amp;lt;/i&amp;gt;注意&amp;lt;i class=&amp;#34;details-icon fas fa-angle-right fa-fw&amp;#34;&amp;gt;&amp;lt;/i&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;#34;details-content&amp;#34;&amp;gt;
&amp;lt;div class=&amp;#34;admonition-content&amp;#34;&amp;gt;求线性同余方程组的解 x ⇒ n 次求 $x_i$&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;总结思路&amp;lt;/strong&amp;gt;：&amp;lt;/p&amp;gt;
&amp;lt;ol&amp;gt;
&amp;lt;li&amp;gt;$M = m_1 m_2 \cdots m_k$&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;对每个 i，令 $M_i = M / m_i$&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;由于 $\gcd(M_i, m_i) = 1$，存在 $t_i$ 满足 $M_i t_i \equiv 1 \pmod{m_i}$（用扩欧求解）&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;构造 $x = \sum_{i=1}^k a_i M_i t_i$&amp;lt;/li&amp;gt;
&amp;lt;/ol&amp;gt;
&amp;lt;div class=&amp;#34;highlight&amp;#34;&amp;gt;&amp;lt;div class=&amp;#34;chroma&amp;#34;&amp;gt;
&amp;lt;table class=&amp;#34;lntable&amp;#34;&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td class=&amp;#34;lntd&amp;#34;&amp;gt;
&amp;lt;pre tabindex=&amp;#34;0&amp;#34; class=&amp;#34;chroma&amp;#34;&amp;gt;&amp;lt;code&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 1
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 2
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 3
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 4
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 5
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 6
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 7
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 8
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 9
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;10
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;11
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;12
&amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;#34;lntd&amp;#34;&amp;gt;
&amp;lt;pre tabindex=&amp;#34;0&amp;#34; class=&amp;#34;chroma&amp;#34;&amp;gt;&amp;lt;code class=&amp;#34;language-cpp&amp;#34; data-lang=&amp;#34;cpp&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;nf&amp;#34;&amp;gt;ChineseRemain&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;n&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;{&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;Mi&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;xi&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;yi&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;d&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;ans&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;0&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;M&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;for&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;lt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;n&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;++&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;M&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;*=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;m&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;];&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;for&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;lt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;n&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;++&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;{&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;Mi&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;M&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;/&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;m&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;];&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;d&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;ex_gcd&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;Mi&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;m&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;],&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;xi&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;yi&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;);&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;c1&amp;#34;&amp;gt;// 求得 xi
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;ans&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;ans&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;+&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;Mi&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;*&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;xi&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;*&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;a&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;])&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;%&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;M&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;}&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;return&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;ans&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;+&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;M&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;%&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;M&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;c1&amp;#34;&amp;gt;// 求出通解
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;}&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;&amp;lt;h3 id=&amp;#34;扩展-crt模数不互质&amp;#34;&amp;gt;扩展 CRT（模数不互质）
&amp;lt;/h3&amp;gt;&amp;lt;div class=&amp;#34;details admonition example&amp;#34;&amp;gt;
&amp;lt;div class=&amp;#34;details-summary admonition-title&amp;#34;&amp;gt;
&amp;lt;i class=&amp;#34;icon fas fa-list-ol fa-fw&amp;#34;&amp;gt;&amp;lt;/i&amp;gt;重要&amp;lt;i class=&amp;#34;details-icon fas fa-angle-right fa-fw&amp;#34;&amp;gt;&amp;lt;/i&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;#34;details-content&amp;#34;&amp;gt;
&amp;lt;div class=&amp;#34;admonition-content&amp;#34;&amp;gt;&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;如果不两两互质呢？&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;N 个正整数的最小公倍数（LCM）。假设已求得前 i 个数的 LCM 是 K：&amp;lt;/p&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;判断 K 是否为第 i+1 个数的倍数
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;是则得解&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;不是，在 K 上不断加 K 直到为第 i+1 个数的倍数&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;p&amp;gt;也就是说只能在最小公倍数基础上放大。&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;p&amp;gt;通过&amp;lt;strong&amp;gt;数学归纳法&amp;lt;/strong&amp;gt;：&amp;lt;/p&amp;gt;
&amp;lt;ol&amp;gt;
&amp;lt;li&amp;gt;前 k-1 个方程构成方程组的解为 x，记 $M = \text{lcm}(m_1, m_2, \dots, m_{k-1})$，则 $x + i \cdot M$ 是前 k-1 个方程的通解&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;考虑第 k 个方程，求出整数 t 使 $x + t \cdot M \equiv a_k \pmod{m_k}$
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;等价于 $M \cdot t \equiv a_k - x \pmod{m_k}$，其中 t 为未知量&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;若有解，扩欧可求出&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;n 次扩欧&amp;lt;/strong&amp;gt;后，最终求解整个方程组&amp;lt;/li&amp;gt;
&amp;lt;/ol&amp;gt;
&amp;lt;div class=&amp;#34;highlight&amp;#34;&amp;gt;&amp;lt;div class=&amp;#34;chroma&amp;#34;&amp;gt;
&amp;lt;table class=&amp;#34;lntable&amp;#34;&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td class=&amp;#34;lntd&amp;#34;&amp;gt;
&amp;lt;pre tabindex=&amp;#34;0&amp;#34; class=&amp;#34;chroma&amp;#34;&amp;gt;&amp;lt;code&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 1
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 2
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 3
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 4
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 5
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 6
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 7
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 8
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 9
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;10
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;11
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;12
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;13
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;14
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;15
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;16
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;17
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;18
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;19
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;20
&amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;#34;lntd&amp;#34;&amp;gt;
&amp;lt;pre tabindex=&amp;#34;0&amp;#34; class=&amp;#34;chroma&amp;#34;&amp;gt;&amp;lt;code class=&amp;#34;language-cpp&amp;#34; data-lang=&amp;#34;cpp&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;nf&amp;#34;&amp;gt;Ex_crt&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;()&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;{&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;M&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;m&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;],&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;x&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;a&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;],&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;t&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;y&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;c1&amp;#34;&amp;gt;// M: 前 i-1 个模数的 LCM，x: 前 i-1 个方程的解
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;for&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;2&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;lt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;n&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;++&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;{&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;Mi&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;m&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;];&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;c&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;a&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;]&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;-&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;x&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;c1&amp;#34;&amp;gt;// 对于第 i 个数，减掉 x 后求 t*M
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;d&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;Ex_gcd&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;M&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;Mi&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;t&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;y&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;);&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;c1&amp;#34;&amp;gt;// t → d
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;if&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;c&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;%&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;d&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;return&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;-&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;c1&amp;#34;&amp;gt;// c 不能整除 d，无整数解
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;c&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;/=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;d&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;Mi&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;/=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;d&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;t&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;t&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;*&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;c&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;%&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;Mi&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;+&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;Mi&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;%&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;Mi&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;c1&amp;#34;&amp;gt;// t 成为最小整数解
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;lcm&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;M&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;*&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;Mi&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;x&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;M&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;*&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;t&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;%&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;lcm&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;+&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;x&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;%&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;lcm&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;M&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;lcm&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;c1&amp;#34;&amp;gt;// 新的 x 和 M 为下一趟循环做准备
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;}&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;return&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;x&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;==&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;0&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;?&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;nl&amp;#34;&amp;gt;M&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;:&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;x&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;}&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;&amp;lt;hr&amp;gt;
&amp;lt;h2 id=&amp;#34;八最短路径--dijkstra-堆优化&amp;#34;&amp;gt;八、最短路径 — Dijkstra 堆优化
&amp;lt;/h2&amp;gt;&amp;lt;h3 id=&amp;#34;问题引入&amp;#34;&amp;gt;问题引入
&amp;lt;/h3&amp;gt;&amp;lt;p&amp;gt;
&amp;lt;div class=&amp;#34;post-img-view&amp;#34;&amp;gt;
&amp;lt;a data-fancybox=&amp;#34;gallery&amp;#34; href=&amp;#34;/p/%E9%AB%98%E7%BA%A7%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/image-20260529094648-xagpxrv.png&amp;#34;&amp;gt;
&amp;lt;img src=&amp;#34;/p/%E9%AB%98%E7%BA%A7%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/image-20260529094648-xagpxrv.png&amp;#34;
width=&amp;#34;1541&amp;#34;
height=&amp;#34;697&amp;#34;
srcset=&amp;#34;/p/%E9%AB%98%E7%BA%A7%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/image-20260529094648-xagpxrv_hu_5bbd521cc99f610.png 480w, /p/%E9%AB%98%E7%BA%A7%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/image-20260529094648-xagpxrv_hu_438907767f27dccd.png 1024w&amp;#34;
loading=&amp;#34;lazy&amp;#34;
alt=&amp;#34;畅通工程&amp;#34;
class=&amp;#34;gallery-image&amp;#34;
data-flex-grow=&amp;#34;221&amp;#34;
data-flex-basis=&amp;#34;530px&amp;#34;
/&amp;gt;
&amp;lt;/a&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/p&amp;gt;
&amp;lt;h3 id=&amp;#34;dijkstra-算法&amp;#34;&amp;gt;Dijkstra 算法
&amp;lt;/h3&amp;gt;&amp;lt;p&amp;gt;从起点开始逐步扩展已知最短路径的节点集合。按照最短路径长度&amp;lt;strong&amp;gt;递增&amp;lt;/strong&amp;gt;的次序，依次求得原点到其余各点的最短路径。&amp;lt;/p&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;先求——最短的最短路径&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;再求——第二短的最短路径（直达 / 途经第一短后的二次转移）&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;div class=&amp;#34;details admonition example&amp;#34;&amp;gt;
&amp;lt;div class=&amp;#34;details-summary admonition-title&amp;#34;&amp;gt;
&amp;lt;i class=&amp;#34;icon fas fa-list-ol fa-fw&amp;#34;&amp;gt;&amp;lt;/i&amp;gt;重要&amp;lt;i class=&amp;#34;details-icon fas fa-angle-right fa-fw&amp;#34;&amp;gt;&amp;lt;/i&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;#34;details-content&amp;#34;&amp;gt;
&amp;lt;div class=&amp;#34;admonition-content&amp;#34;&amp;gt;&amp;lt;p&amp;gt;最重要的是每一趟都求一次最短路，从起点开始选择距离起点最近的未确定节点标记最短路径已确定。&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;以及&amp;lt;strong&amp;gt;松弛操作&amp;lt;/strong&amp;gt;：每次通过选中的最短节点更新邻接节点的距离，为下次更新做准备。最后重复到所有节点确定。&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;算法步骤&amp;lt;/strong&amp;gt;：&amp;lt;/p&amp;gt;
&amp;lt;ol&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;初始化&amp;lt;/strong&amp;gt;：起点距离设为 0，其他节点设为 ∞，所有节点标记为未访问&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;迭代过程&amp;lt;/strong&amp;gt;：从未访问节点中选择距离最小的节点 u，标记 u 为已访问，对 u 的每个邻接节点 v 进行松弛：如果 &amp;lt;code&amp;gt;dist[u] + w(u,v) &amp;amp;lt; dist[v]&amp;lt;/code&amp;gt;，则更新 &amp;lt;code&amp;gt;dist[v]&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;终止条件&amp;lt;/strong&amp;gt;：所有节点都被访问，或目标节点被访问&amp;lt;/li&amp;gt;
&amp;lt;/ol&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;注意&amp;lt;/strong&amp;gt;：Dijkstra 不能有负权边，否则会破坏无后效性。&amp;lt;/p&amp;gt;
&amp;lt;h4 id=&amp;#34;朴素实现&amp;#34;&amp;gt;朴素实现
&amp;lt;/h4&amp;gt;&amp;lt;div class=&amp;#34;highlight&amp;#34;&amp;gt;&amp;lt;div class=&amp;#34;chroma&amp;#34;&amp;gt;
&amp;lt;table class=&amp;#34;lntable&amp;#34;&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td class=&amp;#34;lntd&amp;#34;&amp;gt;
&amp;lt;pre tabindex=&amp;#34;0&amp;#34; class=&amp;#34;chroma&amp;#34;&amp;gt;&amp;lt;code&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 1
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 2
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 3
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 4
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 5
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 6
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 7
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 8
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 9
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;10
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;11
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;12
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;13
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;14
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;15
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;16
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;17
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;18
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;19
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;20
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;21
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;22
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;23
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;24
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;25
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;26
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;27
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;28
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;29
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;30
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;31
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;32
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;33
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;34
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;35
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;36
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;37
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;38
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;39
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;40
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;41
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;42
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;43
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;44
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;45
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;46
&amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;#34;lntd&amp;#34;&amp;gt;
&amp;lt;pre tabindex=&amp;#34;0&amp;#34; class=&amp;#34;chroma&amp;#34;&amp;gt;&amp;lt;code class=&amp;#34;language-cpp&amp;#34; data-lang=&amp;#34;cpp&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cp&amp;#34;&amp;gt;#include&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;cpf&amp;#34;&amp;gt;&amp;amp;lt;bits/stdc++.h&amp;amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;cp&amp;#34;&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;using&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;namespace&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;std&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cp&amp;#34;&amp;gt;#define inf 0x7FFFFFFF
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cp&amp;#34;&amp;gt;#define M 201
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;Map&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;M&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;][&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;M&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;],&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;Dist&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;M&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;],&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;vis&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;M&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;];&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;nf&amp;#34;&amp;gt;main&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;()&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;{&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;n&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;m&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;a&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;b&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;dis&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;now&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;Min&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;next&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;targe&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;while&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;scanf&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;s&amp;#34;&amp;gt;&amp;amp;#34;%d%d&amp;amp;#34;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;amp;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;n&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;amp;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;m&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;==&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;2&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;{&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;for&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;0&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;lt;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;n&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;++&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;{&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;vis&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;]&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;Dist&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;]&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;inf&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;for&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;j&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;0&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;j&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;lt;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;n&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;++&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;Map&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;][&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;]&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;inf&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;}&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;while&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;m&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;--&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;{&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;scanf&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;s&amp;#34;&amp;gt;&amp;amp;#34;%d%d%d&amp;amp;#34;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;amp;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;a&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;amp;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;b&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;amp;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;dis&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;);&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;Map&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;a&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;][&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;b&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;]&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;min&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;Map&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;a&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;][&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;b&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;],&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;dis&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;);&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;c1&amp;#34;&amp;gt;// 处理重边
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;Map&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;b&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;][&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;a&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;]&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;Map&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;a&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;][&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;b&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;];&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;}&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;scanf&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;s&amp;#34;&amp;gt;&amp;amp;#34;%d%d&amp;amp;#34;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;amp;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;now&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;amp;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;targe&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;);&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;Dist&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;now&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;]&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;0&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;vis&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;now&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;]&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;0&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;while&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;now&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;!=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;targe&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;{&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;c1&amp;#34;&amp;gt;// O(n²) 复杂度
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;Min&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;inf&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;for&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;0&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;lt;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;n&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;++&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;{&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;if&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;Map&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;now&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;][&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;]&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;!=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;inf&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;Dist&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;]&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;min&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;Dist&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;],&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;Map&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;now&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;][&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;]&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;+&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;Dist&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;now&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;]);&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;if&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;vis&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;]&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;amp;&amp;amp;amp;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;Dist&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;]&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;lt;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;Min&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;{&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;next&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;Min&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;Dist&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;];&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;}&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;}&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;if&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;Min&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;==&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;inf&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;break&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;now&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;next&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;vis&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;now&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;]&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;0&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;}&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;if&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;Dist&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;targe&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;]&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;==&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;inf&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;puts&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;s&amp;#34;&amp;gt;&amp;amp;#34;-1&amp;amp;#34;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;);&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;else&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;printf&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;s&amp;#34;&amp;gt;&amp;amp;#34;%d&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;se&amp;#34;&amp;gt;\n&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;s&amp;#34;&amp;gt;&amp;amp;#34;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;Dist&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;targe&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;]);&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;}&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;return&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;0&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;}&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;#34;details admonition warning&amp;#34;&amp;gt;
&amp;lt;div class=&amp;#34;details-summary admonition-title&amp;#34;&amp;gt;
&amp;lt;i class=&amp;#34;icon fas fa-exclamation-triangle fa-fw&amp;#34;&amp;gt;&amp;lt;/i&amp;gt;警告&amp;lt;i class=&amp;#34;details-icon fas fa-angle-right fa-fw&amp;#34;&amp;gt;&amp;lt;/i&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;#34;details-content&amp;#34;&amp;gt;
&amp;lt;div class=&amp;#34;admonition-content&amp;#34;&amp;gt;&amp;lt;p&amp;gt;理论表示：&amp;lt;code&amp;gt;dist[k] = min(dist[i] + map[i][k])&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;实际：&amp;lt;code&amp;gt;dist[k] = min(dist[k], dist[u] + map[u][k])&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;$O(n^2)$ 复杂度，$N = 10^5$ 就容易 TLE 了。&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;h3 id=&amp;#34;堆优化链式前向星--优先队列&amp;#34;&amp;gt;堆优化：链式前向星 + 优先队列
&amp;lt;/h3&amp;gt;&amp;lt;h4 id=&amp;#34;邻接表的数组实现链式前向星&amp;#34;&amp;gt;邻接表的数组实现（链式前向星）
&amp;lt;/h4&amp;gt;&amp;lt;p&amp;gt;
&amp;lt;div class=&amp;#34;post-img-view&amp;#34;&amp;gt;
&amp;lt;a data-fancybox=&amp;#34;gallery&amp;#34; href=&amp;#34;/p/%E9%AB%98%E7%BA%A7%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/excalidraw-image-20260531144713-mzak4rr.svg&amp;#34;&amp;gt;
&amp;lt;img src=&amp;#34;/p/%E9%AB%98%E7%BA%A7%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/excalidraw-image-20260531144713-mzak4rr.svg&amp;#34;
loading=&amp;#34;lazy&amp;#34;
alt=&amp;#34;链式前向星示意图&amp;#34;
/&amp;gt;
&amp;lt;/a&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;有这样一个图，用邻接表表示如下：&amp;lt;/p&amp;gt;
&amp;lt;div class=&amp;#34;highlight&amp;#34;&amp;gt;&amp;lt;div class=&amp;#34;chroma&amp;#34;&amp;gt;
&amp;lt;table class=&amp;#34;lntable&amp;#34;&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td class=&amp;#34;lntd&amp;#34;&amp;gt;
&amp;lt;pre tabindex=&amp;#34;0&amp;#34; class=&amp;#34;chroma&amp;#34;&amp;gt;&amp;lt;code&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;1
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;2
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;3
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;4
&amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;#34;lntd&amp;#34;&amp;gt;
&amp;lt;pre tabindex=&amp;#34;0&amp;#34; class=&amp;#34;chroma&amp;#34;&amp;gt;&amp;lt;code class=&amp;#34;language-fallback&amp;#34; data-lang=&amp;#34;fallback&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;顶点 1: -&amp;amp;gt; (4, 9) -&amp;amp;gt; (2, 5) -&amp;amp;gt; (3, 7)
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;顶点 2: -&amp;amp;gt; (4, 6)
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;顶点 3: -&amp;amp;gt; (空)
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;顶点 4: -&amp;amp;gt; (3, 8)
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;&amp;lt;p&amp;gt;表头数组保存第一条边指向点，使用&amp;lt;strong&amp;gt;前插法&amp;lt;/strong&amp;gt;来实时更新。&amp;lt;/p&amp;gt;
&amp;lt;div class=&amp;#34;details admonition info&amp;#34;&amp;gt;
&amp;lt;div class=&amp;#34;details-summary admonition-title&amp;#34;&amp;gt;
&amp;lt;i class=&amp;#34;icon fas fa-info-circle fa-fw&amp;#34;&amp;gt;&amp;lt;/i&amp;gt;注意&amp;lt;i class=&amp;#34;details-icon fas fa-angle-right fa-fw&amp;#34;&amp;gt;&amp;lt;/i&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;#34;details-content&amp;#34;&amp;gt;
&amp;lt;div class=&amp;#34;admonition-content&amp;#34;&amp;gt;邻接表对于稀疏数据来说更为合适。邻接矩阵判断是否有边要逐个判断，而邻接表可以直接通过 head 数组是否为 0 来判断。&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;h4 id=&amp;#34;堆优化后的-dijkstra&amp;#34;&amp;gt;堆优化后的 Dijkstra
&amp;lt;/h4&amp;gt;&amp;lt;p&amp;gt;优先队列维护 dist 的值从小到大，避免每次从 n 个节点找一个最优解。用小根堆实现，时间复杂度为 &amp;lt;strong&amp;gt;O(E log E)&amp;lt;/strong&amp;gt;。&amp;lt;/p&amp;gt;
&amp;lt;div class=&amp;#34;details admonition info&amp;#34;&amp;gt;
&amp;lt;div class=&amp;#34;details-summary admonition-title&amp;#34;&amp;gt;
&amp;lt;i class=&amp;#34;icon fas fa-info-circle fa-fw&amp;#34;&amp;gt;&amp;lt;/i&amp;gt;注意&amp;lt;i class=&amp;#34;details-icon fas fa-angle-right fa-fw&amp;#34;&amp;gt;&amp;lt;/i&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;#34;details-content&amp;#34;&amp;gt;
&amp;lt;div class=&amp;#34;admonition-content&amp;#34;&amp;gt;&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;小根堆&amp;lt;/strong&amp;gt;：优先队列每次出队优先级最高元素。小根堆永远保持根节点小于子节点，插入和删除最小的时间复杂度为 O(log n)。&amp;lt;/p&amp;gt;
&amp;lt;table&amp;gt;
&amp;lt;thead&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;th&amp;gt;优先队列操作&amp;lt;/th&amp;gt;
&amp;lt;th&amp;gt;小根堆实现&amp;lt;/th&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/thead&amp;gt;
&amp;lt;tbody&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td&amp;gt;插入元素&amp;lt;/td&amp;gt;
&amp;lt;td&amp;gt;堆尾插入 + 向上调整&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td&amp;gt;取出最小元素&amp;lt;/td&amp;gt;
&amp;lt;td&amp;gt;删除堆顶 + 向下调整&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td&amp;gt;查看最小元素&amp;lt;/td&amp;gt;
&amp;lt;td&amp;gt;返回 heap[1]&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td&amp;gt;判空&amp;lt;/td&amp;gt;
&amp;lt;td&amp;gt;检查堆大小是否为 0&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/tbody&amp;gt;
&amp;lt;/table&amp;gt;&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;#34;highlight&amp;#34;&amp;gt;&amp;lt;div class=&amp;#34;chroma&amp;#34;&amp;gt;
&amp;lt;table class=&amp;#34;lntable&amp;#34;&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td class=&amp;#34;lntd&amp;#34;&amp;gt;
&amp;lt;pre tabindex=&amp;#34;0&amp;#34; class=&amp;#34;chroma&amp;#34;&amp;gt;&amp;lt;code&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 1
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 2
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 3
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 4
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 5
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 6
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 7
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 8
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 9
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;10
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;11
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;12
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;13
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;14
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;15
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;16
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;17
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;18
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;19
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;20
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;21
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;22
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;23
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;24
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;25
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;26
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;27
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;28
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;29
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;30
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;31
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;32
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;33
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;34
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;35
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;36
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;37
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;38
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;39
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;40
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;41
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;42
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;43
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;44
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;45
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;46
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;47
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;48
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;49
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;50
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;51
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;52
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;53
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;54
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;55
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;56
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;57
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;58
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;59
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;60
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;61
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;62
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;63
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;64
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;65
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;66
&amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;#34;lntd&amp;#34;&amp;gt;
&amp;lt;pre tabindex=&amp;#34;0&amp;#34; class=&amp;#34;chroma&amp;#34;&amp;gt;&amp;lt;code class=&amp;#34;language-cpp&amp;#34; data-lang=&amp;#34;cpp&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cp&amp;#34;&amp;gt;#include&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;cpf&amp;#34;&amp;gt;&amp;amp;lt;bits/stdc++.h&amp;amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;cp&amp;#34;&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cp&amp;#34;&amp;gt;#define INF 2147483647
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;using&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;namespace&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;std&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;n&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;m&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;s&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;cnt&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;head&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;100005&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;];&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;dist&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;100005&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;],&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;vis&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;100005&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;];&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;struct&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;nc&amp;#34;&amp;gt;Edge&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;{&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;to&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;dis&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;next&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;}&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;edge&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;200005&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;];&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;void&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;nf&amp;#34;&amp;gt;Add_edge&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;from&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;to&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;w&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;{&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;edge&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;++&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;cnt&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;].&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;to&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;to&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;edge&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;cnt&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;].&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;dis&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;w&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;edge&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;cnt&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;].&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;next&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;head&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;from&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;];&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;head&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;from&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;]&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;cnt&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;}&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;struct&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;nc&amp;#34;&amp;gt;node&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;{&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;id&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;dis&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;bool&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;operator&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;lt;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;const&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;node&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;amp;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;a&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;const&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;{&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;return&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;a&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;dis&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;lt;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;dis&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;c1&amp;#34;&amp;gt;// 小根堆：按距离最小优先
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;}&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;};&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;void&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;nf&amp;#34;&amp;gt;Dijkstra&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;()&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;{&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;priority_queue&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;lt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;node&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;q&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;q&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;push&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;node&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;{&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;s&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;0&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;});&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;for&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;lt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;n&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;++&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;dist&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;]&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;INF&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;dist&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;s&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;]&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;0&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;while&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;!&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;q&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;empty&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;())&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;{&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;node&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;a&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;q&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;top&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;();&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;q&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;pop&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;();&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;now&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;a&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;id&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;if&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;vis&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;now&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;])&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;continue&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;c1&amp;#34;&amp;gt;// 关键优化：已确定最短则跳过
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;vis&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;now&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;]&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;for&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;head&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;now&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;];&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;edge&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;].&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;next&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;{&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;j&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;edge&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;].&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;to&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;if&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;dist&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;now&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;]&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;+&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;edge&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;].&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;dis&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;lt;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;dist&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;])&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;{&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;dist&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;]&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;dist&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;now&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;]&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;+&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;edge&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;].&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;dis&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;q&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;push&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;node&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;{&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;dist&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;]});&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;}&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;}&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;}&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;}&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;nf&amp;#34;&amp;gt;main&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;()&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;{&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;cin&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;n&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;m&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;s&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;for&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;lt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;m&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;++&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;{&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;u&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;v&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;w&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;cin&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;u&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;v&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;w&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;Add_edge&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;u&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;v&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;w&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;);&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;c1&amp;#34;&amp;gt;// 无向图加反向边：Add_edge(v, u, w);
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;}&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;Dijkstra&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;();&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;for&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;lt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;n&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;++&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;{&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;if&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;dist&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;]&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;==&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;INF&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;cout&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;lt;&amp;amp;lt;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;s&amp;#34;&amp;gt;&amp;amp;#34;INF &amp;amp;#34;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;else&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;cout&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;lt;&amp;amp;lt;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;dist&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;]&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;lt;&amp;amp;lt;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;s&amp;#34;&amp;gt;&amp;amp;#34; &amp;amp;#34;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;}&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;cout&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;lt;&amp;amp;lt;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;endl&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;return&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;0&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;}&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;加边的策略&amp;lt;/strong&amp;gt;：一直往前加并更新 head，edge 保存了边的链表：&amp;lt;/p&amp;gt;
&amp;lt;div class=&amp;#34;highlight&amp;#34;&amp;gt;&amp;lt;div class=&amp;#34;chroma&amp;#34;&amp;gt;
&amp;lt;table class=&amp;#34;lntable&amp;#34;&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td class=&amp;#34;lntd&amp;#34;&amp;gt;
&amp;lt;pre tabindex=&amp;#34;0&amp;#34; class=&amp;#34;chroma&amp;#34;&amp;gt;&amp;lt;code&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 1
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 2
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 3
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 4
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 5
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 6
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 7
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 8
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 9
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;10
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;11
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;12
&amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;#34;lntd&amp;#34;&amp;gt;
&amp;lt;pre tabindex=&amp;#34;0&amp;#34; class=&amp;#34;chroma&amp;#34;&amp;gt;&amp;lt;code class=&amp;#34;language-text&amp;#34; data-lang=&amp;#34;text&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;以顶点1为例，假设有边：1→2(权5), 1→3(权3), 1→4(权7)
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; head[1] = 3 // 指向最新加入的边（编号3）
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; │
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; ▼
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; ┌─────┐ ┌─────┐ ┌─────┐
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; │edge3│ → │edge2│ → │edge1│
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; │to:4 │ │to:3 │ │to:2 │
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; │dis:7│ │dis:3│ │dis:5│
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; │next:2│ │next:1│ │next:0│ ← 0表示结束
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; └─────┘ └─────┘ └─────┘
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; 编号3 编号2 编号1（最先加入）
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;&amp;lt;p&amp;gt;
&amp;lt;div class=&amp;#34;post-img-view&amp;#34;&amp;gt;
&amp;lt;a data-fancybox=&amp;#34;gallery&amp;#34; href=&amp;#34;/p/%E9%AB%98%E7%BA%A7%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/excalidraw-image-20260531152346-9yn61ed.svg&amp;#34;&amp;gt;
&amp;lt;img src=&amp;#34;/p/%E9%AB%98%E7%BA%A7%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/excalidraw-image-20260531152346-9yn61ed.svg&amp;#34;
loading=&amp;#34;lazy&amp;#34;
alt=&amp;#34;Dijkstra 流程&amp;#34;
/&amp;gt;
&amp;lt;/a&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/p&amp;gt;
&amp;lt;h3 id=&amp;#34;同一个节点为什么会被多次入堆&amp;#34;&amp;gt;同一个节点为什么会被多次入堆？
&amp;lt;/h3&amp;gt;&amp;lt;p&amp;gt;因为 Dijkstra 在松弛过程中，&amp;lt;strong&amp;gt;每次发现更短路径时&amp;lt;/strong&amp;gt;，会把 &amp;lt;code&amp;gt;(节点, 新距离)&amp;lt;/code&amp;gt; 入堆。&amp;lt;/p&amp;gt;
&amp;lt;table&amp;gt;
&amp;lt;thead&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;th&amp;gt;步骤&amp;lt;/th&amp;gt;
&amp;lt;th&amp;gt;堆内容 (id, dist)&amp;lt;/th&amp;gt;
&amp;lt;th&amp;gt;弹出&amp;lt;/th&amp;gt;
&amp;lt;th&amp;gt;操作&amp;lt;/th&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/thead&amp;gt;
&amp;lt;tbody&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td&amp;gt;初始&amp;lt;/td&amp;gt;
&amp;lt;td&amp;gt;(1, 0)&amp;lt;/td&amp;gt;
&amp;lt;td&amp;gt;-&amp;lt;/td&amp;gt;
&amp;lt;td&amp;gt;dist[1] = 0&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td&amp;gt;1&amp;lt;/td&amp;gt;
&amp;lt;td&amp;gt;(1, 0)&amp;lt;/td&amp;gt;
&amp;lt;td&amp;gt;弹出 1&amp;lt;/td&amp;gt;
&amp;lt;td&amp;gt;dist[2]=5 入堆(2,5)；dist[3]=2 入堆(3,2)&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td&amp;gt;2&amp;lt;/td&amp;gt;
&amp;lt;td&amp;gt;(3,2), (2,5)&amp;lt;/td&amp;gt;
&amp;lt;td&amp;gt;弹出(3,2)&amp;lt;/td&amp;gt;
&amp;lt;td&amp;gt;vis[3]=1；dist[2] 从 5 更新到 4，入堆(2,4)&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td&amp;gt;3&amp;lt;/td&amp;gt;
&amp;lt;td&amp;gt;(2,4), (2,5)&amp;lt;/td&amp;gt;
&amp;lt;td&amp;gt;弹出(2,4)&amp;lt;/td&amp;gt;
&amp;lt;td&amp;gt;vis[2]=1，正常处理&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td&amp;gt;4&amp;lt;/td&amp;gt;
&amp;lt;td&amp;gt;(2,5)&amp;lt;/td&amp;gt;
&amp;lt;td&amp;gt;弹出(2,5)&amp;lt;/td&amp;gt;
&amp;lt;td&amp;gt;&amp;lt;strong&amp;gt;vis[2]=1，触发 continue 跳过&amp;lt;/strong&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/tbody&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;p&amp;gt;关键点：&amp;lt;/p&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;节点 2 被入了两次堆：先 &amp;lt;code&amp;gt;(2,5)&amp;lt;/code&amp;gt;，后 &amp;lt;code&amp;gt;(2,4)&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;当 &amp;lt;code&amp;gt;(2,4)&amp;lt;/code&amp;gt; 弹出处理后，&amp;lt;code&amp;gt;vis[2]&amp;lt;/code&amp;gt; 被标记为 1&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;之后 &amp;lt;code&amp;gt;(2,5)&amp;lt;/code&amp;gt; 弹出时发现 &amp;lt;code&amp;gt;vis[2]&amp;lt;/code&amp;gt; 已为 1，说明过时，直接跳过&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;正是因为 Dijkstra 按距离递增处理 + 优先队列，第一次弹出的定是最小更新&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;时间复杂度分析&amp;lt;/strong&amp;gt;：松弛操作中每条边最多入一次堆，刚好一条最短路走到底就是 E 次。堆大小为 E，出入堆时间 O(log E)。总复杂度 &amp;lt;strong&amp;gt;O(E log E)&amp;lt;/strong&amp;gt;。&amp;lt;/p&amp;gt;
&amp;lt;blockquote&amp;gt;
&amp;lt;p&amp;gt;不过如果是稠密图的话还是老实写朴素 Dijkstra 吧。&amp;lt;/p&amp;gt;
&amp;lt;/blockquote&amp;gt;
&amp;lt;hr&amp;gt;
&amp;lt;h2 id=&amp;#34;九最短路径扩展--floyd--bellman-ford--spfa&amp;#34;&amp;gt;九、最短路径扩展 — Floyd / Bellman-Ford / SPFA
&amp;lt;/h2&amp;gt;&amp;lt;h3 id=&amp;#34;基于链式前向星的图遍历&amp;#34;&amp;gt;基于链式前向星的图遍历
&amp;lt;/h3&amp;gt;&amp;lt;p&amp;gt;回顾链式前向星遍历方式：&amp;lt;/p&amp;gt;
&amp;lt;div class=&amp;#34;highlight&amp;#34;&amp;gt;&amp;lt;div class=&amp;#34;chroma&amp;#34;&amp;gt;
&amp;lt;table class=&amp;#34;lntable&amp;#34;&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td class=&amp;#34;lntd&amp;#34;&amp;gt;
&amp;lt;pre tabindex=&amp;#34;0&amp;#34; class=&amp;#34;chroma&amp;#34;&amp;gt;&amp;lt;code&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;1
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;2
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;3
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;4
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;5
&amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;#34;lntd&amp;#34;&amp;gt;
&amp;lt;pre tabindex=&amp;#34;0&amp;#34; class=&amp;#34;chroma&amp;#34;&amp;gt;&amp;lt;code class=&amp;#34;language-cpp&amp;#34; data-lang=&amp;#34;cpp&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;for&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;lt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;n&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;++&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;{&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;for&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;k&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;head&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;];&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;k&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;k&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;edge&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;k&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;].&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;next&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;{&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;c1&amp;#34;&amp;gt;// edge[k] 即为从 i 出发的一条边
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;}&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;}&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;BFS 遍历：&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;div class=&amp;#34;highlight&amp;#34;&amp;gt;&amp;lt;div class=&amp;#34;chroma&amp;#34;&amp;gt;
&amp;lt;table class=&amp;#34;lntable&amp;#34;&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td class=&amp;#34;lntd&amp;#34;&amp;gt;
&amp;lt;pre tabindex=&amp;#34;0&amp;#34; class=&amp;#34;chroma&amp;#34;&amp;gt;&amp;lt;code&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 1
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 2
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 3
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 4
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 5
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 6
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 7
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 8
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 9
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;10
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;11
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;12
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;13
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;14
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;15
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;16
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;17
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;18
&amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;#34;lntd&amp;#34;&amp;gt;
&amp;lt;pre tabindex=&amp;#34;0&amp;#34; class=&amp;#34;chroma&amp;#34;&amp;gt;&amp;lt;code class=&amp;#34;language-cpp&amp;#34; data-lang=&amp;#34;cpp&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;void&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;nf&amp;#34;&amp;gt;bfs&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;start&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;{&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;queue&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;lt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;q&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;vis&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;start&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;]&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;q&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;push&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;start&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;);&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;while&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;!&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;q&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;empty&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;())&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;{&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;u&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;q&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;front&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;();&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;q&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;pop&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;();&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;cout&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;lt;&amp;amp;lt;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;u&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;lt;&amp;amp;lt;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;s&amp;#34;&amp;gt;&amp;amp;#34; &amp;amp;#34;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;for&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;head&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;u&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;];&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;!=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;0&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;edge&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;].&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;next&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;{&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;v&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;edge&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;].&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;to&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;if&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;!&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;vis&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;v&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;])&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;{&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;vis&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;v&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;]&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;q&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;push&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;v&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;);&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;}&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;}&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;}&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;}&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;DFS 遍历：&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;div class=&amp;#34;highlight&amp;#34;&amp;gt;&amp;lt;div class=&amp;#34;chroma&amp;#34;&amp;gt;
&amp;lt;table class=&amp;#34;lntable&amp;#34;&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td class=&amp;#34;lntd&amp;#34;&amp;gt;
&amp;lt;pre tabindex=&amp;#34;0&amp;#34; class=&amp;#34;chroma&amp;#34;&amp;gt;&amp;lt;code&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;1
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;2
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;3
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;4
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;5
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;6
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;7
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;8
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;9
&amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;#34;lntd&amp;#34;&amp;gt;
&amp;lt;pre tabindex=&amp;#34;0&amp;#34; class=&amp;#34;chroma&amp;#34;&amp;gt;&amp;lt;code class=&amp;#34;language-cpp&amp;#34; data-lang=&amp;#34;cpp&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;void&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;nf&amp;#34;&amp;gt;dfs&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;u&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;{&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;vis&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;u&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;]&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;cout&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;lt;&amp;amp;lt;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;u&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;lt;&amp;amp;lt;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;s&amp;#34;&amp;gt;&amp;amp;#34; &amp;amp;#34;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;for&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;head&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;u&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;];&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;!=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;0&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;edge&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;].&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;next&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;{&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;v&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;edge&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;].&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;to&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;if&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;!&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;vis&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;v&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;])&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;dfs&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;v&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;);&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;}&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;}&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;&amp;lt;h3 id=&amp;#34;floyd-算法插点法经典-dp&amp;#34;&amp;gt;Floyd 算法（插点法，经典 DP）
&amp;lt;/h3&amp;gt;&amp;lt;p&amp;gt;解决&amp;lt;strong&amp;gt;多源最短路径&amp;lt;/strong&amp;gt;问题（所有点到所有点）。&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;核心代码：&amp;lt;/p&amp;gt;
&amp;lt;div class=&amp;#34;highlight&amp;#34;&amp;gt;&amp;lt;div class=&amp;#34;chroma&amp;#34;&amp;gt;
&amp;lt;table class=&amp;#34;lntable&amp;#34;&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td class=&amp;#34;lntd&amp;#34;&amp;gt;
&amp;lt;pre tabindex=&amp;#34;0&amp;#34; class=&amp;#34;chroma&amp;#34;&amp;gt;&amp;lt;code&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;1
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;2
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;3
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;4
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;5
&amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;#34;lntd&amp;#34;&amp;gt;
&amp;lt;pre tabindex=&amp;#34;0&amp;#34; class=&amp;#34;chroma&amp;#34;&amp;gt;&amp;lt;code class=&amp;#34;language-cpp&amp;#34; data-lang=&amp;#34;cpp&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;for&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;k&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;k&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;lt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;n&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;k&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;++&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;c1&amp;#34;&amp;gt;// 插入点 k 在外层循环（很关键）
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;for&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;lt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;n&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;++&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;c1&amp;#34;&amp;gt;// 起点
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;for&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;j&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;j&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;lt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;n&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;++&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;c1&amp;#34;&amp;gt;// 终点
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;if&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;dis&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;][&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;]&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;dis&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;][&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;k&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;]&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;+&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;dis&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;k&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;][&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;])&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;dis&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;][&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;]&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;dis&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;][&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;k&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;]&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;+&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;dis&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;k&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;][&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;];&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;思想&amp;lt;/strong&amp;gt;：暴力枚举从 i 到 j 只经过前 k 个点的最短路径。&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;i 到 j 最短距离无非两种：&amp;lt;/p&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;i 到 j 经过 k&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;i 到 j 不经过 k&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;code&amp;gt;dp[i][k]&amp;lt;/code&amp;gt; 和 &amp;lt;code&amp;gt;dp[k][j]&amp;lt;/code&amp;gt; 分别是 i 到 k 和 k 到 j 的最短距离，查完所有 k 后 &amp;lt;code&amp;gt;dp[i][j]&amp;lt;/code&amp;gt; 必然是 i 到 j 的最短距离。&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;特点&amp;lt;/strong&amp;gt;：简单粗暴，易于实现，甚至可以解决&amp;lt;strong&amp;gt;负权&amp;lt;/strong&amp;gt;。时间复杂度 $O(V^3)$。&amp;lt;/p&amp;gt;
&amp;lt;h3 id=&amp;#34;bellman-ford-算法&amp;#34;&amp;gt;Bellman-Ford 算法
&amp;lt;/h3&amp;gt;&amp;lt;p&amp;gt;解决&amp;lt;strong&amp;gt;单源最短路径&amp;lt;/strong&amp;gt;问题（单点到所有点）。&amp;lt;/p&amp;gt;
&amp;lt;div class=&amp;#34;highlight&amp;#34;&amp;gt;&amp;lt;div class=&amp;#34;chroma&amp;#34;&amp;gt;
&amp;lt;table class=&amp;#34;lntable&amp;#34;&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td class=&amp;#34;lntd&amp;#34;&amp;gt;
&amp;lt;pre tabindex=&amp;#34;0&amp;#34; class=&amp;#34;chroma&amp;#34;&amp;gt;&amp;lt;code&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;1
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;2
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;3
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;4
&amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;#34;lntd&amp;#34;&amp;gt;
&amp;lt;pre tabindex=&amp;#34;0&amp;#34; class=&amp;#34;chroma&amp;#34;&amp;gt;&amp;lt;code class=&amp;#34;language-cpp&amp;#34; data-lang=&amp;#34;cpp&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;for&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;k&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;k&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;lt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;n&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;-&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;k&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;++&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;c1&amp;#34;&amp;gt;// n-1 轮松弛
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;for&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;lt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;m&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;++&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;c1&amp;#34;&amp;gt;// m 条边
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;if&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;dis&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;v&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;]]&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;dis&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;u&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;]]&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;+&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;w&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;])&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;dis&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;v&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;]]&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;dis&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;u&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;]]&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;+&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;w&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;];&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;&amp;lt;p&amp;gt;更清晰的写法：&amp;lt;/p&amp;gt;
&amp;lt;div class=&amp;#34;highlight&amp;#34;&amp;gt;&amp;lt;div class=&amp;#34;chroma&amp;#34;&amp;gt;
&amp;lt;table class=&amp;#34;lntable&amp;#34;&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td class=&amp;#34;lntd&amp;#34;&amp;gt;
&amp;lt;pre tabindex=&amp;#34;0&amp;#34; class=&amp;#34;chroma&amp;#34;&amp;gt;&amp;lt;code&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;1
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;2
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;3
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;4
&amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;#34;lntd&amp;#34;&amp;gt;
&amp;lt;pre tabindex=&amp;#34;0&amp;#34; class=&amp;#34;chroma&amp;#34;&amp;gt;&amp;lt;code class=&amp;#34;language-cpp&amp;#34; data-lang=&amp;#34;cpp&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;for&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;lt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;n&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;-&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;++&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;for&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;auto&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;u&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;v&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;w&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;]&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;:&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;edges&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;if&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;dist&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;u&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;]&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;+&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;w&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;lt;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;dist&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;v&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;])&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;dist&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;v&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;]&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;dist&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;u&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;]&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;+&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;w&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;为什么是 n-1 轮？&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;最短路径最多包含 &amp;lt;strong&amp;gt;n-1 条边&amp;lt;/strong&amp;gt;（无环情况下）&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;每轮至少确定一层的距离&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;n-1 轮后一定能得到所有最短路径&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;div class=&amp;#34;details admonition success&amp;#34;&amp;gt;
&amp;lt;div class=&amp;#34;details-summary admonition-title&amp;#34;&amp;gt;
&amp;lt;i class=&amp;#34;icon fas fa-check-circle fa-fw&amp;#34;&amp;gt;&amp;lt;/i&amp;gt;提示&amp;lt;i class=&amp;#34;details-icon fas fa-angle-right fa-fw&amp;#34;&amp;gt;&amp;lt;/i&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;#34;details-content&amp;#34;&amp;gt;
&amp;lt;div class=&amp;#34;admonition-content&amp;#34;&amp;gt;&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;小优化&amp;lt;/strong&amp;gt;：不一定需要 n-1 轮松弛。&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;特点&amp;lt;/strong&amp;gt;：简洁并且可以解决负权、负环问题。&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;负环检测&amp;lt;/strong&amp;gt;：&amp;lt;/p&amp;gt;
&amp;lt;div class=&amp;#34;highlight&amp;#34;&amp;gt;&amp;lt;div class=&amp;#34;chroma&amp;#34;&amp;gt;
&amp;lt;table class=&amp;#34;lntable&amp;#34;&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td class=&amp;#34;lntd&amp;#34;&amp;gt;
&amp;lt;pre tabindex=&amp;#34;0&amp;#34; class=&amp;#34;chroma&amp;#34;&amp;gt;&amp;lt;code&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;1
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;2
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;3
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;4
&amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;#34;lntd&amp;#34;&amp;gt;
&amp;lt;pre tabindex=&amp;#34;0&amp;#34; class=&amp;#34;chroma&amp;#34;&amp;gt;&amp;lt;code class=&amp;#34;language-cpp&amp;#34; data-lang=&amp;#34;cpp&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;flag&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;0&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;for&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;lt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;m&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;++&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;if&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;dis&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;v&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;]]&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;dis&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;u&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;]]&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;+&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;w&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;])&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;flag&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;if&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;flag&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;==&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;c1&amp;#34;&amp;gt;// 有负环
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;&amp;lt;h3 id=&amp;#34;spfa--bellman-ford-的队列优化&amp;#34;&amp;gt;SPFA — Bellman-Ford 的队列优化
&amp;lt;/h3&amp;gt;&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;基本思想&amp;lt;/strong&amp;gt;：每次仅对最短路径&amp;lt;strong&amp;gt;发生变化&amp;lt;/strong&amp;gt;的点的相邻边执行松弛操作。&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;方案：队列维护。&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;具体操作&amp;lt;/strong&amp;gt;：&amp;lt;/p&amp;gt;
&amp;lt;ol&amp;gt;
&amp;lt;li&amp;gt;起点加入队列，松弛和起点相连的所有边。若松弛成功且该点不在队列中，入队&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;依次取出队列中的每一个点松弛直到队列空&amp;lt;/li&amp;gt;
&amp;lt;/ol&amp;gt;
&amp;lt;div class=&amp;#34;highlight&amp;#34;&amp;gt;&amp;lt;div class=&amp;#34;chroma&amp;#34;&amp;gt;
&amp;lt;table class=&amp;#34;lntable&amp;#34;&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td class=&amp;#34;lntd&amp;#34;&amp;gt;
&amp;lt;pre tabindex=&amp;#34;0&amp;#34; class=&amp;#34;chroma&amp;#34;&amp;gt;&amp;lt;code&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 1
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 2
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 3
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 4
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 5
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 6
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 7
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 8
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 9
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;10
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;11
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;12
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;13
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;14
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;15
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;16
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;17
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;18
&amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;#34;lntd&amp;#34;&amp;gt;
&amp;lt;pre tabindex=&amp;#34;0&amp;#34; class=&amp;#34;chroma&amp;#34;&amp;gt;&amp;lt;code class=&amp;#34;language-cpp&amp;#34; data-lang=&amp;#34;cpp&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;void&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;nf&amp;#34;&amp;gt;spfa&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;u&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;{&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;q&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;push&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;u&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;);&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;vis&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;u&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;]&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;c1&amp;#34;&amp;gt;// 注意：vis 判断是否在队列中
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;while&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;!&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;q&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;empty&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;())&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;{&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;x&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;q&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;front&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;();&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;q&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;pop&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;();&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;vis&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;x&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;]&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;0&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;c1&amp;#34;&amp;gt;// 移除后允许再次入队
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;for&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;head&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;x&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;];&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;edge&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;].&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;next&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;{&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;y&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;edge&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;].&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;to&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;if&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;dist&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;x&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;]&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;+&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;edge&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;].&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;dis&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;lt;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;dist&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;y&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;])&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;{&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;dist&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;y&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;]&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;dist&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;x&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;]&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;+&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;edge&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;].&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;dis&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;if&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;!&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;vis&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;y&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;])&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;{&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;vis&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;y&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;]&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;q&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;push&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;y&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;);&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;}&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;}&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;}&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;}&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;}&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;&amp;lt;h3 id=&amp;#34;最短路径算法总结&amp;#34;&amp;gt;最短路径算法总结
&amp;lt;/h3&amp;gt;&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;时间复杂度对比：&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;div class=&amp;#34;highlight&amp;#34;&amp;gt;&amp;lt;div class=&amp;#34;chroma&amp;#34;&amp;gt;
&amp;lt;table class=&amp;#34;lntable&amp;#34;&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td class=&amp;#34;lntd&amp;#34;&amp;gt;
&amp;lt;pre tabindex=&amp;#34;0&amp;#34; class=&amp;#34;chroma&amp;#34;&amp;gt;&amp;lt;code&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;1
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;2
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;3
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;4
&amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;#34;lntd&amp;#34;&amp;gt;
&amp;lt;pre tabindex=&amp;#34;0&amp;#34; class=&amp;#34;chroma&amp;#34;&amp;gt;&amp;lt;code class=&amp;#34;language-fallback&amp;#34; data-lang=&amp;#34;fallback&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;速度（快 → 慢）
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;堆 Dijkstra &amp;amp;gt; SPFA(平均) &amp;amp;gt; 朴素 Dijkstra &amp;amp;gt; Floyd / Bellman-Ford(最坏)
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;O((V+E)log V) O(E) O(V²) O(V³) / O(V×E)
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;算法选择指南：&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;table&amp;gt;
&amp;lt;thead&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;th&amp;gt;场景&amp;lt;/th&amp;gt;
&amp;lt;th&amp;gt;推荐算法&amp;lt;/th&amp;gt;
&amp;lt;th&amp;gt;理由&amp;lt;/th&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/thead&amp;gt;
&amp;lt;tbody&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td&amp;gt;稠密图、V ≤ 2000、无负权&amp;lt;/td&amp;gt;
&amp;lt;td&amp;gt;&amp;lt;strong&amp;gt;朴素 Dijkstra&amp;lt;/strong&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td&amp;gt;O(V²) 比堆优化常数小&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td&amp;gt;稀疏图、大 V（10⁵）、无负权&amp;lt;/td&amp;gt;
&amp;lt;td&amp;gt;&amp;lt;strong&amp;gt;堆优化 Dijkstra&amp;lt;/strong&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td&amp;gt;O((V+E) log V)&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td&amp;gt;V ≤ 400、需要所有点对&amp;lt;/td&amp;gt;
&amp;lt;td&amp;gt;&amp;lt;strong&amp;gt;Floyd&amp;lt;/strong&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td&amp;gt;实现简单，V³ 可接受&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td&amp;gt;边数少、有负权但无负环&amp;lt;/td&amp;gt;
&amp;lt;td&amp;gt;&amp;lt;strong&amp;gt;SPFA&amp;lt;/strong&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td&amp;gt;平均很快，代码不长&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td&amp;gt;需要保证最坏情况稳定、有负权&amp;lt;/td&amp;gt;
&amp;lt;td&amp;gt;&amp;lt;strong&amp;gt;Bellman-Ford&amp;lt;/strong&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td&amp;gt;不怕被卡数据&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td&amp;gt;必须检测负环&amp;lt;/td&amp;gt;
&amp;lt;td&amp;gt;&amp;lt;strong&amp;gt;Bellman-Ford / SPFA&amp;lt;/strong&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td&amp;gt;两者均可检测&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/tbody&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;速查口诀：&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;无负权、稀疏图 → 堆优化的 Dijkstra&amp;lt;/strong&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;无负权、稠密图 → 朴素 Dijkstra&amp;lt;/strong&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;全源最短路、小图 → Floyd&amp;lt;/strong&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;有负权、要稳定 → Bellman-Ford&amp;lt;/strong&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;有负权、要速度 → SPFA&amp;lt;/strong&amp;gt;（可能被卡）&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;h3 id=&amp;#34;map-应用示例&amp;#34;&amp;gt;map 应用示例
&amp;lt;/h3&amp;gt;&amp;lt;p&amp;gt;有时出现&amp;amp;quot;杭州&amp;amp;quot;等不便构建邻接矩阵的字符串类型输入，用 &amp;lt;code&amp;gt;map&amp;lt;/code&amp;gt; 映射：&amp;lt;/p&amp;gt;
&amp;lt;div class=&amp;#34;highlight&amp;#34;&amp;gt;&amp;lt;div class=&amp;#34;chroma&amp;#34;&amp;gt;
&amp;lt;table class=&amp;#34;lntable&amp;#34;&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td class=&amp;#34;lntd&amp;#34;&amp;gt;
&amp;lt;pre tabindex=&amp;#34;0&amp;#34; class=&amp;#34;chroma&amp;#34;&amp;gt;&amp;lt;code&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 1
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 2
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 3
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 4
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 5
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 6
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 7
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 8
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt; 9
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;10
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;11
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;12
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;lnt&amp;#34;&amp;gt;13
&amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;#34;lntd&amp;#34;&amp;gt;
&amp;lt;pre tabindex=&amp;#34;0&amp;#34; class=&amp;#34;chroma&amp;#34;&amp;gt;&amp;lt;code class=&amp;#34;language-cpp&amp;#34; data-lang=&amp;#34;cpp&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;map&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;lt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;string&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;m1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;for&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;mi&amp;#34;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;lt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;n&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;++&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;{&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;string&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;s&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;cin&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;s&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;m1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;s&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;]&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;}&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;cin&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;m&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;k&amp;#34;&amp;gt;while&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;m&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;--&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;{&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;string&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;s1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;s2&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;num&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;cin&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;s1&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;num&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;s2&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;kt&amp;#34;&amp;gt;int&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;from&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;m1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;s1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;],&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;to&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;m1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;s2&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;];&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;dis&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;from&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;][&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;to&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;]&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;o&amp;#34;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;#34;n&amp;#34;&amp;gt;num&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#34;line&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;cl&amp;#34;&amp;gt;&amp;lt;span class=&amp;#34;p&amp;#34;&amp;gt;}&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;&amp;lt;hr&amp;gt;
&amp;lt;blockquote&amp;gt;
&amp;lt;p&amp;gt;本文所有代码模板已整理为独立板子速查表，方便用时直接复制使用：&amp;lt;a class=&amp;#34;link&amp;#34; href=&amp;#34;../cheatsheet-cpp/&amp;#34; &amp;gt;竞赛代码板子速查 →&amp;lt;/a&amp;gt;
&amp;lt;/p&amp;gt;
&amp;lt;/blockquote&amp;gt;</description></item></channel></rss>