<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <author>
    <name>Dytchem</name>
  </author>
  <generator uri="https://hexo.io/">Hexo</generator>
  <id>https://hexo.dytchem.cn/</id>
  <link href="https://hexo.dytchem.cn/" rel="alternate"/>
  <link href="https://hexo.dytchem.cn/atom.xml" rel="self"/>
  <rights>All rights reserved 2026, Dytchem</rights>
  <subtitle>Dycthem的个人博客 - 数学·物理·计算机科学</subtitle>
  <title>Dycthem's Blog</title>
  <updated>2026-07-18T12:12:38.392Z</updated>
  <entry>
    <author>
      <name>Dytchem</name>
    </author>
    <id>https://hexo.dytchem.cn/2025/03/22/test004/</id>
    <link href="https://hexo.dytchem.cn/2025/03/22/test004/"/>
    <published>2025-03-22T02:22:52.000Z</published>
    <title>test004</title>
    <updated>2026-07-18T12:12:38.392Z</updated>
  </entry>
  <entry>
    <author>
      <name>Dytchem</name>
    </author>
    <category term="physics" scheme="https://hexo.dytchem.cn/categories/physics/"/>
    <category term="光学" scheme="https://hexo.dytchem.cn/tags/%E5%85%89%E5%AD%A6/"/>
    <content>
      <![CDATA[<h1id="标量衍射理论-相干光场在自由空间中传播衍射的数值计算fft">标量衍射理论—— 相干光场在自由空间中传播衍射的数值计算（FFT）</h1><p><ahref="https://www.mathworks.com/matlabcentral/fileexchange/180450-diffraction-calculation"><imgsrc="https://www.mathworks.com/matlabcentral/images/matlab-file-exchange.svg"alt="View Diffraction-Calculation on File Exchange" /></a></p><p><ahref="https://hexo.dytchem.cn/2025/03/22/Diffraction-Calculation/">其他渠道查看此页</a></p><hr /><ul><li>创新点</li></ul><p>本项目实现了更一般情况下的快速离散傅里叶变换（DFT），</p><p><span class="math display">\[Y_q=\sum_{p=0}^{n-1}{X_p\mathrm{e}^{-\mathrm{i}2\pi kpq}}\,\,\left( k\in\mathbb{R} \right)\]</span></p><p><a href="#dft-section">跳转到DFT计算</a></p><p>进而实现了更方便易用的连续傅里叶变换（FT）积分数值计算算法。</p><p>该算法不用限制原函数与像函数的网格尺寸，实现了针对任意区域任意精度的目标像函数计算。</p><p>（详见<a href="myFFT1.m">myFFT1.m</a>和<ahref="myFFT2.m">myFFT2.m</a>）</p><hr /><h2 id="四种衍射积分形式">四种衍射积分形式</h2><ul><li>基尔霍夫衍射初步近似（简单离散积分）</li></ul><p><span class="math display">\[U\left( x,y \right) =\frac{1}{\mathrm{j}\lambdaz}\iint_{-\infty}^{+\infty}{U_0\left( x_0,y_0 \right)\mathrm{e}^{\mathrm{j}k\sqrt{z^2+\left( x-x_0 \right) ^2+\left( y-y_0\right) ^2}}\mathrm{d}x_0\mathrm{d}y_0}\]</span></p><ul><li>菲涅尔衍射（简单离散积分 or 快速傅里叶变换快速卷积）</li></ul><p><span class="math display">\[U\left( x,y \right) =\frac{\mathrm{e}^{\mathrm{j}kz}}{\mathrm{j}\lambdaz}\iint_{-\infty}^{+\infty}{U_0\left( x_0,y_0 \right)\mathrm{e}^{\mathrm{j}k\frac{\left( x-x_0 \right) ^2+\left( y-y_0\right) ^2}{2z}}\mathrm{d}x_0\mathrm{d}y_0}\]</span></p><ul><li>夫琅禾费衍射（简单离散积分 or 快速傅里叶变换快速卷积）</li></ul><p><span class="math display">\[U\left( x,y \right) =\frac{\mathrm{e}^{\mathrm{j}kz}}{\mathrm{j}\lambdaz}e^{\mathrm{j}\frac{k}{2z}\left( x^2+y^2\right)}\iint_{-\infty}^{+\infty}{U_0\left( x_0,y_0 \right)\mathrm{e}^{-\mathrm{j}\frac{k}{z}\left( x_0x+y_0y\right)}\mathrm{d}x_0\mathrm{d}y_0}\]</span></p><ul><li>角谱传播公式（快速傅里叶变换快速卷积）</li></ul><p><span class="math display">\[\left\{ \begin{aligned}A_0\left( \xi ,\eta \right) &amp;=\iint_{-\infty}^{+\infty}{U_0\left(x_0,y_0 \right) \mathrm{e}^{-\mathrm{j}2\pi \left( \xi x_0+\eta y_0\right)}\mathrm{d}x_0\mathrm{d}y_0}\\A\left( \xi ,\eta \right) &amp;=A_0\left( \xi _0,\eta _0 \right)e^{\mathrm{j}kz\sqrt{1-\left( \lambda \xi \right) ^2-\left( \lambda \eta\right) ^2}}\\U\left( x,y \right) &amp;=\iint_{-\infty}^{+\infty}{A\left( \xi ,\eta\right) \mathrm{e}^{\mathrm{j}2\pi \left( \xi x+\eta y\right)}\mathrm{d}\xi \mathrm{d}\eta}\\\end{aligned} \right.\]</span></p><hr /><h2 id="两种积分运算方式">两种积分运算方式</h2><ul><li>简单离散积分</li></ul><p>时间复杂度<span class="math inline">\(O(N^2)\)</span></p><ul><li>快速傅里叶变换快速卷积</li></ul><p><span class="math display">\[\begin{cases}F\left( x \right)\\=\int_{-\infty}^{+\infty}{f\left( x_0 \right)\mathrm{e}^{-\mathrm{j}2\pi x_0x}\mathrm{d}x_0}\\=\frac{x_{\max}-x_{\min}}{m-1}\sum_{i=0}^{m-1}{f\left(\frac{x_{\max}-x_{\min}}{m-1}i+x_{\min} \right)\mathrm{e}^{-\mathrm{j}2\pi \left(\frac{x_{\max}-x_{\min}}{m-1}i+x_{\min} \right) \left(\frac{X_{\max}-X_{\min}}{M-1}I+X_{\min} \right)}}\\=A\sum_i^{m-1}{f\left( Ai+x_{\min} \right) \mathrm{e}^{-\mathrm{j}2\pi\left( BiI+Ci+DI+E \right)}}\\=A\left\{ \sum_i^{m-1}{\left[ f\left( Ai+x_{\min} \right)\mathrm{e}^{-\mathrm{j}2\pi Ci} \right] \mathrm{e}^{-\mathrm{j}2\piBiI}} \right\} \mathrm{e}^{-\mathrm{j}2\pi \left( DI+E \right)}\\=...\\\end{cases}\]</span></p><p><span id="dft-section"></span>最后，一般情况下的离散傅里叶变换（DFT）计算如下：</p><p><span class="math display">\[\begin{cases}Y_q=\sum_{p=0}^{n-1}{X_p\mathrm{e}^{-\mathrm{i}2\pi kpq}}\,\,\left( k\in\mathbb{R} \right)\\=\sum_{p=0}^{n-1}{X_p\mathrm{e}^{\mathrm{i}\pi k\left[ \left( p-q\right) ^2-p^2-q^2 \right]}}\\=\left[ \sum_{p=0}^{n-1}{X_p\mathrm{e}^{-\mathrm{i}\pikp^2}\mathrm{e}^{\mathrm{i}\pi k\left( p-q \right) ^2}} \right]\mathrm{e}^{-\mathrm{i}\pi kq^2}\\=\left( X_p\mathrm{e}^{-\mathrm{i}\pi kp^2}*\mathrm{e}^{\mathrm{i}\pikp^2} \right) \mathrm{e}^{-\mathrm{i}\pi kq^2}\\=\mathscr{F} ^{-1}\left\{ \mathscr{F} \left\{X_p\mathrm{e}^{-\mathrm{i}\pi kp^2}*\mathrm{e}^{\mathrm{i}\pi kp^2}\right\} \right\} \mathrm{e}^{-\mathrm{i}\pi kq^2}\\=\mathscr{F} ^{-1}\left\{ \mathscr{F} \left\{X_p\mathrm{e}^{-\mathrm{i}\pi kp^2} \right\} \mathscr{F} \left\{\mathrm{e}^{\mathrm{i}\pi kp^2} \right\} \right\}\mathrm{e}^{-\mathrm{i}\pi kq^2}\\\end{cases}\]</span></p><p>时间复杂度<spanclass="math inline">\(Nlog(N)\)</span>，显著优于简单离散积分</p><p>代码请见 <a href="myFFT1.m">myFFT1.m</a> 和 <ahref="myFFT2.m">myFFT2.m</a></p><hr /><h2 id="效率对比">效率对比</h2><ul><li><a href="task1_1.m">32*32</a></li></ul><figure><img src="src/task1.png" alt="32*32" /><figcaption aria-hidden="true">32*32</figcaption></figure><ul><li><a href="task2_1.m">128*128</a></li></ul><figure><img src="src/task2_1.png" alt="128*128" /><figcaption aria-hidden="true">128*128</figcaption></figure><ul><li><p><a href="task2_2.m">1024*1024</a> （简单离散积分无法跑出） <imgsrc="src/task2_2.png" alt="1024*1024" /></p></li><li><p><a href="task2_3.m">角谱传播 1024*1024</a> <imgsrc="src/task2_3.png" alt="1024*1024" /></p></li></ul><hr /><h2 id="衍射样例">衍射样例</h2><ul><li><a href="task3_1.m">双缝干涉</a></li></ul><p><img src="src/task3_1.png" alt="双缝干涉初始光场" /> <imgsrc="src/task3_2.png" alt="双缝干涉衍射光场" /> <imgsrc="src/task3_3.png" alt="双缝干涉衍射光场" /></p><ul><li><a href="task4_1.m">振幅型余弦光栅</a></li></ul><p><img src="src/task4_1.png" alt="振幅型余弦光栅初始光场" /> <imgsrc="src/task4_2.png" alt="振幅型余弦光栅衍射光场" /> <imgsrc="src/task4_3.png" alt="振幅型余弦光栅衍射光场" /></p><ul><li><a href="task5_1.m">泊松亮斑</a></li></ul><p><img src="src/task5_1.png" alt="泊松亮斑初始光场" /> <imgsrc="src/task5_2.png" alt="泊松亮斑衍射光场" /> <imgsrc="src/task5_3.png" alt="泊松亮斑衍射光场" /></p><ul><li><a href="task6_1.m">高斯拉盖尔光束</a></li></ul><p>$ l = 5$</p><p><img src="src/task6_1.png" alt="高斯拉盖尔光束初始光场" /> <imgsrc="src/task6_2.png" alt="高斯拉盖尔光束初始光场" /> <imgsrc="src/task6_3.png" alt="高斯拉盖尔光束衍射光场" /> <imgsrc="src/task6_4.png" alt="高斯拉盖尔光束衍射光场" /></p><hr /><h2 id="理论---数值-验证">理论 - 数值 验证</h2><ul><li>矩形孔的衍射（<a href="test1.m">理论计算 vs 数值计算</a>）</li></ul><p><img src="src/test1_1.png" alt="理论" /> <img src="src/test1_2.png"alt="数值" /></p><ul><li>圆孔的衍射（<a href="test2.m">理论计算 vs 数值计算</a>）</li></ul><p><img src="src/test2_1.png" alt="理论" /> <img src="src/test2_2.png"alt="数值" /></p>]]>
    </content>
    <id>https://hexo.dytchem.cn/2025/03/22/Diffraction-Calculation/</id>
    <link href="https://hexo.dytchem.cn/2025/03/22/Diffraction-Calculation/"/>
    <published>2025-03-22T02:01:46.000Z</published>
    <summary>
      <![CDATA[<h1
id="标量衍射理论-相干光场在自由空间中传播衍射的数值计算fft">标量衍射理论
——]]>
    </summary>
    <title>Diffraction-Calculation</title>
    <updated>2026-07-18T12:12:38.383Z</updated>
  </entry>
  <entry>
    <author>
      <name>Dytchem</name>
    </author>
    <category term="rests" scheme="https://hexo.dytchem.cn/categories/rests/"/>
    <category term="情感" scheme="https://hexo.dytchem.cn/tags/%E6%83%85%E6%84%9F/"/>
    <content>
      <![CDATA[<p>0625 我在吐露什么</p><p>1018 我在痛苦什么</p><p>0705 我在窃喜什么</p><p>1206 我在挽回什么</p><p>0611 我在坦白什么</p><p>0728 我在追求什么</p><p>……</p><p>致敬那份从未消逝的喜欢❤️</p>]]>
    </content>
    <id>https://hexo.dytchem.cn/2024/08/26/love001/</id>
    <link href="https://hexo.dytchem.cn/2024/08/26/love001/"/>
    <published>2024-08-26T08:33:39.000Z</published>
    <summary>
      <![CDATA[<p>0625 我在吐露什么</p>
<p>1018 我在痛苦什么</p>
<p>0705 我在窃喜什么</p>
<p>1206 我在挽回什么</p>
<p>0611 我在坦白什么</p>
<p>0728]]>
    </summary>
    <title>致敬那份从未消逝的喜欢</title>
    <updated>2026-07-18T12:12:38.386Z</updated>
  </entry>
  <entry>
    <author>
      <name>Dytchem</name>
    </author>
    <category term="maths" scheme="https://hexo.dytchem.cn/categories/maths/"/>
    <category term="不等式" scheme="https://hexo.dytchem.cn/tags/%E4%B8%8D%E7%AD%89%E5%BC%8F/"/>
    <content>
      <![CDATA[<h2 id="定理与证明">定理与证明</h2><p><strong>定理（幂序不等式）.</strong> 设 <spanclass="math inline">\(k_i&gt;0,\;x_i&gt;0\)</span> 且 <spanclass="math inline">\(x_i\neq1\;(i=1,\dots,n)\)</span>，定义函数</p><p><span class="math display">\[f(t)=\sum_{i=1}^n k_i x_i^t\]</span></p><p>则 <span class="math inline">\(f(t)\)</span> 在 <spanclass="math inline">\(\mathbb R\)</span> 上是严格凸函数。因此 <spanclass="math inline">\(f\)</span>要么单调，要么先减后增——恰有一个极小值点。</p><p>具体而言，任取 <spanclass="math inline">\(a&lt;b&lt;c&lt;d\)</span>，有：</p><ol type="1"><li>若 <span class="math inline">\(f(a)\le f(c)\)</span>，则 <spanclass="math inline">\(f(b)\le f(c)\le f(d)\)</span>；</li><li>若 <span class="math inline">\(f(b)\ge f(d)\)</span>，则 <spanclass="math inline">\(f(a)\ge f(b)\ge f(c)\)</span>。</li></ol><p><strong>证明.</strong> 记 <span class="math inline">\(\alpha_i=\lnx_i\)</span>，则 <span class="math inline">\(x_i^t=e^{\alpha_it}\)</span>。计算一、二阶导数：</p><p><span class="math display">\[f&#39;(t)=\sum k_i\alpha_i e^{\alpha_i t},\qquadf&#39;&#39;(t)=\sum k_i\alpha_i^2 e^{\alpha_i t}\]</span></p><p>因 <span class="math inline">\(k_i&gt;0\)</span>、<spanclass="math inline">\(e^{\alpha_i t}&gt;0\)</span> 且至少有一个 <spanclass="math inline">\(x_i\neq1\)</span>（即 <spanclass="math inline">\(\alpha_i\neq0\)</span>），故 <spanclass="math inline">\(f&#39;&#39;(t)&gt;0\)</span> 恒成立，<spanclass="math inline">\(f\)</span>严格凸。以上两条结论均为凸性的直接推论。<spanclass="math inline">\(\square\)</span></p><blockquote><p><strong>注.</strong> 若所有 <spanclass="math inline">\(x_i&gt;1\)</span>，则 <spanclass="math inline">\(f\)</span> 严格递增；若所有 <spanclass="math inline">\(x_i&lt;1\)</span>，则 <spanclass="math inline">\(f\)</span> 严格递减；若兼而有之，则 <spanclass="math inline">\(f\)</span> 先减后增。</p></blockquote><hr /><h2 id="不等式证明">不等式证明</h2><h3 id="划分思想">划分思想</h3><p>以幂平均不等式的证明为例，说明如何利用幂序不等式。</p><p>幂序不等式断言：形如 <span class="math inline">\(f(t)=\sum k_ix_i^t\)</span> 的函数是严格凸的。若再满足 <spanclass="math inline">\(f(0)=f(s)\)</span>，则 <spanclass="math inline">\(f\)</span> 在 <spanclass="math inline">\(0\)</span> 与 <spanclass="math inline">\(s\)</span> 处取值相等，由凸性可知——对于 <spanclass="math inline">\(0&lt;r&lt;s\)</span> 有 <spanclass="math inline">\(f(r)\le f(0)=f(s)\)</span>；对于 <spanclass="math inline">\(r&lt;0\)</span> 有 <spanclass="math inline">\(f(r)\ge f(0)=f(s)\)</span>。</p><p>若要证明 <span class="math inline">\(M_r\le M_s\)</span>，可尝试构造<span class="math inline">\(f(t)=\sum k_i x_i^t\)</span> 使其满足 <spanclass="math inline">\(f(0)=f(s)\)</span>，然后将 <spanclass="math inline">\(f(r)\)</span> 与 <spanclass="math inline">\(M_r\)</span>、<spanclass="math inline">\(M_s\)</span> 相关联。一旦建立这种关联，凸性给出的<span class="math inline">\(f(r)\)</span> 与端点值的大小关系便可转化为<span class="math inline">\(M_r\)</span> 与 <spanclass="math inline">\(M_s\)</span> 的大小关系。</p><p>因此核心问题在于：<strong>如何选择 <spanclass="math inline">\(k_i\)</span> 和 <spanclass="math inline">\(x_i\)</span>，使 <spanclass="math inline">\(f(0)=f(s)\)</span> 成立，同时 <spanclass="math inline">\(f(r)\)</span> 能表达 <spanclass="math inline">\(M_r\)</span>？</strong>下面通过三个尝试来探索。</p><p><strong>尝试一.</strong> 取 <spanclass="math inline">\(k_i=1/n\)</span>、<spanclass="math inline">\(x_i=a_i\)</span>，则 <spanclass="math inline">\(f(t)=\frac1n\sum a_i^t\)</span>。此时 <spanclass="math inline">\(f(0)=1\)</span>，而 <spanclass="math inline">\(f(s)=M_s^s\neq1\)</span>（除非 <spanclass="math inline">\(M_s=1\)</span>），不满足条件。</p><p><strong>尝试二.</strong> 保留 <spanclass="math inline">\(x_i=a_i\)</span>，调整 <spanclass="math inline">\(k_i\)</span>。条件 <spanclass="math inline">\(f(0)=f(s)\)</span> 给出 <spanclass="math inline">\(\sum k_i=\sum k_i a_i^s\)</span>，即 <spanclass="math inline">\(\sum k_i(1-a_i^s)=0\)</span>。这需针对 <spanclass="math inline">\(a_i\)</span> 解出 <spanclass="math inline">\(k_i\)</span>，运算繁琐。</p><p><strong>尝试三.</strong> 取 <spanclass="math inline">\(k_i=1/n\)</span>，调整 <spanclass="math inline">\(x_i\)</span>。设 <spanclass="math inline">\(x_i=a_i/M\)</span>，则 <spanclass="math inline">\(f(t)=\frac1n\sum (a_i/M)^t\)</span>。此时</p><p><span class="math display">\[f(0)=\frac1n\sum 1=1,\qquadf(s)=\frac1n\sum\left(\frac{a_i}{M}\right)^{\!s}\]</span></p><p>条件 <span class="math inline">\(f(0)=f(s)\)</span> 给出 <spanclass="math inline">\(\frac1n\sum(a_i/M)^s=1\)</span>，即 <spanclass="math inline">\(M^s=\frac1n\sum a_i^s\)</span>。记 <spanclass="math inline">\(C=\frac1n\sum a_i^s\)</span>，则 <spanclass="math inline">\(M=C^{1/s}\)</span>——正是 <spanclass="math inline">\(M_s\)</span>。</p><p>至此得到正确的构造：<spanclass="math inline">\(f(t)=\frac1n\sum(a_i/M_s)^t\)</span>。注意 <spanclass="math inline">\(M_s\)</span>是推导的结果，而非前提。下面直接用此形式证明。</p><hr /><h3 id="一幂平均不等式">一、幂平均不等式</h3><p><strong>幂平均不等式（Power Mean Inequality）.</strong> 对正实数<span class="math inline">\(a_1,\dots,a_n\)</span> 及实数 <spanclass="math inline">\(r&lt;s\)</span>，有</p><p><span class="math display">\[M_r\le M_s,\qquadM_t=\left(\frac1n\sum_{i=1}^n a_i^{\,t}\right)^{\!1/t}\;(t\neq0),\quad M_0=\Bigl(\prod_{i=1}^n a_i\Bigr)^{\!1/n}\]</span></p><p>即幂平均函数 <span class="math inline">\(t\mapsto M_t\)</span> 关于<span class="math inline">\(t\)</span> 单调递增。</p><p><strong>证明.</strong> 不妨设 <spanclass="math inline">\(s&gt;0\)</span>（<spanclass="math inline">\(s&lt;0\)</span> 的情形同理）。以 <spanclass="math inline">\(M_s\)</span> 为基准，引入规范化辅助函数</p><p><span class="math display">\[f(t)=\frac1n\sum_{i=1}^n\left(\frac{a_i}{M_s}\right)^{\!t}\]</span></p><p>直接验证 <span class="math inline">\(f(0)=f(s)=1\)</span>。<spanclass="math inline">\(f\)</span> 具有幂序不等式的标准形式（<spanclass="math inline">\(k_i=1/n\)</span>，<spanclass="math inline">\(x_i=a_i/M_s\)</span>），故 <spanclass="math inline">\(f\)</span> 在 <span class="math inline">\(\mathbbR\)</span> 上严格凸。</p><p>将 <span class="math inline">\(M_r\)</span> 用 <spanclass="math inline">\(f(r)\)</span> 表示：</p><p><span class="math display">\[M_r=\left(\frac1n\sum a_i^r\right)^{\!1/r}=M_s\cdot\left(\frac1n\sum\left(\frac{a_i}{M_s}\right)^{\!r}\right)^{\!1/r}=M_s\cdot f(r)^{1/r}\]</span></p><p>于是 <span class="math inline">\(M_r\le M_s\)</span> 等价于 <spanclass="math inline">\(f(r)^{1/r}\le1\)</span>。由 <spanclass="math inline">\(f\)</span> 的严格凸性及 <spanclass="math inline">\(f(0)=f(s)\)</span> 可得：</p><ul><li>若 <span class="math inline">\(0&lt;r&lt;s\)</span>，则 <spanclass="math inline">\(f(r)\le1\)</span>，又 <spanclass="math inline">\(1/r&gt;0\)</span>，故 <spanclass="math inline">\(f(r)^{1/r}\le1\)</span>；</li><li>若 <span class="math inline">\(r&lt;0\)</span>，则 <spanclass="math inline">\(f(r)\ge1\)</span>，但 <spanclass="math inline">\(1/r&lt;0\)</span>，故 <spanclass="math inline">\(f(r)^{1/r}\le1\)</span>。</li></ul><p>两种情形均有 <span class="math inline">\(f(r)^{1/r}\le1\)</span>，即<span class="math inline">\(M_r\le M_s\)</span>。等号成立当且仅当诸<span class="math inline">\(a_i\)</span> 全相等。<spanclass="math inline">\(\square\)</span></p><hr /><h3 id="二加权幂平均不等式">二、加权幂平均不等式</h3><p><strong>加权幂平均不等式（Weighted Power Mean Inequality）.</strong>设 <span class="math inline">\(w_1,\dots,w_n&gt;0\)</span> 且 <spanclass="math inline">\(\sum w_i=1\)</span>，则对 <spanclass="math inline">\(r&lt;s\)</span> 有</p><p><span class="math display">\[M_r\le M_s,\qquad M_t=\Bigl(\sum w_i a_i^{\,t}\Bigr)^{\!1/t}\]</span></p><p><strong>证明.</strong> 以 <span class="math inline">\(M_s\)</span>为基准，引入规范化辅助函数</p><p><span class="math display">\[f(t)=\sum w_i\left(\frac{a_i}{M_s}\right)^{\!t}\]</span></p><p>则 <span class="math inline">\(f(0)=\sum w_i=1\)</span>，<spanclass="math inline">\(f(s)=\displaystyle\sumw_i\frac{a_i^s}{M_s^s}=1\)</span>。<spanclass="math inline">\(f\)</span> 具有幂序不等式的标准形式（<spanclass="math inline">\(k_i=w_i\)</span>，<spanclass="math inline">\(x_i=a_i/M_s\)</span>），故严格凸。</p><p>将 <span class="math inline">\(M_r\)</span> 用 <spanclass="math inline">\(f(r)\)</span> 表示：</p><p><span class="math display">\[M_r=\Bigl(\sum w_i a_i^r\Bigr)^{\!1/r}=M_s\cdot\Bigl(\sumw_i\Bigl(\frac{a_i}{M_s}\Bigr)^{\!r}\Bigr)^{\!1/r}=M_s\cdot f(r)^{1/r}\]</span></p><p>由 <span class="math inline">\(f(0)=f(s)\)</span> 及 <spanclass="math inline">\(f\)</span> 的严格凸性：</p><ul><li>若 <span class="math inline">\(0&lt;r&lt;s\)</span>，则 <spanclass="math inline">\(f(r)\le1\)</span>，又 <spanclass="math inline">\(1/r&gt;0\)</span>，故 <spanclass="math inline">\(f(r)^{1/r}\le1\)</span>；</li><li>若 <span class="math inline">\(r&lt;0\)</span>，则 <spanclass="math inline">\(f(r)\ge1\)</span>，但 <spanclass="math inline">\(1/r&lt;0\)</span>，故 <spanclass="math inline">\(f(r)^{1/r}\le1\)</span>。</li></ul><p>因此总有 <span class="math inline">\(M_r\leM_s\)</span>。等号成立当且仅当诸 <spanclass="math inline">\(a_i\)</span> 全相等。<spanclass="math inline">\(\square\)</span></p><blockquote><p><strong>注.</strong> 当 <span class="math inline">\(w_i=1/n\)</span>时退化为经典的幂平均不等式。</p></blockquote><hr /><h3 id="三赫尔德不等式">三、赫尔德不等式</h3><p><strong>赫尔德不等式（Hölder Inequality）.</strong> 设 <spanclass="math inline">\(p,q&gt;1\)</span>，<spanclass="math inline">\(\dfrac1p+\dfrac1q=1\)</span>，则</p><p><span class="math display">\[\sum_{i=1}^n |x_i y_i|\le\Bigl(\sum_{i=1}^n|x_i|^p\Bigr)^{\!1/p}\Bigl(\sum_{i=1}^n |y_i|^q\Bigr)^{\!1/q}\]</span></p><p><strong>证明.</strong> 令 <spanclass="math inline">\(A=\sum|x_i|^p\)</span>、<spanclass="math inline">\(B=\sum|y_i|^q\)</span>，构造辅助函数</p><p><span class="math display">\[f(t)=\sum_{i=1}^n\left(\frac{|x_i|^p}{A}\right)^{\!t}\left(\frac{|y_i|^q}{B}\right)^{\!1-t}\]</span></p><p>易得</p><p><span class="math display">\[f(0)=\sum\frac{|y_i|^q}{B}=1,\qquad f(1)=\sum\frac{|x_i|^p}{A}=1\]</span></p><p>将 <span class="math inline">\(f(t)\)</span>改写为幂序不等式的标准形式：</p><p><span class="math display">\[f(t)=\sum_{i=1}^n\frac{|y_i|^q}{B}\cdot\left(\frac{|x_i|^pB}{|y_i|^qA}\right)^{\!t}\]</span></p><p>即 <span class="math inline">\(k_i=|y_i|^q/B\)</span>、<spanclass="math inline">\(x_i=|x_i|^pB/|y_i|^qA\)</span>。由幂序不等式知<span class="math inline">\(f\)</span> 在 <spanclass="math inline">\(\mathbb R\)</span> 上严格凸。</p><p>对满足 <span class="math inline">\(f(0)=f(1)=1\)</span>的严格凸函数，在区间 <span class="math inline">\([0,1]\)</span> 上恒有<span class="math inline">\(f(t)\le1\)</span>。特别地，取 <spanclass="math inline">\(t=1/p\)</span> 得</p><p><span class="math display">\[f\!\left(\frac1p\right)=\sum\left(\frac{|x_i|^p}{A}\right)^{\!1/p}\left(\frac{|y_i|^q}{B}\right)^{\!1/q}\le1\]</span></p><p>即</p><p><span class="math display">\[\sum|x_i y_i|\le A^{1/p}B^{1/q}=\Bigl(\sum|x_i|^p\Bigr)^{\!1/p}\Bigl(\sum|y_i|^q\Bigr)^{\!1/q}\]</span></p><p><span class="math inline">\(\square\)</span></p><hr /><h2 id="总结">总结</h2><p>幂序不等式的核心洞察是：<strong>形如 <span class="math inline">\(\sumk_i x_i^t\)</span>的函数具有严格凸性，因此其单调行为至多只有一个极小值点。</strong>利用此性质，构造满足 <span class="math inline">\(f(0)=f(s)\)</span>的辅助函数，即可统一证明如下经典不等式。</p><table><colgroup><col style="width: 19%" /><col style="width: 38%" /><col style="width: 42%" /></colgroup><thead><tr class="header"><th>不等式</th><th>辅助函数 <span class="math inline">\(f(t)\)</span></th><th>条件 <span class="math inline">\(f(0)=f(s)\)</span></th></tr></thead><tbody><tr class="odd"><td>幂平均不等式</td><td><spanclass="math inline">\(\displaystyle\frac1n\sum\bigl(\frac{a_i}{M_s}\bigr)^t\)</span></td><td><span class="math inline">\(f(0)=f(s)=1\)</span></td></tr><tr class="even"><td>加权幂平均不等式</td><td><span class="math inline">\(\displaystyle\sumw_i\bigl(\frac{a_i}{M_s}\bigr)^t\)</span></td><td><span class="math inline">\(f(0)=f(s)=1\)</span></td></tr><tr class="odd"><td>赫尔德不等式</td><td><spanclass="math inline">\(\displaystyle\sum\bigl(\frac{|x_i|^p}{A}\bigr)^t\bigl(\frac{|y_i|^q}{B}\bigr)^{1-t}\)</span></td><td><span class="math inline">\(f(0)=f(1)=1\)</span></td></tr></tbody></table><p>这一方法的步骤是：</p><ol type="1"><li><strong>构造函数</strong> <span class="math inline">\(f(t)=\sum k_ix_i^t\)</span>，使其具有幂序不等式的标准形式；</li><li><strong>施加条件</strong> <spanclass="math inline">\(f(0)=f(s)\)</span>，确定 <spanclass="math inline">\(k_i\)</span> 与 <spanclass="math inline">\(x_i\)</span> 的关系；</li><li><strong>利用凸性</strong>，由 <spanclass="math inline">\(f(0)=f(s)\)</span> 推导 <spanclass="math inline">\(f(r)\)</span> 与端点值的大小关系——<spanclass="math inline">\(0&lt;r&lt;s\)</span> 时 <spanclass="math inline">\(f(r)\le f(0)\)</span>，<spanclass="math inline">\(r&lt;0\)</span> 时 <spanclass="math inline">\(f(r)\ge f(0)\)</span>；</li><li><strong>联系原不等式</strong>，将 <spanclass="math inline">\(f(r)\)</span> 翻译为 <spanclass="math inline">\(M_r\)</span> 与 <spanclass="math inline">\(M_s\)</span> 的关系，即得所欲证的不等式。</li></ol><p>这套框架不仅给出了简洁的证明，更揭示了幂平均、赫尔德等不等式之间内在的统一性。</p>]]>
    </content>
    <id>https://hexo.dytchem.cn/2024/08/26/mixubudengshi/</id>
    <link href="https://hexo.dytchem.cn/2024/08/26/mixubudengshi/"/>
    <published>2024-08-26T08:13:12.000Z</published>
    <summary>
      <![CDATA[<h2 id="定理与证明">定理与证明</h2>
<p><strong>定理（幂序不等式）.</strong> 设 <span
class="math inline">\(k_i&gt;0,\;x_i&gt;0\)</span> 且 <span
class="math]]>
    </summary>
    <title>幂序不等式</title>
    <updated>2026-07-18T12:54:00.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>Dytchem</name>
    </author>
    <category term="computer-science" scheme="https://hexo.dytchem.cn/categories/computer-science/"/>
    <category term="算法" scheme="https://hexo.dytchem.cn/tags/%E7%AE%97%E6%B3%95/"/>
    <content>
      <![CDATA[<hr /><h3 id="代码与编译">代码与编译</h3><h4 id="编译选项">编译选项</h4><p>编译时加入以下命令：</p><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs cpp">-DONLINE_JUDGE -fno-tree-ch -O0 -Wall -std=c+<span class="hljs-number">+11</span><br></code></pre></td></tr></table></figure><h4 id="文件头">文件头</h4><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br></pre></td><td class="code"><pre><code class="hljs cpp"><span class="hljs-meta">#<span class="hljs-keyword">include</span> <span class="hljs-string">&lt;bits/stdc++.h&gt;</span></span><br><span class="hljs-keyword">using</span> <span class="hljs-keyword">namespace</span> std;<br><span class="hljs-keyword">typedef</span> <span class="hljs-type">long</span> <span class="hljs-type">long</span> ll;<br><span class="hljs-meta">#<span class="hljs-keyword">define</span> Inf 0x3f3f3f3f</span><br><span class="hljs-meta">#<span class="hljs-keyword">define</span> INF 0x3f3f3f3f3f3f3f3f</span><br><span class="hljs-comment">// #define int long long</span><br><span class="hljs-keyword">template</span> &lt;<span class="hljs-keyword">typename</span> T&gt;<br><span class="hljs-function"><span class="hljs-keyword">inline</span> T&amp; <span class="hljs-title">read</span><span class="hljs-params">(T&amp; a)</span> </span>&#123;  <span class="hljs-comment">// 快读</span><br>    a = <span class="hljs-number">0</span>;<br>    <span class="hljs-type">bool</span> f = <span class="hljs-literal">false</span>;<br>    <span class="hljs-type">char</span> c = <span class="hljs-built_in">getchar</span>();<br>    <span class="hljs-keyword">while</span> (!<span class="hljs-built_in">isdigit</span>(c)) &#123;<br>        f |= c == <span class="hljs-string">&#x27;-&#x27;</span>;<br>        c = <span class="hljs-built_in">getchar</span>();<br>    &#125;<br>    <span class="hljs-keyword">while</span> (<span class="hljs-built_in">isdigit</span>(c)) &#123;<br>        a = (a &lt;&lt; <span class="hljs-number">1</span>) + (a &lt;&lt; <span class="hljs-number">3</span>) + (c ^ <span class="hljs-number">48</span>);<br>        c = <span class="hljs-built_in">getchar</span>();<br>    &#125;<br>    <span class="hljs-keyword">if</span> (f) a = -a;<br>    <span class="hljs-keyword">return</span> a;<br>&#125;<br></code></pre></td></tr></table></figure><hr /><h3 id="基础算法">基础算法</h3><h4 id="模拟">模拟</h4><h4 id="枚举">枚举</h4><h4 id="贪心">贪心</h4><h4 id="排序">排序</h4><h4 id="二分">二分</h4><h4 id="二分答案">二分答案</h4><h4 id="三分法">三分法</h4><h4 id="倍增">倍增</h4><h4 id="构造">构造</h4><h4 id="cdq分治">CDQ分治</h4><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><code class="hljs cpp"><span class="hljs-function"><span class="hljs-type">int</span> <span class="hljs-title">f</span><span class="hljs-params">(<span class="hljs-type">int</span> l, <span class="hljs-type">int</span> r)</span> </span>&#123;  <span class="hljs-comment">// 区间对问题</span><br>    <span class="hljs-keyword">if</span> (l == r) <span class="hljs-keyword">return</span> <span class="hljs-number">0</span>;  <span class="hljs-comment">// 最小问题</span><br>    <span class="hljs-type">int</span> m = l + r &gt;&gt; <span class="hljs-number">1</span>;<br>    <span class="hljs-type">int</span> re = <span class="hljs-built_in">max</span>(<span class="hljs-built_in">f</span>(l, m), <span class="hljs-built_in">f</span>(m + <span class="hljs-number">1</span>, r));  <span class="hljs-comment">// 递归</span><br>    unordered_map&lt;<span class="hljs-type">int</span>, <span class="hljs-type">int</span>&gt; mp;<br>    <span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> i = m, s = <span class="hljs-number">0</span>; i &gt;= l; --i) &#123;  <span class="hljs-comment">// 建桶</span><br>        mp[s += a[i]] = m + <span class="hljs-number">1</span> - i;<br>    &#125;<br>    <span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> i = m + <span class="hljs-number">1</span>, s = <span class="hljs-number">0</span>; i &lt;= r; ++i) &#123;  <span class="hljs-comment">// 用桶</span><br>        re = <span class="hljs-built_in">max</span>(re, mp[s -= a[i]] + i - m);<br>    &#125;<br>    <span class="hljs-keyword">return</span> re;<br>&#125;<br></code></pre></td></tr></table></figure><p>也可以是基于归并排序的CDQ分治 ***</p><h3 id="数据结构">数据结构</h3><h4 id="栈">栈</h4><h4 id="队列">队列</h4><h4 id="链表">链表</h4><h4 id="哈希表">哈希表</h4><h4 id="堆">堆</h4><h4 id="单调栈">单调栈</h4><h4 id="单调队列">单调队列</h4><h4 id="前缀和">前缀和</h4><h4 id="差分">差分</h4><h4 id="树状数组">树状数组</h4><p>这里的功能是维护前缀最大值：</p><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><code class="hljs cpp"><span class="hljs-type">int</span> bt[N];<br><br><span class="hljs-function"><span class="hljs-keyword">inline</span> <span class="hljs-type">void</span> <span class="hljs-title">add</span><span class="hljs-params">(<span class="hljs-type">int</span> p, <span class="hljs-type">int</span> k)</span></span>&#123;<br>    <span class="hljs-keyword">for</span> (; p &lt; N; p += p &amp; -p)<br>        bt[p] = <span class="hljs-built_in">max</span>(bt[p], k);<br>&#125;<br><br><span class="hljs-function"><span class="hljs-keyword">inline</span> <span class="hljs-type">int</span> <span class="hljs-title">qry</span><span class="hljs-params">(<span class="hljs-type">int</span> p)</span></span>&#123;<br>    <span class="hljs-type">int</span> re = <span class="hljs-number">0</span>;<br>    <span class="hljs-keyword">for</span> (; p; p -= p &amp; -p)<br>        re = <span class="hljs-built_in">max</span>(re, bt[p]);<br>    <span class="hljs-keyword">return</span> re;<br>&#125;<br></code></pre></td></tr></table></figure><h4 id="并查集-简单版本">并查集 （简单版本）</h4><p>一定要初始化<code>fa[i] = i</code>，否则合并会出问题！！！</p><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><code class="hljs cpp"><span class="hljs-comment">// 寻找祖先</span><br><span class="hljs-function"><span class="hljs-type">int</span> <span class="hljs-title">find</span><span class="hljs-params">(<span class="hljs-type">int</span> x)</span> </span>&#123;<br>    <span class="hljs-keyword">return</span> fa[x] == x ? x : fa[x] = <span class="hljs-built_in">find</span>(fa[x]);<br>&#125;<br><span class="hljs-comment">// （非启发式）合并</span><br><span class="hljs-function"><span class="hljs-type">void</span> <span class="hljs-title">hb</span><span class="hljs-params">(<span class="hljs-type">int</span> x, <span class="hljs-type">int</span> y)</span> </span>&#123;<br>    fa[<span class="hljs-built_in">find</span>(x)] = <span class="hljs-built_in">find</span>(y);<br>&#125;<br></code></pre></td></tr></table></figure><h4 id="线段树">线段树</h4><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br></pre></td><td class="code"><pre><code class="hljs cpp"><span class="hljs-type">int</span> n;<br>ll a[N];<br>ll tr[N &lt;&lt; <span class="hljs-number">2</span>], lz[N &lt;&lt; <span class="hljs-number">2</span>]; <span class="hljs-comment">// 注意开大数组！！！！</span><br><br><span class="hljs-function">ll <span class="hljs-title">init</span><span class="hljs-params">(<span class="hljs-type">int</span> l = <span class="hljs-number">1</span>, <span class="hljs-type">int</span> r = n, <span class="hljs-type">int</span> p = <span class="hljs-number">1</span>)</span> </span>&#123;<br>    <span class="hljs-keyword">if</span> (l == r) <span class="hljs-keyword">return</span> tr[p] = a[l];<br>    <span class="hljs-type">int</span> m = l + r &gt;&gt; <span class="hljs-number">1</span>, ps = p &lt;&lt; <span class="hljs-number">1</span>;<br>    <span class="hljs-keyword">return</span> tr[p] = <span class="hljs-built_in">init</span>(l, m, ps) + <span class="hljs-built_in">init</span>(m + <span class="hljs-number">1</span>, r, ps | <span class="hljs-number">1</span>);<br>&#125;<br><br><span class="hljs-function"><span class="hljs-type">void</span> <span class="hljs-title">pd</span><span class="hljs-params">(<span class="hljs-type">int</span> l, <span class="hljs-type">int</span> r, <span class="hljs-type">int</span> p)</span> </span>&#123;<br>    <span class="hljs-keyword">if</span> (l == r || lz[p] == <span class="hljs-number">0</span>) <span class="hljs-keyword">return</span>;<br>    <span class="hljs-type">int</span> m = l + r &gt;&gt; <span class="hljs-number">1</span>, ps = p &lt;&lt; <span class="hljs-number">1</span>;<br>    lz[ps] += lz[p];<br>    lz[ps | <span class="hljs-number">1</span>] += lz[p];<br>    tr[ps] += lz[p] * (m - l + <span class="hljs-number">1</span>);<br>    tr[ps | <span class="hljs-number">1</span>] += lz[p] * (r - m);<br>    lz[p] = <span class="hljs-number">0</span>;<br>&#125;<br><br><span class="hljs-function"><span class="hljs-type">void</span> <span class="hljs-title">add</span><span class="hljs-params">(<span class="hljs-type">int</span> s, <span class="hljs-type">int</span> t, <span class="hljs-type">int</span> k, <span class="hljs-type">int</span> l = <span class="hljs-number">1</span>, <span class="hljs-type">int</span> r = n, <span class="hljs-type">int</span> p = <span class="hljs-number">1</span>)</span> </span>&#123;<br>    <span class="hljs-keyword">if</span> (s == l &amp;&amp; t == r) &#123;<br>        tr[p] += k * (t - s + <span class="hljs-number">1</span>);<br>        lz[p] += k;<br>        <span class="hljs-keyword">return</span>;<br>    &#125;<br>    <span class="hljs-built_in">pd</span>(l, r, p);<br>    <span class="hljs-type">int</span> m = l + r &gt;&gt; <span class="hljs-number">1</span>, ps = p &lt;&lt; <span class="hljs-number">1</span>;<br>    <span class="hljs-keyword">if</span> (s &lt;= m) <span class="hljs-built_in">add</span>(s, <span class="hljs-built_in">min</span>(t, m), k, l, m, ps);<br>    <span class="hljs-keyword">if</span> (t &gt; m) <span class="hljs-built_in">add</span>(<span class="hljs-built_in">max</span>(s, m + <span class="hljs-number">1</span>), t, k, m + <span class="hljs-number">1</span>, r, ps | <span class="hljs-number">1</span>);<br>    tr[p] = tr[ps] + tr[ps | <span class="hljs-number">1</span>];<br>&#125;<br><br><span class="hljs-function">ll <span class="hljs-title">qry</span><span class="hljs-params">(<span class="hljs-type">int</span> s, <span class="hljs-type">int</span> t, <span class="hljs-type">int</span> l = <span class="hljs-number">1</span>, <span class="hljs-type">int</span> r = n, <span class="hljs-type">int</span> p = <span class="hljs-number">1</span>)</span> </span>&#123;<br>    <span class="hljs-keyword">if</span> (s == l &amp;&amp; t == r) <span class="hljs-keyword">return</span> tr[p];<br>    <span class="hljs-built_in">pd</span>(l, r, p);<br>    <span class="hljs-type">int</span> m = l + r &gt;&gt; <span class="hljs-number">1</span>, ps = p &lt;&lt; <span class="hljs-number">1</span>;<br>    ll re = <span class="hljs-number">0</span>;<br>    <span class="hljs-keyword">if</span> (s &lt;= m) re += <span class="hljs-built_in">qry</span>(s, <span class="hljs-built_in">min</span>(t, m), l, m, ps);<br>    <span class="hljs-keyword">if</span> (t &gt; m) re += <span class="hljs-built_in">qry</span>(<span class="hljs-built_in">max</span>(s, m + <span class="hljs-number">1</span>), t, m + <span class="hljs-number">1</span>, r, ps | <span class="hljs-number">1</span>);<br>    <span class="hljs-keyword">return</span> re;<br>&#125;<br></code></pre></td></tr></table></figure><h4 id="链式前向星">链式前向星</h4><h4 id="树链剖分">树链剖分</h4><h4 id="重链剖分">重链剖分</h4><h4 id="lca">LCA</h4><h4 id="树链剖分线段树">树链剖分线段树</h4><p>[[重链剖分.png]] 已知一棵包含 NN个结点的树（连通且无环），每个节点上包含一个数值，需要支持以下操作：</p><ul><li><p><code>1 x y z</code>，表示将树从<code>x</code>到<code>y</code>结点最短路径上所有节点的值都加上<code>z</code></p></li><li><p><code>2 x y</code>，表示求树从<code>x</code>到<code>y</code>结点最短路径上所有节点的值之和</p></li><li><p><code>3 x z</code>，表示将以<code>x</code>为根节点的子树内所有节点值都加上<code>z</code></p></li><li><p><code>4 x</code>，表示求以<code>x</code>为根节点的子树内所有节点值之和</p></li></ul><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br><span class="line">109</span><br><span class="line">110</span><br><span class="line">111</span><br><span class="line">112</span><br><span class="line">113</span><br><span class="line">114</span><br><span class="line">115</span><br><span class="line">116</span><br><span class="line">117</span><br><span class="line">118</span><br><span class="line">119</span><br><span class="line">120</span><br><span class="line">121</span><br><span class="line">122</span><br><span class="line">123</span><br><span class="line">124</span><br><span class="line">125</span><br><span class="line">126</span><br><span class="line">127</span><br><span class="line">128</span><br><span class="line">129</span><br><span class="line">130</span><br><span class="line">131</span><br><span class="line">132</span><br><span class="line">133</span><br><span class="line">134</span><br><span class="line">135</span><br><span class="line">136</span><br><span class="line">137</span><br><span class="line">138</span><br><span class="line">139</span><br><span class="line">140</span><br><span class="line">141</span><br><span class="line">142</span><br><span class="line">143</span><br><span class="line">144</span><br><span class="line">145</span><br><span class="line">146</span><br><span class="line">147</span><br><span class="line">148</span><br><span class="line">149</span><br><span class="line">150</span><br><span class="line">151</span><br><span class="line">152</span><br><span class="line">153</span><br><span class="line">154</span><br><span class="line">155</span><br><span class="line">156</span><br><span class="line">157</span><br><span class="line">158</span><br><span class="line">159</span><br><span class="line">160</span><br><span class="line">161</span><br><span class="line">162</span><br><span class="line">163</span><br><span class="line">164</span><br><span class="line">165</span><br><span class="line">166</span><br><span class="line">167</span><br><span class="line">168</span><br><span class="line">169</span><br><span class="line">170</span><br><span class="line">171</span><br><span class="line">172</span><br><span class="line">173</span><br><span class="line">174</span><br><span class="line">175</span><br><span class="line">176</span><br><span class="line">177</span><br><span class="line">178</span><br><span class="line">179</span><br><span class="line">180</span><br><span class="line">181</span><br><span class="line">182</span><br><span class="line">183</span><br><span class="line">184</span><br><span class="line">185</span><br><span class="line">186</span><br><span class="line">187</span><br><span class="line">188</span><br><span class="line">189</span><br><span class="line">190</span><br><span class="line">191</span><br><span class="line">192</span><br><span class="line">193</span><br><span class="line">194</span><br><span class="line">195</span><br><span class="line">196</span><br><span class="line">197</span><br><span class="line">198</span><br></pre></td><td class="code"><pre><code class="hljs cpp"><span class="hljs-meta">#<span class="hljs-keyword">include</span> <span class="hljs-string">&lt;bits/stdc++.h&gt;</span></span><br><span class="hljs-keyword">using</span> <span class="hljs-keyword">namespace</span> std;<br><span class="hljs-keyword">typedef</span> <span class="hljs-type">long</span> <span class="hljs-type">long</span> ll;<br><span class="hljs-meta">#<span class="hljs-keyword">define</span> Inf 0x3f3f3f3f</span><br><span class="hljs-meta">#<span class="hljs-keyword">define</span> INF 0x3f3f3f3f3f3f3f3f</span><br><span class="hljs-comment">// #define int long long</span><br><span class="hljs-keyword">template</span> &lt;<span class="hljs-keyword">typename</span> T&gt;<br><span class="hljs-function"><span class="hljs-keyword">inline</span> T&amp; <span class="hljs-title">read</span><span class="hljs-params">(T&amp; a)</span> </span>&#123;  <span class="hljs-comment">// 快读</span><br>    a = <span class="hljs-number">0</span>;<br>    <span class="hljs-type">bool</span> f = <span class="hljs-literal">false</span>;<br>    <span class="hljs-type">char</span> c = <span class="hljs-built_in">getchar</span>();<br>    <span class="hljs-keyword">while</span> (!<span class="hljs-built_in">isdigit</span>(c)) &#123;<br>        f |= c == <span class="hljs-string">&#x27;-&#x27;</span>;<br>        c = <span class="hljs-built_in">getchar</span>();<br>    &#125;<br>    <span class="hljs-keyword">while</span> (<span class="hljs-built_in">isdigit</span>(c)) &#123;<br>        a = (a &lt;&lt; <span class="hljs-number">1</span>) + (a &lt;&lt; <span class="hljs-number">3</span>) + (c ^ <span class="hljs-number">48</span>);<br>        c = <span class="hljs-built_in">getchar</span>();<br>    &#125;<br>    <span class="hljs-keyword">if</span> (f) a = -a;<br>    <span class="hljs-keyword">return</span> a;<br>&#125;<br><br><span class="hljs-type">const</span> <span class="hljs-type">int</span> N = <span class="hljs-number">100005</span>;<br><span class="hljs-type">int</span> n, m, r;<br>ll P;<br>ll w[N];<br><span class="hljs-type">int</span> hed[N], to[N &lt;&lt; <span class="hljs-number">1</span>], nxt[N &lt;&lt; <span class="hljs-number">1</span>], p = <span class="hljs-number">1</span>;<br><br><span class="hljs-function"><span class="hljs-keyword">inline</span> <span class="hljs-type">void</span> <span class="hljs-title">add</span><span class="hljs-params">(<span class="hljs-type">int</span> u, <span class="hljs-type">int</span> v)</span> </span>&#123;<br>    nxt[++p] = hed[u];<br>    hed[u] = p;<br>    to[p] = v;<br>&#125;<br><br><span class="hljs-type">int</span> fa[N], dep[N], siz[N], hs[N];<br><span class="hljs-function"><span class="hljs-type">void</span> <span class="hljs-title">dfs1</span><span class="hljs-params">(<span class="hljs-type">int</span> o = r)</span> </span>&#123;<br>    siz[o] = <span class="hljs-number">1</span>;<br>    <span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> i = hed[o]; i; i = nxt[i]) &#123;<br>        <span class="hljs-type">int</span> t = to[i];<br>        <span class="hljs-keyword">if</span> (t == fa[o]) <span class="hljs-keyword">continue</span>;<br>        fa[t] = o;<br>        dep[t] = dep[o] + <span class="hljs-number">1</span>;<br>        <span class="hljs-built_in">dfs1</span>(t);<br>        siz[o] += siz[t];<br>        <span class="hljs-keyword">if</span> (siz[hs[o]] &lt; siz[t]) hs[o] = t;<br>    &#125;<br>&#125;<br><br><span class="hljs-type">int</span> dfn[N], rnk[N], pos = <span class="hljs-number">0</span>, top[N];<br><span class="hljs-function"><span class="hljs-type">void</span> <span class="hljs-title">dfs2</span><span class="hljs-params">(<span class="hljs-type">int</span> o = r)</span> </span>&#123;<br>    rnk[dfn[o] = ++pos] = o;<br>    <span class="hljs-keyword">if</span> (hs[o]) &#123;<br>        top[hs[o]] = top[o];<br>        <span class="hljs-built_in">dfs2</span>(hs[o]);<br>        <span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> i = hed[o]; i; i = nxt[i]) &#123;<br>            <span class="hljs-type">int</span> t = to[i];<br>            <span class="hljs-keyword">if</span> (t == fa[o] || t == hs[o]) <span class="hljs-keyword">continue</span>;<br>            top[t] = t;<br>            <span class="hljs-built_in">dfs2</span>(t);<br>        &#125;<br>    &#125;<br>&#125;<br><br><span class="hljs-function"><span class="hljs-keyword">inline</span> <span class="hljs-type">int</span> <span class="hljs-title">lca</span><span class="hljs-params">(<span class="hljs-type">int</span> x, <span class="hljs-type">int</span> y)</span> </span>&#123;<br>    <span class="hljs-keyword">while</span> (top[x] != top[y]) &#123;<br>        <span class="hljs-keyword">if</span> (dep[top[x]] &gt; dep[top[y]])<br>            x = fa[top[x]];<br>        <span class="hljs-keyword">else</span><br>            y = fa[top[y]];<br>    &#125;<br>    <span class="hljs-keyword">if</span> (dep[x] &lt; dep[y])<br>        <span class="hljs-keyword">return</span> x;<br>    <span class="hljs-keyword">else</span><br>        <span class="hljs-keyword">return</span> y;<br>&#125;<br><br><span class="hljs-comment">// 以结点的dfn排序建立线段树，可以通过rnk反求结点编号</span><br>ll sum[N &lt;&lt; <span class="hljs-number">2</span>], laz[N &lt;&lt; <span class="hljs-number">2</span>];<br><span class="hljs-function">ll <span class="hljs-title">build</span><span class="hljs-params">(<span class="hljs-type">int</span> l = <span class="hljs-number">1</span>, <span class="hljs-type">int</span> r = n, <span class="hljs-type">int</span> p = <span class="hljs-number">1</span>)</span> </span>&#123;<br>    <span class="hljs-keyword">if</span> (l == r) <span class="hljs-keyword">return</span> sum[p] = w[rnk[l]];<br>    <span class="hljs-type">int</span> m = l + r &gt;&gt; <span class="hljs-number">1</span>, ps = p &lt;&lt; <span class="hljs-number">1</span>;<br>    <span class="hljs-keyword">return</span> sum[p] = <span class="hljs-built_in">build</span>(l, m, ps) + <span class="hljs-built_in">build</span>(m + <span class="hljs-number">1</span>, r, ps | <span class="hljs-number">1</span>);<br>&#125;<br><br><span class="hljs-function"><span class="hljs-keyword">inline</span> <span class="hljs-type">void</span> <span class="hljs-title">pd</span><span class="hljs-params">(<span class="hljs-type">int</span> l, <span class="hljs-type">int</span> r, <span class="hljs-type">int</span> p)</span> </span>&#123;<br>    <span class="hljs-keyword">if</span> (laz[p] == <span class="hljs-number">0</span> || l == r) <span class="hljs-keyword">return</span>;<br>    <span class="hljs-type">int</span> m = l + r &gt;&gt; <span class="hljs-number">1</span>, ps = p &lt;&lt; <span class="hljs-number">1</span>;<br>    sum[ps] += laz[p] * (m - l + <span class="hljs-number">1</span>);<br>    laz[ps] += laz[p];<br>    sum[ps | <span class="hljs-number">1</span>] += laz[p] * (r - m);<br>    laz[ps | <span class="hljs-number">1</span>] += laz[p];<br>    laz[p] = <span class="hljs-number">0</span>;<br>&#125;<br><br><span class="hljs-function"><span class="hljs-type">void</span> <span class="hljs-title">chg</span><span class="hljs-params">(<span class="hljs-type">int</span> s, <span class="hljs-type">int</span> t, ll k, <span class="hljs-type">int</span> l = <span class="hljs-number">1</span>, <span class="hljs-type">int</span> r = n, <span class="hljs-type">int</span> p = <span class="hljs-number">1</span>)</span> </span>&#123;<br>    <span class="hljs-keyword">if</span> (s &gt; t) <span class="hljs-built_in">swap</span>(s, t);  <span class="hljs-comment">// 重要！！！</span><br>    <span class="hljs-keyword">if</span> (s == l &amp;&amp; t == r) &#123;<br>        sum[p] += k * (r - l + <span class="hljs-number">1</span>);<br>        laz[p] += k;<br>        <span class="hljs-keyword">return</span>;<br>    &#125;<br>    <span class="hljs-built_in">pd</span>(l, r, p);  <span class="hljs-comment">// 重要！！！</span><br>    <span class="hljs-type">int</span> m = l + r &gt;&gt; <span class="hljs-number">1</span>, ps = p &lt;&lt; <span class="hljs-number">1</span>;<br>    <span class="hljs-keyword">if</span> (s &lt;= m) <span class="hljs-built_in">chg</span>(s, <span class="hljs-built_in">min</span>(t, m), k, l, m, ps);<br>    <span class="hljs-keyword">if</span> (t &gt; m) <span class="hljs-built_in">chg</span>(<span class="hljs-built_in">max</span>(s, m + <span class="hljs-number">1</span>), t, k, m + <span class="hljs-number">1</span>, r, ps | <span class="hljs-number">1</span>);<br>    sum[p] = sum[ps] + sum[ps | <span class="hljs-number">1</span>];<br>&#125;<br><br><span class="hljs-function">ll <span class="hljs-title">qry</span><span class="hljs-params">(<span class="hljs-type">int</span> s, <span class="hljs-type">int</span> t, <span class="hljs-type">int</span> l = <span class="hljs-number">1</span>, <span class="hljs-type">int</span> r = n, <span class="hljs-type">int</span> p = <span class="hljs-number">1</span>)</span> </span>&#123;<br>    <span class="hljs-keyword">if</span> (s &gt; t) <span class="hljs-built_in">swap</span>(s, t);  <span class="hljs-comment">// 重要！！！</span><br>    <span class="hljs-keyword">if</span> (s == l &amp;&amp; t == r) <span class="hljs-keyword">return</span> sum[p];<br>    <span class="hljs-built_in">pd</span>(l, r, p);  <span class="hljs-comment">// 重要！！！</span><br>    <span class="hljs-type">int</span> m = l + r &gt;&gt; <span class="hljs-number">1</span>, ps = p &lt;&lt; <span class="hljs-number">1</span>;<br>    ll re = <span class="hljs-number">0</span>;<br>    <span class="hljs-keyword">if</span> (s &lt;= m) re += <span class="hljs-built_in">qry</span>(s, <span class="hljs-built_in">min</span>(t, m), l, m, ps);<br>    <span class="hljs-keyword">if</span> (t &gt; m) re += <span class="hljs-built_in">qry</span>(<span class="hljs-built_in">max</span>(s, m + <span class="hljs-number">1</span>), t, m + <span class="hljs-number">1</span>, r, ps | <span class="hljs-number">1</span>);<br>    <span class="hljs-keyword">return</span> re;<br>&#125;<br><br><span class="hljs-function"><span class="hljs-keyword">inline</span> <span class="hljs-type">void</span> <span class="hljs-title">init</span><span class="hljs-params">()</span> </span>&#123;<br>    dep[r] = <span class="hljs-number">1</span>;<br>    <span class="hljs-built_in">dfs1</span>();<br>    top[r] = r;<br>    <span class="hljs-built_in">dfs2</span>();<br>    <span class="hljs-built_in">build</span>();<br>&#125;<br><br><span class="hljs-function"><span class="hljs-keyword">inline</span> <span class="hljs-type">void</span> <span class="hljs-title">case1</span><span class="hljs-params">()</span> </span>&#123;<br>    <span class="hljs-type">int</span> x, y, z;<br>    <span class="hljs-built_in">read</span>(x), <span class="hljs-built_in">read</span>(y), <span class="hljs-built_in">read</span>(z);<br>    <span class="hljs-type">int</span> L = <span class="hljs-built_in">lca</span>(x, y);<br>    <span class="hljs-keyword">while</span> (top[x] != top[L]) &#123;<br>        <span class="hljs-built_in">chg</span>(dfn[x], dfn[top[x]], z);<br>        x = fa[top[x]];<br>    &#125;<br>    <span class="hljs-built_in">chg</span>(dfn[x], dfn[L], z);<br>    <span class="hljs-keyword">while</span> (top[y] != top[L]) &#123;<br>        <span class="hljs-built_in">chg</span>(dfn[y], dfn[top[y]], z);<br>        y = fa[top[y]];<br>    &#125;<br>    <span class="hljs-built_in">chg</span>(dfn[y], dfn[L], z);<br>    <span class="hljs-built_in">chg</span>(dfn[L], dfn[L], -z);<br>&#125;<br><br><span class="hljs-function"><span class="hljs-keyword">inline</span> <span class="hljs-type">void</span> <span class="hljs-title">case2</span><span class="hljs-params">()</span> </span>&#123;<br>    <span class="hljs-type">int</span> x, y;<br>    <span class="hljs-built_in">read</span>(x), <span class="hljs-built_in">read</span>(y);<br>    <span class="hljs-type">int</span> L = <span class="hljs-built_in">lca</span>(x, y);<br>    ll ans = <span class="hljs-number">0</span>;<br>    <span class="hljs-keyword">while</span> (top[x] != top[L]) &#123;<br>        ans += <span class="hljs-built_in">qry</span>(dfn[x], dfn[top[x]]);<br>        x = fa[top[x]];<br>    &#125;<br>    ans += <span class="hljs-built_in">qry</span>(dfn[x], dfn[L]);<br>    <span class="hljs-keyword">while</span> (top[y] != top[L]) &#123;<br>        ans += <span class="hljs-built_in">qry</span>(dfn[y], dfn[top[y]]);<br>        y = fa[top[y]];<br>    &#125;<br>    ans += <span class="hljs-built_in">qry</span>(dfn[y], dfn[L]);<br>    ans -= <span class="hljs-built_in">qry</span>(dfn[L], dfn[L]);<br>    <span class="hljs-built_in">printf</span>(<span class="hljs-string">&quot;%lld\n&quot;</span>, ans % P);<br>&#125;<br><br><span class="hljs-function"><span class="hljs-keyword">inline</span> <span class="hljs-type">void</span> <span class="hljs-title">case3</span><span class="hljs-params">()</span> </span>&#123;<br>    <span class="hljs-type">int</span> x, z;<br>    <span class="hljs-built_in">read</span>(x), <span class="hljs-built_in">read</span>(z);<br>    <span class="hljs-built_in">chg</span>(dfn[x], dfn[x] + siz[x] - <span class="hljs-number">1</span>, z);<br>&#125;<br><br><span class="hljs-function"><span class="hljs-keyword">inline</span> <span class="hljs-type">void</span> <span class="hljs-title">case4</span><span class="hljs-params">()</span> </span>&#123;<br>    <span class="hljs-type">int</span> x;<br>    <span class="hljs-built_in">read</span>(x);<br>    ll ans = <span class="hljs-built_in">qry</span>(dfn[x], dfn[x] + siz[x] - <span class="hljs-number">1</span>);<br>    <span class="hljs-built_in">printf</span>(<span class="hljs-string">&quot;%lld\n&quot;</span>, ans % P);<br>&#125;<br><br><span class="hljs-function"><span class="hljs-type">signed</span> <span class="hljs-title">main</span><span class="hljs-params">()</span> </span>&#123;<br>    cin &gt;&gt; n &gt;&gt; m &gt;&gt; r &gt;&gt; P;<br>    <span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> i = <span class="hljs-number">1</span>; i &lt;= n; ++i)<br>        <span class="hljs-built_in">read</span>(w[i]);<br>    <span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> i = <span class="hljs-number">1</span>, x, y; i &lt; n; ++i) &#123;<br>        <span class="hljs-built_in">read</span>(x), <span class="hljs-built_in">read</span>(y);<br>        <span class="hljs-built_in">add</span>(x, y), <span class="hljs-built_in">add</span>(y, x);<br>    &#125;<br>    <span class="hljs-built_in">init</span>();<br>    <span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> i = <span class="hljs-number">1</span>, op; i &lt;= m; ++i) &#123;<br>        <span class="hljs-built_in">read</span>(op);<br>        <span class="hljs-keyword">switch</span> (op) &#123;<br>            <span class="hljs-keyword">case</span> <span class="hljs-number">1</span>: <span class="hljs-built_in">case1</span>(); <span class="hljs-keyword">break</span>;<br>            <span class="hljs-keyword">case</span> <span class="hljs-number">2</span>: <span class="hljs-built_in">case2</span>(); <span class="hljs-keyword">break</span>;<br>            <span class="hljs-keyword">case</span> <span class="hljs-number">3</span>: <span class="hljs-built_in">case3</span>(); <span class="hljs-keyword">break</span>;<br>            <span class="hljs-keyword">case</span> <span class="hljs-number">4</span>: <span class="hljs-built_in">case4</span>(); <span class="hljs-keyword">break</span>;<br>        &#125;<br>    &#125;<br><br>    <span class="hljs-keyword">return</span> <span class="hljs-number">0</span>;<br>&#125;<br></code></pre></td></tr></table></figure><h4 id="st表">ST表</h4><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><code class="hljs cpp"><span class="hljs-type">const</span> <span class="hljs-type">int</span> L = <span class="hljs-number">22</span>;<br><span class="hljs-type">int</span> Log[N], ma[N][L];<br><span class="hljs-function"><span class="hljs-keyword">inline</span> <span class="hljs-type">void</span> <span class="hljs-title">init</span><span class="hljs-params">()</span> </span>&#123;<br>    Log[<span class="hljs-number">1</span>] = <span class="hljs-number">0</span>;<br>    <span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> i = <span class="hljs-number">2</span>; i &lt; N; ++i)<br>        Log[i] = Log[i &gt;&gt; <span class="hljs-number">1</span>] + <span class="hljs-number">1</span>;<br><br>    <span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> i = <span class="hljs-number">1</span>; i &lt;= n; ++i) ma[i][<span class="hljs-number">0</span>] = a[i];<br>    <span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> j = <span class="hljs-number">1</span>; j &lt;= L; ++j)<br>        <span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> i = <span class="hljs-number">1</span>; i + (<span class="hljs-number">1</span> &lt;&lt; j) - <span class="hljs-number">1</span> &lt;= n; ++i)<br>            ma[i][j] = <span class="hljs-built_in">max</span>(ma[i][j - <span class="hljs-number">1</span>], ma[i + (<span class="hljs-number">1</span> &lt;&lt; j - <span class="hljs-number">1</span>)][j - <span class="hljs-number">1</span>]);<br>&#125;<br><br><span class="hljs-function"><span class="hljs-keyword">inline</span> <span class="hljs-type">int</span> <span class="hljs-title">qry_max</span><span class="hljs-params">(<span class="hljs-type">int</span> l, <span class="hljs-type">int</span> r)</span> </span>&#123;<br>    <span class="hljs-type">int</span> q = Log[r - l + <span class="hljs-number">1</span>];<br>    <span class="hljs-keyword">return</span> <span class="hljs-built_in">max</span>(ma[l][q], ma[r - (<span class="hljs-number">1</span> &lt;&lt; q) + <span class="hljs-number">1</span>][q]);<br>&#125;<br></code></pre></td></tr></table></figure><h4 id="二叉搜索树">二叉搜索树</h4><h4 id="平衡树">平衡树</h4><h4 id="avl树">AVL树</h4><h4 id="splay树">Splay树</h4><h4 id="可持久化数据结构">可持久化数据结构</h4><hr /><h3 id="数论">数论</h3><h4 id="线性筛">线性筛</h4><h4 id="欧拉函数">欧拉函数</h4><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br></pre></td><td class="code"><pre><code class="hljs cpp"><span class="hljs-type">int</span> ps[N], phi[N], tot = <span class="hljs-number">0</span>;<br><span class="hljs-type">bool</span> vis[N];<br><span class="hljs-function"><span class="hljs-keyword">inline</span> <span class="hljs-type">void</span> <span class="hljs-title">init</span><span class="hljs-params">()</span> </span>&#123;<br>    <span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> i = <span class="hljs-number">2</span>; i &lt; N; ++i) &#123;<br>        <span class="hljs-keyword">if</span> (!vis[i])<br>            ps[++tot] = i, phi[i] = i - <span class="hljs-number">1</span>;<br>        <span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> j = <span class="hljs-number">1</span>; j &lt;= tot; ++j) &#123;<br>            <span class="hljs-type">int</span> p = ps[j], t = i * p;<br>            <span class="hljs-keyword">if</span> (t &gt;= N) <span class="hljs-keyword">break</span>;<br>            vis[t] = <span class="hljs-literal">true</span>;<br>            <span class="hljs-keyword">if</span> (i % p)<br>                phi[t] = phi[i] * phi[p];<br>            <span class="hljs-keyword">else</span> &#123;<br>                phi[t] = phi[i] * p;<br>                <span class="hljs-keyword">break</span>;<br>            &#125;<br>        &#125;<br>    &#125;<br>&#125;<br></code></pre></td></tr></table></figure><p>若要求<span class="math inline">\(\varphi(x)\)</span>（<spanclass="math inline">\(x\)</span>很大），则需要对<spanclass="math inline">\(x\)</span>进行质因数分解，然后利用<spanclass="math inline">\(\varphi(x)\)</span>的积性来计算，其中需要<spanclass="math inline">\(N&gt;\sqrt{x}\)</span></p><h4 id="快速幂">快速幂</h4><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><code class="hljs cpp"><span class="hljs-function">ll <span class="hljs-title">qpow</span><span class="hljs-params">(ll a, ll n)</span> </span>&#123;<br>    a %= P;<br>    ll re = <span class="hljs-number">1</span>;<br>    <span class="hljs-keyword">while</span> (n) &#123;<br>        <span class="hljs-keyword">if</span> (n &amp; <span class="hljs-number">1</span>) re = re * a % P;<br>        a = a * a % P;<br>        n &gt;&gt;= <span class="hljs-number">1</span>;<br>    &#125;<br>    <span class="hljs-keyword">return</span> re;<br>&#125;<br></code></pre></td></tr></table></figure><h4 id="exgcd">EXGCD</h4><p>求<spanclass="math inline">\(ax+by=\gcd(a,b)\)</span>的一组可行解</p><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><code class="hljs cpp"><span class="hljs-function"><span class="hljs-type">int</span> <span class="hljs-title">Exgcd</span><span class="hljs-params">(<span class="hljs-type">int</span> a, <span class="hljs-type">int</span> b, <span class="hljs-type">int</span>&amp; x, <span class="hljs-type">int</span>&amp; y)</span> </span>&#123;<br>    <span class="hljs-keyword">if</span> (!b) &#123;<br>        x = <span class="hljs-number">1</span>;<br>        y = <span class="hljs-number">0</span>;<br>        <span class="hljs-keyword">return</span> a;<br>    &#125;<br>    <span class="hljs-type">int</span> d = <span class="hljs-built_in">Exgcd</span>(b, a % b, x, y);<br>    <span class="hljs-type">int</span> t = x;<br>    x = y;<br>    y = t - (a / b) * y;<br>    <span class="hljs-keyword">return</span> d;<br>&#125;<br></code></pre></td></tr></table></figure><p>函数返回的值为<spanclass="math inline">\(\gcd\)</span>，在这个过程中计算<spanclass="math inline">\(x,y\)</span>即可 ***</p><h3 id="图论">图论</h3><h4 id="树上问题">树上问题</h4><h4 id="最短路">最短路</h4><h4 id="floyd">Floyd</h4><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><code class="hljs cpp"><span class="hljs-keyword">for</span> (k = <span class="hljs-number">1</span>; k &lt;= n; k++) &#123;<br>  <span class="hljs-keyword">for</span> (x = <span class="hljs-number">1</span>; x &lt;= n; x++) &#123;<br>    <span class="hljs-keyword">for</span> (y = <span class="hljs-number">1</span>; y &lt;= n; y++) &#123;<br>      f[x][y] = <span class="hljs-built_in">min</span>(f[x][y], f[x][k] + f[k][y]);<br>    &#125;<br>  &#125;<br>&#125;<br></code></pre></td></tr></table></figure><h4 id="dijkstra">Dijkstra</h4><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br></pre></td><td class="code"><pre><code class="hljs cpp"><span class="hljs-keyword">struct</span> <span class="hljs-title class_">edge</span> &#123;<br>  <span class="hljs-type">int</span> v, w;<br>&#125;;<br><br><span class="hljs-keyword">struct</span> <span class="hljs-title class_">node</span> &#123;<br>  <span class="hljs-type">int</span> dis, u;<br><br>  <span class="hljs-type">bool</span> <span class="hljs-keyword">operator</span>&gt;(<span class="hljs-type">const</span> node&amp; a) <span class="hljs-type">const</span> &#123; <span class="hljs-keyword">return</span> dis &gt; a.dis; &#125;<br>&#125;;<br><br>vector&lt;edge&gt; e[maxn];<br><span class="hljs-type">int</span> dis[maxn], vis[maxn];<br>priority_queue&lt;node, vector&lt;node&gt;, greater&lt;node&gt; &gt; q;<br><br><span class="hljs-function"><span class="hljs-type">void</span> <span class="hljs-title">dijkstra</span><span class="hljs-params">(<span class="hljs-type">int</span> n, <span class="hljs-type">int</span> s)</span> </span>&#123;<br>  <span class="hljs-built_in">memset</span>(dis, <span class="hljs-number">63</span>, <span class="hljs-built_in">sizeof</span>(dis));<br>  dis[s] = <span class="hljs-number">0</span>;<br>  q.<span class="hljs-built_in">push</span>(&#123;<span class="hljs-number">0</span>, s&#125;);<br>  <span class="hljs-keyword">while</span> (!q.<span class="hljs-built_in">empty</span>()) &#123;<br>    <span class="hljs-type">int</span> u = q.<span class="hljs-built_in">top</span>().u;<br>    q.<span class="hljs-built_in">pop</span>();<br>    <span class="hljs-keyword">if</span> (vis[u]) <span class="hljs-keyword">continue</span>;<br>    vis[u] = <span class="hljs-number">1</span>;<br>    <span class="hljs-keyword">for</span> (<span class="hljs-keyword">auto</span> ed : e[u]) &#123;<br>      <span class="hljs-type">int</span> v = ed.v, w = ed.w;<br>      <span class="hljs-keyword">if</span> (dis[v] &gt; dis[u] + w) &#123;<br>        dis[v] = dis[u] + w;<br>        q.<span class="hljs-built_in">push</span>(&#123;dis[v], v&#125;);<br>      &#125;<br>    &#125;<br>  &#125;<br>&#125;<br></code></pre></td></tr></table></figure><h4 id="分层图">分层图</h4><h4 id="欧拉回路">欧拉回路</h4><h4 id="网络流">网络流</h4><hr /><h3 id="动态规划">动态规划</h3><h4 id="背包dp">背包DP</h4><h4 id="背包">01背包</h4><p><spanclass="math display">\[f_{i,j}=\max\{f_{i-1,j},f_{i-1,j-w_i}+v_i\}\]</span>滚动数组优化： <spanclass="math display">\[f_j=\max\{f_j,f_{j-w_i}+v_i\}\]</span>需要<code>j</code>从大到小遍历</p><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><code class="hljs cpp"><span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> i = <span class="hljs-number">1</span>; i &lt;= n; i++)<br>    <span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> j = W; j &gt;= w[i]; j--)<br>        f[j] = <span class="hljs-built_in">max</span>(f[j], f[j - w[i]] + v[i]);<br></code></pre></td></tr></table></figure><h4 id="完全背包">完全背包</h4><p><spanclass="math display">\[f_{i,j}=\max_{k=0}^{+\infty}\{f_{i-1,j-k\cdotw_i}+k\cdot v_i\}\]</span>同样采用滚动数组优化，<code>j</code>从小到大遍历</p><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><code class="hljs cpp"><span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> i = <span class="hljs-number">1</span>; i &lt;= n; i++)<br>    <span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> j = w[i]; j &lt;= W; j++)<br>        <span class="hljs-keyword">if</span> (f[j - w[i]] + v[i] &gt; f[j]) f[j] = f[j - w[i]] + v[i];<br></code></pre></td></tr></table></figure><h4 id="区间dp">区间DP</h4><h4 id="dag上的dp">DAG上的DP</h4><h4 id="树形dp">树形DP</h4><h4 id="状压dp">状压dp</h4><h4 id="数位dp">数位dp</h4><h4 id="插头dp">插头DP</h4><h4 id="计数dp">计数DP</h4><hr /><h3 id="字符串">字符串</h3><h4 id="字典树">字典树</h4><h4 id="trie">Trie</h4><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br></pre></td><td class="code"><pre><code class="hljs cpp"><span class="hljs-keyword">struct</span> <span class="hljs-title class_">trie</span> &#123;<br>    <span class="hljs-type">int</span> nex[<span class="hljs-number">100000</span>][<span class="hljs-number">26</span>], cnt;<br>    <span class="hljs-type">bool</span> exist[<span class="hljs-number">100000</span>];  <span class="hljs-comment">// 该结点结尾的字符串是否存在</span><br><br>    <span class="hljs-function"><span class="hljs-type">void</span> <span class="hljs-title">insert</span><span class="hljs-params">(<span class="hljs-type">char</span>* s, <span class="hljs-type">int</span> l)</span> </span>&#123;  <span class="hljs-comment">// 插入字符串</span><br>        <span class="hljs-type">int</span> p = <span class="hljs-number">0</span>;<br>        <span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> i = <span class="hljs-number">0</span>; i &lt; l; i++) &#123;<br>            <span class="hljs-type">int</span> c = s[i] - <span class="hljs-string">&#x27;a&#x27;</span>;<br>            <span class="hljs-keyword">if</span> (!nex[p][c]) nex[p][c] = ++cnt;  <span class="hljs-comment">// 如果没有，就添加结点</span><br>            p = nex[p][c];<br>        &#125;<br>        exist[p] = <span class="hljs-number">1</span>;<br>    &#125;<br><br>    <span class="hljs-function"><span class="hljs-type">bool</span> <span class="hljs-title">find</span><span class="hljs-params">(<span class="hljs-type">char</span>* s, <span class="hljs-type">int</span> l)</span> </span>&#123;  <span class="hljs-comment">// 查找字符串</span><br>        <span class="hljs-type">int</span> p = <span class="hljs-number">0</span>;<br>        <span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> i = <span class="hljs-number">0</span>; i &lt; l; i++) &#123;<br>            <span class="hljs-type">int</span> c = s[i] - <span class="hljs-string">&#x27;a&#x27;</span>;<br>            <span class="hljs-keyword">if</span> (!nex[p][c]) <span class="hljs-keyword">return</span> <span class="hljs-number">0</span>;<br>            p = nex[p][c];<br>        &#125;<br>        <span class="hljs-keyword">return</span> exist[p];<br>    &#125;<br>&#125;;<br></code></pre></td></tr></table></figure><h4 id="前缀数组">前缀数组</h4><p><span class="math display">\[\pi[i]=\max_{k=0,...,i}\{\ k\ |\s[0..k-1]=s[i-k+1..i]\ \}\]</span></p><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><code class="hljs cpp"><span class="hljs-function">vector&lt;<span class="hljs-type">int</span>&gt; <span class="hljs-title">prefix_function</span><span class="hljs-params">(string s)</span> </span>&#123;<br>    <span class="hljs-type">int</span> n = (<span class="hljs-type">int</span>)s.<span class="hljs-built_in">length</span>();<br>    <span class="hljs-function">vector&lt;<span class="hljs-type">int</span>&gt; <span class="hljs-title">pi</span><span class="hljs-params">(n)</span></span>;<br>    <span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> i = <span class="hljs-number">1</span>; i &lt; n; i++) &#123;<br>        <span class="hljs-type">int</span> j = pi[i - <span class="hljs-number">1</span>];<br>        <span class="hljs-keyword">while</span> (j &gt; <span class="hljs-number">0</span> &amp;&amp; s[i] != s[j]) j = pi[j - <span class="hljs-number">1</span>];<br>        <span class="hljs-keyword">if</span> (s[i] == s[j]) j++;<br>        pi[i] = j;<br>    &#125;<br>    <span class="hljs-keyword">return</span> pi;<br>&#125;<br></code></pre></td></tr></table></figure><h4 id="kmp算法">KMP算法</h4><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><code class="hljs cpp"><span class="hljs-function">vector&lt;<span class="hljs-type">int</span>&gt; <span class="hljs-title">find_occurrences</span><span class="hljs-params">(string text, string pattern)</span> </span>&#123;<br>    string cur = pattern + <span class="hljs-string">&#x27;#&#x27;</span> + text;<br>    <span class="hljs-type">int</span> sz1 = text.<span class="hljs-built_in">size</span>(), sz2 = pattern.<span class="hljs-built_in">size</span>();<br>    vector&lt;<span class="hljs-type">int</span>&gt; v;<br>    vector&lt;<span class="hljs-type">int</span>&gt; lps = <span class="hljs-built_in">prefix_function</span>(cur);<br>    <span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> i = sz2 + <span class="hljs-number">1</span>; i &lt;= sz1 + sz2; i++) &#123;<br>        <span class="hljs-keyword">if</span> (lps[i] == sz2) v.<span class="hljs-built_in">push_back</span>(i - <span class="hljs-number">2</span> * sz2);<br>    &#125;<br>    <span class="hljs-keyword">return</span> v;<br>&#125;<br></code></pre></td></tr></table></figure><h4 id="ac自动机">AC自动机</h4><h4 id="后缀数组">后缀数组</h4><p><code>sa[i]</code>表示将所有后缀排序后第<code>i</code>小的后缀的编号<code>rk[i]</code>表示后缀<code>i</code>的排名，即<code>sa[rk[i]] = rk[sa[i]] = i</code>[[后缀数组.png]]</p><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br></pre></td><td class="code"><pre><code class="hljs cpp"><span class="hljs-meta">#<span class="hljs-keyword">include</span> <span class="hljs-string">&lt;algorithm&gt;</span></span><br><span class="hljs-meta">#<span class="hljs-keyword">include</span> <span class="hljs-string">&lt;cstdio&gt;</span></span><br><span class="hljs-meta">#<span class="hljs-keyword">include</span> <span class="hljs-string">&lt;cstring&gt;</span></span><br><span class="hljs-meta">#<span class="hljs-keyword">include</span> <span class="hljs-string">&lt;iostream&gt;</span></span><br><span class="hljs-keyword">using</span> <span class="hljs-keyword">namespace</span> std;<br><br><span class="hljs-type">const</span> <span class="hljs-type">int</span> N = <span class="hljs-number">1000010</span>;<br><br><span class="hljs-type">char</span> s[N];<br><span class="hljs-comment">// key1[i] = rk[id[i]]（作为基数排序的第一关键字数组）</span><br><span class="hljs-type">int</span> n, sa[N], rk[N], oldrk[N &lt;&lt; <span class="hljs-number">1</span>], id[N], key1[N], cnt[N];<br><br><span class="hljs-function"><span class="hljs-type">bool</span> <span class="hljs-title">cmp</span><span class="hljs-params">(<span class="hljs-type">int</span> x, <span class="hljs-type">int</span> y, <span class="hljs-type">int</span> w)</span> </span>&#123;<br>    <span class="hljs-keyword">return</span> oldrk[x] == oldrk[y] &amp;&amp; oldrk[x + w] == oldrk[y + w];<br>&#125;<br><br><span class="hljs-function"><span class="hljs-type">int</span> <span class="hljs-title">main</span><span class="hljs-params">()</span> </span>&#123;<br>    <span class="hljs-type">int</span> i, m = <span class="hljs-number">127</span>, p, w;<br><br>    <span class="hljs-built_in">scanf</span>(<span class="hljs-string">&quot;%s&quot;</span>, s + <span class="hljs-number">1</span>);<br>    n = <span class="hljs-built_in">strlen</span>(s + <span class="hljs-number">1</span>);<br>    <span class="hljs-keyword">for</span> (i = <span class="hljs-number">1</span>; i &lt;= n; ++i)<br>        ++cnt[rk[i] = s[i]];<br>    <span class="hljs-keyword">for</span> (i = <span class="hljs-number">1</span>; i &lt;= m; ++i)<br>        cnt[i] += cnt[i - <span class="hljs-number">1</span>];<br>    <span class="hljs-keyword">for</span> (i = n; i &gt;= <span class="hljs-number">1</span>; --i)<br>        sa[cnt[rk[i]]--] = i;<br><br>    <span class="hljs-keyword">for</span> (w = <span class="hljs-number">1</span>;; w &lt;&lt;= <span class="hljs-number">1</span>, m = p) &#123;  <span class="hljs-comment">// m=p 就是优化计数排序值域</span><br>        <span class="hljs-keyword">for</span> (p = <span class="hljs-number">0</span>, i = n; i &gt; n - w; --i)<br>            id[++p] = i;<br>        <span class="hljs-keyword">for</span> (i = <span class="hljs-number">1</span>; i &lt;= n; ++i)<br>            <span class="hljs-keyword">if</span> (sa[i] &gt; w) id[++p] = sa[i] - w;<br><br>        <span class="hljs-built_in">memset</span>(cnt, <span class="hljs-number">0</span>, <span class="hljs-built_in">sizeof</span>(cnt));<br>        <span class="hljs-keyword">for</span> (i = <span class="hljs-number">1</span>; i &lt;= n; ++i)<br>            ++cnt[key1[i] = rk[id[i]]];<br>        <span class="hljs-comment">// 注意这里px[i] != i，因为rk没有更新，是上一轮的排名数组</span><br><br>        <span class="hljs-keyword">for</span> (i = <span class="hljs-number">1</span>; i &lt;= m; ++i)<br>            cnt[i] += cnt[i - <span class="hljs-number">1</span>];<br>        <span class="hljs-keyword">for</span> (i = n; i &gt;= <span class="hljs-number">1</span>; --i)<br>            sa[cnt[key1[i]]--] = id[i];<br>        <span class="hljs-built_in">memcpy</span>(oldrk + <span class="hljs-number">1</span>, rk + <span class="hljs-number">1</span>, n * <span class="hljs-built_in">sizeof</span>(<span class="hljs-type">int</span>));<br>        <span class="hljs-keyword">for</span> (p = <span class="hljs-number">0</span>, i = <span class="hljs-number">1</span>; i &lt;= n; ++i)<br>            rk[sa[i]] = <span class="hljs-built_in">cmp</span>(sa[i], sa[i - <span class="hljs-number">1</span>], w) ? p : ++p;<br>        <span class="hljs-keyword">if</span> (p == n) &#123;<br>            <span class="hljs-keyword">break</span>;<br>        &#125;<br>    &#125;<br><br>    <span class="hljs-keyword">for</span> (i = <span class="hljs-number">1</span>; i &lt;= n; ++i)<br>        <span class="hljs-built_in">printf</span>(<span class="hljs-string">&quot;%d &quot;</span>, sa[i]);<br><br>    <span class="hljs-keyword">return</span> <span class="hljs-number">0</span>;<br>&#125;<br></code></pre></td></tr></table></figure><h4 id="后缀自动机">后缀自动机</h4><hr /><h3 id="计算几何">计算几何</h3><h4 id="平面最近点对">平面最近点对</h4><p>遍历方法</p><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br></pre></td><td class="code"><pre><code class="hljs cpp"><span class="hljs-meta">#<span class="hljs-keyword">include</span> <span class="hljs-string">&lt;bits/stdc++.h&gt;</span></span><br><span class="hljs-keyword">using</span> <span class="hljs-keyword">namespace</span> std;<br><span class="hljs-keyword">typedef</span> pair&lt;<span class="hljs-type">double</span>, <span class="hljs-type">double</span>&gt; pdd;<br><br><span class="hljs-type">const</span> <span class="hljs-type">int</span> N = <span class="hljs-number">100005</span>;<br><span class="hljs-type">int</span> n;<br>pdd a[N];<br><span class="hljs-keyword">struct</span> <span class="hljs-title class_">cmp</span> &#123;<br>    <span class="hljs-function"><span class="hljs-type">bool</span> <span class="hljs-title">operator</span><span class="hljs-params">()</span><span class="hljs-params">(<span class="hljs-type">const</span> pdd&amp; p1, <span class="hljs-type">const</span> pdd&amp; p2)</span> <span class="hljs-type">const</span> </span>&#123;<br>        <span class="hljs-keyword">return</span> p<span class="hljs-number">1.</span>second &lt; p<span class="hljs-number">2.</span>second;<br>    &#125;<br>&#125;;<br>multiset&lt;pdd, cmp&gt; ms;<br><br><span class="hljs-function"><span class="hljs-keyword">inline</span> <span class="hljs-type">double</span> <span class="hljs-title">d</span><span class="hljs-params">(<span class="hljs-type">const</span> pdd&amp; p1, <span class="hljs-type">const</span> pdd&amp; p2)</span> </span>&#123;<br>    <span class="hljs-keyword">return</span> <span class="hljs-built_in">sqrt</span>((p<span class="hljs-number">1.f</span>irst - p<span class="hljs-number">2.f</span>irst) * (p<span class="hljs-number">1.f</span>irst - p<span class="hljs-number">2.f</span>irst) + (p<span class="hljs-number">1.</span>second - p<span class="hljs-number">2.</span>second) * (p<span class="hljs-number">1.</span>second - p<span class="hljs-number">2.</span>second));<br>&#125;<br><br><span class="hljs-function"><span class="hljs-type">signed</span> <span class="hljs-title">main</span><span class="hljs-params">()</span> </span>&#123;<br>    ios::<span class="hljs-built_in">sync_with_stdio</span>(<span class="hljs-number">0</span>), cin.<span class="hljs-built_in">tie</span>(<span class="hljs-number">0</span>), cout.<span class="hljs-built_in">tie</span>(<span class="hljs-number">0</span>);<br>    cin &gt;&gt; n;<br>    <span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> i = <span class="hljs-number">0</span>; i &lt; n; ++i) &#123;<br>        cin &gt;&gt; a[i].first &gt;&gt; a[i].second;<br>    &#125;<br>    <span class="hljs-built_in">sort</span>(a, a + n);<br>    <span class="hljs-type">double</span> ans = <span class="hljs-number">1e10</span>;<br>    <span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> i = <span class="hljs-number">0</span>, j = <span class="hljs-number">0</span>; i &lt; n; ++i) &#123;<br>        <span class="hljs-keyword">for</span> (; j &lt; i &amp;&amp; a[i].first - a[j].first &gt;= ans; ++j) ms.<span class="hljs-built_in">erase</span>(ms.<span class="hljs-built_in">find</span>(a[j]));<br>        <span class="hljs-keyword">for</span> (multiset&lt;pdd, cmp&gt;::iterator it = ms.<span class="hljs-built_in">lower_bound</span>(<span class="hljs-built_in">make_pair</span>(<span class="hljs-number">0</span>, a[i].second - ans));<br>             it != ms.<span class="hljs-built_in">end</span>() &amp;&amp; it-&gt;second - a[i].second &lt; ans; ++it) &#123;<br>            ans = <span class="hljs-built_in">min</span>(ans, <span class="hljs-built_in">d</span>(*it, a[i]));<br>        &#125;<br>        ms.<span class="hljs-built_in">insert</span>(a[i]);<br>    &#125;<br><br>    cout &lt;&lt; fixed &lt;&lt; <span class="hljs-built_in">setprecision</span>(<span class="hljs-number">4</span>) &lt;&lt; ans;<br><br>    <span class="hljs-keyword">return</span> <span class="hljs-number">0</span>;<br>&#125;<br></code></pre></td></tr></table></figure><h4 id="扫描线">扫描线</h4><hr /><h3 id="杂项">杂项</h3><h4 id="逆波兰式">逆波兰式</h4><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br></pre></td><td class="code"><pre><code class="hljs cpp"><span class="hljs-meta">#<span class="hljs-keyword">include</span> <span class="hljs-string">&lt;bits/stdc++.h&gt;</span></span><br><span class="hljs-keyword">using</span> <span class="hljs-keyword">namespace</span> std;<br><span class="hljs-keyword">typedef</span> <span class="hljs-type">long</span> <span class="hljs-type">long</span> ll;<br><span class="hljs-meta">#<span class="hljs-keyword">define</span> Inf 0x3f3f3f3f</span><br><span class="hljs-meta">#<span class="hljs-keyword">define</span> INF 0x3f3f3f3f3f3f3f3f</span><br><span class="hljs-comment">// #define int long long</span><br><br><span class="hljs-type">int</span> pri[<span class="hljs-number">128</span>];<br><span class="hljs-function"><span class="hljs-keyword">inline</span> <span class="hljs-type">void</span> <span class="hljs-title">init</span><span class="hljs-params">()</span> </span>&#123;<br>    pri[<span class="hljs-string">&#x27;+&#x27;</span>] = pri[<span class="hljs-string">&#x27;-&#x27;</span>] = <span class="hljs-number">1</span>;<br>    pri[<span class="hljs-string">&#x27;*&#x27;</span>] = pri[<span class="hljs-string">&#x27;/&#x27;</span>] = <span class="hljs-number">2</span>;<br>    pri[<span class="hljs-string">&#x27;^&#x27;</span>] = <span class="hljs-number">3</span>;<br>&#125;<br><br><span class="hljs-function"><span class="hljs-keyword">inline</span> ll <span class="hljs-title">qpow</span><span class="hljs-params">(ll a, ll n)</span> </span>&#123;<br>    ll re = <span class="hljs-number">1</span>;<br>    <span class="hljs-keyword">while</span> (n) &#123;<br>        <span class="hljs-keyword">if</span> (n &amp; <span class="hljs-number">1</span>) re *= a;<br>        a *= a;<br>        n &gt;&gt;= <span class="hljs-number">1</span>;<br>    &#125;<br>    <span class="hljs-keyword">return</span> re;<br>&#125;<br><br><span class="hljs-function"><span class="hljs-keyword">inline</span> ll <span class="hljs-title">cal</span><span class="hljs-params">(ll a, ll b, <span class="hljs-type">char</span> op)</span> </span>&#123;<br>    <span class="hljs-keyword">switch</span> (op) &#123;<br>        <span class="hljs-keyword">case</span> <span class="hljs-string">&#x27;+&#x27;</span>: <span class="hljs-keyword">return</span> a + b;<br>        <span class="hljs-keyword">case</span> <span class="hljs-string">&#x27;-&#x27;</span>: <span class="hljs-keyword">return</span> a - b;<br>        <span class="hljs-keyword">case</span> <span class="hljs-string">&#x27;*&#x27;</span>: <span class="hljs-keyword">return</span> a * b;<br>        <span class="hljs-keyword">case</span> <span class="hljs-string">&#x27;/&#x27;</span>: <span class="hljs-keyword">return</span> a / b;<br>        <span class="hljs-keyword">case</span> <span class="hljs-string">&#x27;^&#x27;</span>: <span class="hljs-keyword">return</span> <span class="hljs-built_in">qpow</span>(a, b);<br>    &#125;<br>    <span class="hljs-keyword">return</span> <span class="hljs-number">0</span>;<br>&#125;<br><br><span class="hljs-function">list&lt;ll&gt; <span class="hljs-title">dfs</span><span class="hljs-params">(<span class="hljs-type">int</span> pre = <span class="hljs-number">0</span>)</span> </span>&#123; <span class="hljs-comment">// pre代表在最前面添加&quot;(&quot;的个数</span><br>    list&lt;ll&gt; re;<br>    <span class="hljs-keyword">if</span> (pre &gt; <span class="hljs-number">0</span>) re.<span class="hljs-built_in">splice</span>(re.<span class="hljs-built_in">end</span>(), <span class="hljs-built_in">dfs</span>(pre - <span class="hljs-number">1</span>));<br>    stack&lt;<span class="hljs-type">char</span>&gt; op;<br>    <span class="hljs-type">char</span> c;<br>    <span class="hljs-keyword">while</span> (cin &gt;&gt; c) &#123;<br>    begin:<br>        <span class="hljs-keyword">if</span> (c == <span class="hljs-string">&#x27;(&#x27;</span>) re.<span class="hljs-built_in">splice</span>(re.<span class="hljs-built_in">end</span>(), <span class="hljs-built_in">dfs</span>());<br>        <span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span> (c == <span class="hljs-string">&#x27;)&#x27;</span>) <span class="hljs-keyword">break</span>;<br>        <span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span> (pri[c]) &#123;<br>            <span class="hljs-keyword">while</span> (!op.<span class="hljs-built_in">empty</span>() &amp;&amp; pri[op.<span class="hljs-built_in">top</span>()] &gt;= pri[c]) &#123;<br>                re.<span class="hljs-built_in">push_back</span>(op.<span class="hljs-built_in">top</span>() + INF);<br>                op.<span class="hljs-built_in">pop</span>();<br>            &#125;<br>            op.<span class="hljs-built_in">push</span>(c);<br>        &#125;<br>        <span class="hljs-keyword">else</span> &#123;<br>            ll a = c - <span class="hljs-string">&#x27;0&#x27;</span>;<br>            <span class="hljs-keyword">while</span> (cin &gt;&gt; c) &#123;<br>                <span class="hljs-keyword">if</span> (!<span class="hljs-built_in">isdigit</span>(c)) &#123;<br>                    re.<span class="hljs-built_in">push_back</span>(a);<br>                    <span class="hljs-keyword">goto</span> begin;<br>                &#125;<br>                a = a * <span class="hljs-number">10</span> + c - <span class="hljs-string">&#x27;0&#x27;</span>;<br>            &#125;<br>            re.<span class="hljs-built_in">push_back</span>(a);<br>        &#125;<br>    &#125;<br>    <span class="hljs-keyword">while</span> (!op.<span class="hljs-built_in">empty</span>()) &#123;<br>        re.<span class="hljs-built_in">push_back</span>(op.<span class="hljs-built_in">top</span>() + INF);<br>        op.<span class="hljs-built_in">pop</span>();<br>    &#125;<br>    <span class="hljs-keyword">return</span> re;<br>&#125;<br><br><span class="hljs-function"><span class="hljs-keyword">inline</span> <span class="hljs-type">void</span> <span class="hljs-title">show</span><span class="hljs-params">(list&lt;ll&gt;&amp; a)</span> </span>&#123;<br>    <span class="hljs-keyword">for</span> (ll&amp; i : a) &#123;<br>        <span class="hljs-keyword">if</span> (i &gt; INF) cout &lt;&lt; <span class="hljs-built_in">char</span>(i - INF) &lt;&lt; <span class="hljs-string">&#x27; &#x27;</span>;<br>        <span class="hljs-keyword">else</span> cout &lt;&lt; i &lt;&lt; <span class="hljs-string">&#x27; &#x27;</span>;<br>    &#125;<br>    cout &lt;&lt; <span class="hljs-string">&#x27;\n&#x27;</span>;<br>&#125;<br><br><span class="hljs-function"><span class="hljs-keyword">inline</span> <span class="hljs-type">void</span> <span class="hljs-title">work</span><span class="hljs-params">(list&lt;ll&gt;&amp; a)</span> </span>&#123;<br>    <span class="hljs-comment">// show(a);</span><br>    <span class="hljs-keyword">for</span> (<span class="hljs-keyword">auto</span> it = a.<span class="hljs-built_in">begin</span>(); it != a.<span class="hljs-built_in">end</span>(); ++it) &#123;<br>        <span class="hljs-keyword">if</span> (*it &lt; INF) <span class="hljs-keyword">continue</span>;<br>        <span class="hljs-type">char</span> op = <span class="hljs-built_in">char</span>(*it - INF);<br>        ll p = *<span class="hljs-built_in">prev</span>(<span class="hljs-built_in">prev</span>(it)), q = *<span class="hljs-built_in">prev</span>(it);<br>        *it = <span class="hljs-built_in">cal</span>(p, q, op);<br>        a.<span class="hljs-built_in">erase</span>(<span class="hljs-built_in">prev</span>(it));<br>        a.<span class="hljs-built_in">erase</span>(<span class="hljs-built_in">prev</span>(it));<br>        <span class="hljs-comment">// show(a);</span><br>    &#125;<br>&#125;<br><br><span class="hljs-function"><span class="hljs-type">signed</span> <span class="hljs-title">main</span><span class="hljs-params">()</span> </span>&#123;<br>    <span class="hljs-built_in">init</span>();<br>    list&lt;ll&gt; a = <span class="hljs-built_in">dfs</span>(<span class="hljs-number">30</span>);<br>    <span class="hljs-comment">// show(a);</span><br>    <span class="hljs-built_in">work</span>(a);<br>    <span class="hljs-keyword">if</span> (a.<span class="hljs-built_in">empty</span>()) cout &lt;&lt; <span class="hljs-number">0</span>;<br>    <span class="hljs-keyword">else</span> <span class="hljs-built_in">show</span>(a);<br><br>    <span class="hljs-keyword">return</span> <span class="hljs-number">0</span>;<br>&#125;<br><br><span class="hljs-comment">/*</span><br><span class="hljs-comment"></span><br><span class="hljs-comment">5+6)*7^8)</span><br><span class="hljs-comment"></span><br><span class="hljs-comment">*/</span><br><br></code></pre></td></tr></table></figure><h4 id="双指针">双指针</h4><h4 id="离散化">离散化</h4>]]>
    </content>
    <id>https://hexo.dytchem.cn/2024/08/20/test003/</id>
    <link href="https://hexo.dytchem.cn/2024/08/20/test003/"/>
    <published>2024-08-20T04:51:19.000Z</published>
    <summary>
      <![CDATA[<hr />
<h3 id="代码与编译">代码与编译</h3>
<h4 id="编译选项">编译选项</h4>
<p>编译时加入以下命令：</p>
<figure class="highlight cpp"><table><tr><td]]>
    </summary>
    <title>我的ACM板子</title>
    <updated>2026-07-18T12:12:38.390Z</updated>
  </entry>
  <entry>
    <author>
      <name>Dytchem</name>
    </author>
    <category term="physics" scheme="https://hexo.dytchem.cn/categories/physics/"/>
    <category term="电路" scheme="https://hexo.dytchem.cn/tags/%E7%94%B5%E8%B7%AF/"/>
    <content>
      <![CDATA[<hr /><p>注意： 1. 本文相关教材：电路（慕课版 支持AR+H5交互）邹建龙 著人民邮电出版社 2. 本文为纯干货，建议配合课本复习，并辅以实战练习 3.本文无图，如有图片需求，请到课本对应章节查看 4.本文为了使某些内容更容易被理解和记忆，特地转换了表述 5.本文或许存在一些纰漏，读者应当仔细甄别、理性对待</p><hr /><h4 id="第1章-电路概论">第1章 电路概论</h4><p>已学内容全部为：线性电路、集总参数电路</p><hr /><h3 id="第一篇-电路基本概念和分析基础">==第一篇电路基本概念和分析基础==</h3><hr /><h4 id="第2章-电路基本概念">第2章 电路基本概念</h4><p>标定电压、电流方向：参考方向 √ 真实方向 ×</p><p>#关联参考方向 电流从电压正极流入 功率：<spanclass="math inline">\(p=ui\)</span> 关联参考方向下：<spanclass="math inline">\(p&gt;0\)</span>，实际吸收功率；<spanclass="math inline">\(p&lt;0\)</span>，实际发出功率。非关联反之。</p><p>#电路基本元件 （以下全为关联参考方向） * 电阻：<spanclass="math inline">\(u=Ri\)</span>，<spanclass="math inline">\(p=ui=i^2 R=\frac{u^2}{R}\)</span> * 电容：<spanclass="math inline">\(i=C\frac{\mathrm{d}u}{\mathrm{d}t}\)</span> *电感：<spanclass="math inline">\(u=L\frac{\mathrm{d}i}{\mathrm{d}t}\)</span> *独立电压源、独立电流源、电压/电流控制电压/电流源</p><p>#电路拓扑 支路<span class="math inline">\(b\)</span>，节点<spanclass="math inline">\(n\)</span>，网孔<spanclass="math inline">\(m=b-n+1\)</span> 串联、并联、其他</p><hr /><h4 id="第3章-电路基本定理">第3章 电路基本定理</h4><p>#基尔霍夫定律 * 电流定律（KCL）：节点电流代数和为<spanclass="math inline">\(0\)</span> → <spanclass="math inline">\(n-1\)</span>个独立方程 *电压定律（KVL）：回路电压代数和为<span class="math inline">\(0\)</span>→ <span class="math inline">\(m\)</span>个独立方程</p><hr /><h4 id="第4章-电路基本分析方法">第4章 电路基本分析方法</h4><p>#等效变换 对外等效、对内不等效 + 电阻等效 + 串联：<spanclass="math inline">\(R_\mathrm{eq}=\sum\limits_{i}{R_i}\)</span> +并联：<spanclass="math inline">\(\frac{1}{R_\mathrm{eq}}=\sum\limits_{i}{\frac{1}{R_i}}\)</span>+ △形→Y形：<span class="math inline">\(R_{ij}=R_i R_j\sum\limits_{k}{\frac{1}{R_k}}\)</span> + Y形→△形：<spanclass="math inline">\(R_i=\frac{R_{ij}R_{ik}}{R_{ij}+R_{ik}+R_{jk}}\)</span> * 电源等效 + 电压源串联<spanclass="math inline">\(u_{\mathrm{s}}\)</span>相加，电流源并联<spanclass="math inline">\(i_{\mathrm{s}}\)</span>相加 * 电源、电阻混合等效 +等效模型：电压源<spanclass="math inline">\(u_\mathrm{s}\)</span>与电阻<spanclass="math inline">\(R_u\)</span>并联 ⇆ 电流源<spanclass="math inline">\(i_\mathrm{s}\)</span>与电阻<spanclass="math inline">\(R_i\)</span>串联 + <spanclass="math inline">\(R_u=R_i\)</span>，<spanclass="math inline">\(i_\mathrm{s}=\frac{u_\mathrm{s}}{R_u}\)</span>，<spanclass="math inline">\(u_\mathrm{s}=i_\mathrm{s} R_i\)</span></p><p>#节点电压法 <span class="math inline">\(n-1\)</span>个方程：自导项 -互导项 = 电源产生电流项</p><p>#回路电流法 <span class="math inline">\(m\)</span>个方程：自阻项 -互阻项 = 电源产生电压项</p><p><em>以上内容建议实操练习，在实战中总结更多技巧</em></p><hr /><h4 id="第5章-电路定理">第5章 电路定理</h4><p>#线性定理 （用<spanclass="math inline">\(x\)</span>表示待求电压/电流，<spanclass="math inline">\(s_i\)</span>表示第<spanclass="math inline">\(i\)</span>个独立电压/电流源） * 叠加定理：<spanclass="math display">\[x=f(s_1,s_2,\ldots,s_n)\Rightarrowx=\sum\limits_{i}f(\delta_{i1}s_1,\delta_{i2}s_2,\ldots,\delta_{in}s_n)\]</span>* 齐性定理：（<span class="math inline">\(k\)</span>为常数）<spanclass="math display">\[x=f(k s_i)\Rightarrow x=kf(s_i)\]</span> *二者结合：<span class="math display">\[x=f(k_1 s_1,k_2 s_2,\ldots,k_ns_n)\Rightarrow x=\sum\limits_{i}k_if(\delta_{i1}s_1,\delta_{i2}s_2,\ldots,\delta_{in}s_n)\]</span></p><p>#替代定理 参量为<spanclass="math inline">\(u、i\)</span>的支路可被替换为电压源<spanclass="math inline">\(u_\mathrm{s}=u\)</span>，或电流源<spanclass="math inline">\(i_\mathrm{s}=i\)</span>，或电阻<spanclass="math inline">\(R=\frac{u}{i}\)</span></p><p>#戴维南定理线性含源一端口网络可以用一个电压源和一个电阻串联来等效，该电压源的电压为一端口网络的端口开路电压<spanclass="math inline">\(u_{\mathrm{oc}}\)</span>，该电阻的阻值为一端口网络内独立电源置零后的端口等效电阻<spanclass="math inline">\(R_{\mathrm{eq}}\)</span> 一步法：给端口接一个<spanclass="math inline">\(u_\mathrm{s}、i_\mathrm{s}\)</span>（非关联）的电源，最后可求得：<spanclass="math inline">\(u_\mathrm{s}=u_{\mathrm{oc}}+R_{\mathrm{eq}}i_\mathrm{s}\)</span></p><p>#诺顿定理 戴维南等效的“电流源版本”</p><p>最大功率传输：当<spanclass="math inline">\(R=R_{\mathrm{eq}}\)</span>时，<spanclass="math inline">\(P_{\max}=\frac{u_{\mathrm{oc}}^2}{4R_{\mathrm{eq}}}\)</span></p><p>#特勒根定理 * 定理一：关联参考方向下，<spanclass="math display">\[\sum\limits_{k=1}^{b}{u_k i_k}=0\]</span> *定理二：两对应电路<em>（规定见课本）</em>，<spanclass="math display">\[\sum\limits_{k=1}^{b}{u_k\hat{i}_k}=\sum\limits_{k=1}^{b}{\hat{u}_k i_k}=0\]</span> *定理二的推论：两对应电路，除线性电阻网络外，<spanclass="math display">\[\sum\limits_{k=1}^{r}{u_k\hat{i}_k}=\sum\limits_{k=1}^{r}{\hat{u}_k i_k}\]</span></p><p>#互易定理 对二端口网络的两端分别施加激励，<spanclass="math display">\[\frac{激励1}{响应1}=\frac{激励2}{响应2}\]</span></p><p>#对偶原理 <em>有兴趣请见课本</em></p><hr /><h3 id="第二篇-动态电路的时域分析">==第二篇 动态电路的时域分析==</h3><hr /><h4 id="第6章-动态电路的动态元件和微分方程">第6章动态电路的动态元件和微分方程</h4><p>#电容 VCR：<spanclass="math inline">\(i=C\frac{\mathrm{d}u}{\mathrm{d}t}\)</span> 或<spanclass="math inline">\(u(t)=u(t_0)+\frac{1}{C}\int_{t_0}^{t}i(\xi)\mathrm{d}\xi\)</span>能量：<span class="math inline">\(w=\frac{1}{2}Cu^2\)</span>等效变换：（与电阻相反） * 串联：<spanclass="math inline">\(\frac{1}{C_\mathrm{eq}}=\sum\limits_{i}{\frac{1}{C_i}}\)</span>* 并联：<spanclass="math inline">\(C_\mathrm{eq}=\sum\limits_{i}{C_i}\)</span>平行板电容器：<spanclass="math inline">\(C=\varepsilon\frac{S}{d}\)</span></p><p>#电感 VCR：<spanclass="math inline">\(u=C\frac{\mathrm{d}i}{\mathrm{d}t}\)</span> 或<spanclass="math inline">\(i(t)=i(t_0)+\frac{1}{L}\int_{t_0}^{t}u(\xi)\mathrm{d}\xi\)</span>能量：<span class="math inline">\(w=\frac{1}{2}Li^2\)</span>等效变换：（与电阻相反） * 串联：<spanclass="math inline">\(L_\mathrm{eq}=\sum\limits_{i}{L_i}\)</span> *并联：<spanclass="math inline">\(\frac{1}{L_\mathrm{eq}}=\sum\limits_{i}{\frac{1}{L_i}}\)</span></p><p>#动态电路的定解问题 * 微分方程：KVL + KCL + VCR 方程组联立 →关于电流/电压的<spanclass="math inline">\(n\)</span>阶常系数线性微分方程 * 初始条件：<spanclass="math inline">\(u_C(0_+)=u_C(0_-)\)</span> 以及 <spanclass="math inline">\(i_L(0_+)=i_L(0_-)\)</span> + 以上方程组 →关于电流/电压的<spanclass="math inline">\(n\)</span>阶常系数线性微分方程的<spanclass="math inline">\(n\)</span>个初始条件 * 特殊情况：<spanclass="math inline">\(u_C(t)\)</span>或<spanclass="math inline">\(i_L(t)\)</span>在<spanclass="math inline">\(t=0\)</span>时刻发生突变，此时应对某个方程进行<spanclass="math inline">\(t=0_-\)</span>到<spanclass="math inline">\(t=0_+\)</span>的积分，才能求出<spanclass="math inline">\(u_C(0_+)\)</span> 或 <spanclass="math inline">\(i_L(0_+)\)</span>。<em>(详见课本<spanclass="math inline">\(P_{135}\)</span>的例子）</em></p><hr /><h4 id="第7章-一阶动态电路">第7章 一阶动态电路</h4><p><em>电容、电感的充、放电方程见课本</em></p><p>#三要素公式 电容电压： <spanclass="math display">\[u_C(t)=u_C(\infty)+[u_C(0_+)-u_C(\infty)]\mathrm{e}^{-\frac{t}{\tau}}\]</span>其中： <span class="math display">\[\tau=CR_{\mathrm{eq}}\]</span>电感电流： <spanclass="math display">\[i_L(t)=i_L(\infty)+[i_L(0_+)-i_L(\infty)]\mathrm{e}^{-\frac{t}{\tau}}\]</span>其中： <spanclass="math display">\[\tau=\frac{L}{R_{\mathrm{eq}}}\]</span></p><p>#一阶电路的响应 由叠加定理得， <spanclass="math display">\[全响应=零状态响应+零输入响应\]</span> 阶跃函数：<span class="math display">\[\varepsilon \left( t \right) =\begin{cases}    0,t&lt;0\\    1,t&gt;0\\\end{cases}\]</span> 冲激函数： <spanclass="math display">\[\delta(t)=\frac{\mathrm{d}}{\mathrm{d}t}\varepsilon(t)\]</span>求解阶跃响应只需先求各组分阶跃函数的响应，再由叠加定理叠加便可得最终解。求解冲激响应只需先求解对应的阶跃响应，然后对阶跃响应求导便可得冲激响应。</p><hr /><h4 id="第8章-二阶动态电路">第8章 二阶动态电路</h4><p>定解问题为二阶微分方程</p><p>求解二阶微分方程： 特征方程 → 特征根<spanclass="math inline">\(\lambda_1,\lambda_2\)</span> → 齐次通解： <spanclass="math display">\[\lambda_1=\lambda_2 \Rightarrowy=(A+Bt)\mathrm{e}^{\lambda t}\]</span> <spanclass="math display">\[\lambda_1\ne\lambda_2 \Rightarrowy=\mathrm{Re}(A\mathrm{e}^{\lambda_1 t}+B\mathrm{e}^{\lambda_2t})\]</span><em>（这里是为了方便记忆，出现复指数则用欧拉公式展开成三角函数表示）</em></p><p>（如果是非齐次方程：凑出非齐次特解 → 原方程通解为：齐次通解 +非齐次特解）</p><p>最后：待定系数，由初始条件定解</p><p>#RLC串联电路的工作状态 * 过阻尼：<spanclass="math inline">\(R&gt;2\sqrt{\frac{L}{C}}\)</span> → 单调衰减 *临界阻尼：<span class="math inline">\(R=2\sqrt{\frac{L}{C}}\)</span> →单调衰减，但衰减相比于过阻尼更快 * 欠阻尼：<spanclass="math inline">\(0&lt;R&lt;2\sqrt{\frac{L}{C}}\)</span> → 震荡衰减* 零阻尼：<span class="math inline">\(R=0\)</span> →等幅振荡，不衰减</p><p><em>其他二阶电路，见课本</em></p><hr /><h3 id="第三篇-正弦交流电路">==第三篇 正弦交流电路==</h3><hr /><h4 id="第9章-正弦交流电路分析基础">第9章 正弦交流电路分析基础</h4><p>正弦量： <span class="math display">\[f(t)=F_\mathrm{m}\cos(\omegat+\varphi)=\mathrm{Re}[F_\mathrm{m}\mathrm{e}^{\mathrm{j}(\omegat+\varphi)}]\]</span> 振幅相量：（以电流为例） <spanclass="math display">\[\dot{I}_\mathrm{m}=I_\mathrm{m}\mathrm{e}^{\mathrm{j}\varphi}\]</span>#有效值相量 <spanclass="math display">\[\dot{I}=I\mathrm{e}^{\mathrm{j}\varphi}=I\angle\varphi\]</span>其中： <span class="math display">\[I=\frac{1}{T}\sqrt{\int_0^Ti^2(t)\mathrm{d}t}\]</span> 在正弦交流电路中，有： <spanclass="math display">\[I=\frac{I_\mathrm{m}}{\sqrt{2}}\]</span></p><p>#相量域中的VCR <span class="math display">\[\begin{array}{c}    \dot{U}_R=R\dot{I}_R\\    \dot{U}_L=\mathrm{j}\omega L\dot{I}_L\\    \dot{I}_C=\mathrm{j}\omega C\dot{U}_C\\\end{array}\]</span></p><p>#阻抗 <spanclass="math display">\[Z=\frac{\dot{U}}{\dot{I}}=R+\mathrm{j}X=|Z|\angle{\varphi_Z}=\frac{U}{I}\angle(\varphi_{u}-\varphi_{i})\]</span>对基本元件，有： <span class="math display">\[\begin{array}{c}    Z_R=R\\    Z_L=\mathrm{j}\omega L\\    Z_C=\frac{1}{\mathrm{j}\omega C}\\\end{array}\]</span></p><p>#导纳 <spanclass="math display">\[Y=\frac{1}{Z}=\frac{\dot{I}}{\dot{U}}=G+\mathrm{j}B\]</span></p><hr /><h4 id="第10章-正弦交流电路的相量分析法">第10章正弦交流电路的相量分析法</h4><p>#代数方法 具体方法同第一篇内容，只是变量从实数域变到了复数域</p><p>将时域正弦量转换为相量 → 用电路定理求解 → 将相量转换回正弦量</p><p>#相量图实际上是电路方程通过复数的几何意义映射到复平面中的首尾相接矢量多边形</p><p>列写方程 → 确定参考相量 → 依次绘制其他相量 →构成多边形，找几何关系，求解</p><p>重要关系： * 电阻电压与电流同相位，即：<spanclass="math inline">\(\varphi_{u}-\varphi_{i}=0\degree\)</span> *电感电压超前电流<spanclass="math inline">\(90\degree\)</span>，即：<spanclass="math inline">\(\varphi_{u}-\varphi_{i}=90\degree\)</span> *电容电压滞后电流<spanclass="math inline">\(90\degree\)</span>，即：<spanclass="math inline">\(\varphi_{u}-\varphi_{i}=-90\degree\)</span></p><p><em>以上内容建议实操练习，在实战中总结更多技巧</em></p><hr /><h4 id="第11章-正弦交流电路的功率">第11章 正弦交流电路的功率</h4><p>#瞬时功率 <span class="math display">\[p(t)=u(t)i(t)\]</span></p><p>#复功率 <spanclass="math display">\[\bar{S}=P+\mathrm{j}Q=UI\mathrm{e}^{\mathrm{j}(\varphi_{u}-\varphi_{i})}=\dot{U}\dot{I}^*=I^2Z=\frac{U^2}{Z^*}\]</span><em>（代入VCR即可推出电阻、电感、电容的复功率表达式，不建议死记）</em></p><p>#有功功率<spanclass="math display">\[P=\mathrm{Re}(\bar{S})=UI\cos(\varphi_{u}-\varphi_{i})\]</span>#最大有功功率传输 可变负载幅角和模值：当 <spanclass="math inline">\(Z=Z_\mathrm{eq}^*\)</span> 时，<spanclass="math inline">\(P_\max=\frac{U_\mathrm{oc}^2}{4R_\mathrm{eq}}\)</span>仅可变负载模值：当 <spanclass="math inline">\(|Z|=|Z_\mathrm{eq}|\)</span> 时，<spanclass="math inline">\(P_\max=\ldots\)</span></p><p>#无功功率<spanclass="math display">\[Q=\mathrm{Im}(\bar{S})=UI\sin(\varphi_{u}-\varphi_{i})\]</span></p><p>#视在功率 <span class="math display">\[S=|S|=UI\]</span></p><p>#功率因数 <spanclass="math display">\[\cos\varphi=\cos(\varphi_{u}-\varphi_{i})=\frac{P}{S}\]</span></p><p>#功率守恒 <span class="math inline">\(\bar{S}\)</span>守恒（对所有电路元件的代数和为<spanclass="math inline">\(0\)</span>），即 <spanclass="math inline">\(P,Q\)</span> 守恒 <spanclass="math inline">\(S\)</span> 不一定守恒</p><hr /><h3 id="第四篇-电路应用与拓展">==第四篇 电路应用与拓展==</h3><hr /><h4 id="第12章-三相电路">第12章 三相电路</h4><p>#三相 （正序，顺时针） <spanclass="math display">\[\dot{U}_\mathrm{A}=U\angle0\degree,\;\dot{U}_\mathrm{B}=U\angle-120\degree,\;\dot{U}_\mathrm{C}=U\angle120\degree\]</span>有： <spanclass="math display">\[\dot{U}_\mathrm{A}+\dot{U}_\mathrm{B}+\dot{U}_\mathrm{C}=0\]</span>相量图：略</p><p>注意区分：<em>（详见书）</em> * 相电压、相电流、线电压、线电流 *电压源/负载的Y形/△形接法</p><p>#对称三相电路 将△形变换为Y形 → 所有中性点<spanclass="math inline">\(\dot{U}_\mathrm{N&#39;}=0\)</span>，等效变换化简 →求解</p><p>#不对称三相电路 回归到一般的相量法求解</p><p>#功率表 读数：<spanclass="math inline">\(P=\mathrm{Re}(\dot{U}\dot{I}^*)\)</span>（注意：这里的 <span class="math inline">\(\dot{U}\)</span> 和 <spanclass="math inline">\(\dot{I}\)</span>不一定恰好是同一支路的，只有是同一支路<spanclass="math inline">\(P\)</span>才表示有功功率）</p><p>二瓦计法： <spanclass="math display">\[P_1+P_2=\mathrm{Re}(\dot{U}_\mathrm{AB}\dot{I}_\mathrm{A}^*)+\mathrm{Re}(\dot{U}_\mathrm{CB}\dot{I}_\mathrm{C}^*)=P_\mathrm{A}+P_\mathrm{B}+P_\mathrm{C}\]</span><em>详细的接法见课本</em></p><hr /><h4 id="第13章-磁耦合电路">第13章 磁耦合电路</h4><p>#同名端 同名端流入电流产生的磁场相互增强</p><p>#互感电压 电流、电压为关联参考方向，电流从同名端流入时： 时域： <spanclass="math display">\[\begin{cases}    u_1=L_1\frac{\mathrm{d}i_1}{\mathrm{d}t}+M\frac{\mathrm{d}i_2}{\mathrm{d}t}\\    u_2=L_2\frac{\mathrm{d}i_2}{\mathrm{d}t}+M\frac{\mathrm{d}i_1}{\mathrm{d}t}\\\end{cases}\]</span> 相量域： <span class="math display">\[\begin{cases}    \dot{U}_1=\mathrm{j}\omega L_1\dot{I}_1+\mathrm{j}\omegaM\dot{I}_2\\    \dot{U}_2=\mathrm{j}\omega L_2\dot{I}_2+\mathrm{j}\omegaM\dot{I}_1\\\end{cases}\]</span></p><p>其他情况，应 #判断互感电压的极性 ：自己线圈流入电流的端子对应对方线圈的同名端上的互感电压极性为<spanclass="math inline">\(+\)</span>。</p><p>#去耦等效 互感系数可以叠加到两个电感上（耦合同方向串联为<spanclass="math inline">\(+\)</span>，反之为<spanclass="math inline">\(-\)</span>），并在中间支路上叠加一个与前面的叠加项相反的电感。<em>（详见课本）</em></p><p>#变压器 耦合系数： <spanclass="math display">\[k=\frac{M}{\sqrt{L_1L_2}}\]</span> 全耦合：<spanclass="math inline">\(k=1\)</span></p><p>#阻抗变换 输入阻抗： <spanclass="math display">\[Z_\mathrm{in}=\mathrm{j}\omega L_1+\frac{(\omegaM)^2}{Z_2+\mathrm{j}\omega L_2}\]</span> 输出阻抗： <spanclass="math display">\[Z_\mathrm{out}=\mathrm{j}\omega L_2+\frac{(\omegaM)^2}{Z_1+\mathrm{j}\omega L_1}\]</span><em>（死记不到，建议现推）</em></p><p>去耦等效：连接变压器下方的两个端子，即可用上述方法进行去耦等效</p><p>#理想变压器 定义：无损耗、全耦合、<spanclass="math inline">\(L_1,L_2,M\rightarrow \infty\)</span>性质：（电流、电压为关联参考方向，电流从同名端流入时；如果不是，请添<spanclass="math inline">\(-\)</span>号来转换） * <spanclass="math inline">\(\frac{u_1}{u_2}=\frac{\dot{U}_1}{\dot{U}_2}=\frac{N_1}{N_2}=n\)</span>* <spanclass="math inline">\(\frac{i_1}{i_2}=\frac{\dot{I}_1}{\dot{I}_2}=-\frac{N_2}{N_1}=-\frac{1}{n}\)</span>* 输入功率等于输出功率 * 阻抗变换：<spanclass="math inline">\(Z_\mathrm{in}=\frac{N_1^2}{N_2^2}Z_2=n^2Z_2\)</span></p><hr /><h4 id="第14章-滤波器和谐振电路">第14章 滤波器和谐振电路</h4><p>#传递函数 <spanclass="math display">\[H(\mathrm{j}\omega)=\frac{输入信号相量}{输出信号相量}\]</span></p><p>#滤波器 分类：低通、高通、带通 截止角频率<spanclass="math inline">\(\omega_\mathrm{c}\)</span>：<spanclass="math inline">\(|H(\mathrm{j}\omega_\mathrm{c})|=\frac{1}{\sqrt{2}}\)</span>幅频特性曲线：<spanclass="math inline">\(|H(\mathrm{j}\omega)|-\omega\)</span> 图像</p><p>#谐振 定义：<spanclass="math inline">\(\mathrm{Im}(Z_\mathrm{eq})=0\)</span> 分类： *串联谐振 * <span class="math inline">\(Z=R+\mathrm{j}(\omegaL-\frac{1}{\omega C})=R\)</span> * <spanclass="math inline">\(\omega=\frac{1}{\sqrt{LC}}\)</span> *LC整体相当于短路 * 并联谐振 * <spanclass="math inline">\(Y=\frac{1}{R}+\mathrm{j}(\omega C-\frac{1}{\omegaL})=\frac{1}{R}\)</span> * <spanclass="math inline">\(\omega=\frac{1}{\sqrt{LC}}\)</span> *LC整体相当于开路</p><p>#品质因数 <spanclass="math display">\[Q=2\pi\frac{最大耗能}{一个周期储能}=\frac{U_L}{U_\mathrm{s}}或\frac{U_C}{U_\mathrm{s}}\]</span><span class="math inline">\(Q\)</span>越大，带宽越窄，幅频特性曲线越陡，频率选择性越高</p><p>串联谐振： <span class="math display">\[Q=\frac{\omegaL}{R}=\frac{1}{R\omega C}\]</span> 并联谐振： <spanclass="math display">\[Q=\frac{R}{\omega L}=R\omega C\]</span></p><hr /><h4 id="第15章-非正弦周期电路">第15章 非正弦周期电路</h4><p><em>傅里叶级数，详见课本</em></p><p>求解：先求各分量的响应，在运用叠加原理即可</p><p>#非正弦周期电路的有效值 <span class="math display">\[\begin{array}{c}    U=\sqrt{U_{0}^{2}+\sum\limits_{n=1}^r{U_{n}^{2}}}\\    I=\sqrt{I_{0}^{2}+\sum\limits_{n=1}^r{I_{n}^{2}}}\\\end{array}\]</span></p><p>#非正弦周期电路的平均功率 <spanclass="math display">\[P=P_{0}+\sum\limits_{n=1}^rP_{n}=I^2R=\frac{U^2}{R}\]</span></p><hr /><h4 id="第16章-二端口网络">第16章 二端口网络</h4><p>二端口网络的定义：<spanclass="math inline">\(i_1=i&#39;_1,\;i_2=i&#39;_2\)</span></p><p>#阻抗参数 <span class="math display">\[\left[ \begin{array}{c}    \dot{U}_1\\    \dot{U}_2\\\end{array} \right] =\boldsymbol{Z}\left[ \begin{array}{c}    \dot{I}_1\\    \dot{I}_2\\\end{array} \right]\]</span> #导纳参数 <span class="math display">\[\left[ \begin{array}{c}    \dot{I}_1\\    \dot{I}_2\\\end{array} \right] =\boldsymbol{Y}\left[ \begin{array}{c}    \dot{U}_1\\    \dot{U}_2\\\end{array} \right]\]</span> #混合参数 <span class="math display">\[\left[ \begin{array}{c}    \dot{U}_1\\    \dot{I}_2\\\end{array} \right] =\boldsymbol{H}\left[ \begin{array}{c}    \dot{I}_1\\    \dot{U}_2\\\end{array} \right]\]</span> #传输参数 <span class="math display">\[\left[ \begin{array}{c}    \dot{U}_1\\    \dot{I}_1\\\end{array} \right] =\boldsymbol{T}\left[ \begin{array}{c}    \dot{U}_2\\    -\dot{I}_2\\\end{array} \right]\]</span></p><p>性质： <span class="math display">\[\begin{array}{c}    Z_{12}=Z_{21}\\    Y_{12}=Y_{21}\\    H_{12}=-H_{21}\\    T_{11}T_{12}-T_{21}T_{12}=1\\\end{array}\]</span></p><p>等效电路：T形、Π形</p><p>连接方式：级联（<spanclass="math inline">\(\boldsymbol{T}=\boldsymbol{T}_1\boldsymbol{T}_2\)</span>）、串联、并联</p><hr /><h4 id="第17章-含有运算放大器的电路">第17章 含有运算放大器的电路</h4><p>#特性 对输入端： * 虚断：<spanclass="math inline">\(i_+=i_-\approx0\)</span> * 虚短：<spanclass="math inline">\(u_+\approx u_-\)</span></p><p>#含运放电路的求解 1. 完整标记虚短、虚断 2. 输入端列写KCL 3. 求解</p><p>这部分简单而易错，容易会列出错误的关系式，应当时刻小心。</p><p>要注意以下两点： * 运放是含源元件，不要在连接运放的回路上乱列KVL *运放输出端电流不满足虚断，不要在输出端乱列KCL</p><p><em>具体的电路实例详见课本</em></p><hr /><p>作者：黄得清 笔记软件：Obsidian 时间：2024/1/11字数：[[电路文件信息.png]]</p>]]>
    </content>
    <id>https://hexo.dytchem.cn/2024/08/20/test002/</id>
    <link href="https://hexo.dytchem.cn/2024/08/20/test002/"/>
    <published>2024-08-20T04:33:14.000Z</published>
    <summary>
      <![CDATA[<hr />
<p>注意： 1. 本文相关教材：电路（慕课版 支持AR+H5交互）邹建龙 著
人民邮电出版社 2. 本文为纯干货，建议配合课本复习，并辅以实战练习 3.
本文无图，如有图片需求，请到课本对应章节查看 4.
本文为了使某些内容更容易被理解和记忆，特地转换了表述]]>
    </summary>
    <title>电路知识点速记</title>
    <updated>2026-07-18T12:12:38.389Z</updated>
  </entry>
  <entry>
    <author>
      <name>Dytchem</name>
    </author>
    <category term="maths" scheme="https://hexo.dytchem.cn/categories/maths/"/>
    <category term="级数" scheme="https://hexo.dytchem.cn/tags/%E7%BA%A7%E6%95%B0/"/>
    <content>
      <![CDATA[<p><span class="math display">\[\left( \frac{1}{2}+\sum_{n=1}^{\infty}{\frac{1}{4n^2+1}} \right) \left(\frac{1}{2}+\sum_{n=1}^{\infty}{\frac{1}{4n^4+1}} \right) =\frac{\pi^2}{16}\]</span></p>]]>
    </content>
    <id>https://hexo.dytchem.cn/2024/08/20/test001/</id>
    <link href="https://hexo.dytchem.cn/2024/08/20/test001/"/>
    <published>2024-08-20T00:00:00.000Z</published>
    <summary>
      <![CDATA[<p><span class="math display">\[
\left( \frac{1}{2}+\sum_{n=1}^{\infty}{\frac{1}{4n^2+1}} \right)]]>
    </summary>
    <title>圆周率的一种无穷级数</title>
    <updated>2026-07-18T12:12:38.388Z</updated>
  </entry>
  <entry>
    <author>
      <name>Dytchem</name>
    </author>
    <category term="computer-science" scheme="https://hexo.dytchem.cn/categories/computer-science/"/>
    <category term="建站" scheme="https://hexo.dytchem.cn/tags/%E5%BB%BA%E7%AB%99/"/>
    <content>
      <![CDATA[<hr /><p>Welcome to <a href="https://hexo.io/">Hexo</a>! This is your veryfirst post. Check <a href="https://hexo.io/docs/">documentation</a> formore info. If you get any problems when using Hexo, you can find theanswer in <ahref="https://hexo.io/docs/troubleshooting.html">troubleshooting</a> oryou can ask me on <ahref="https://github.com/hexojs/hexo/issues">GitHub</a>.</p>]]>
    </content>
    <id>https://hexo.dytchem.cn/2024/08/19/hello-world/</id>
    <link href="https://hexo.dytchem.cn/2024/08/19/hello-world/"/>
    <published>2024-08-19T00:00:00.000Z</published>
    <summary>
      <![CDATA[<hr />
<p>Welcome to <a href="https://hexo.io/">Hexo</a>! This is your very
first post. Check <a]]>
    </summary>
    <title>Hello World</title>
    <updated>2026-07-18T12:12:38.385Z</updated>
  </entry>
</feed>
