<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>Sci_qud</title>
  
  <subtitle>突破了瓶颈，发现还有瓶盖qwq</subtitle>
  <link href="http://blog.wsq127.top/atom.xml" rel="self"/>
  
  <link href="http://blog.wsq127.top/"/>
  <updated>2025-08-05T06:42:22.141Z</updated>
  <id>http://blog.wsq127.top/</id>
  
  <author>
    <name>Sci_qud</name>
    
  </author>
  
  <generator uri="https://hexo.io/">Hexo</generator>
  
  <entry>
    <title>7.23 模拟赛 T6 证明</title>
    <link href="http://blog.wsq127.top/posts/49622/"/>
    <id>http://blog.wsq127.top/posts/49622/</id>
    <published>2025-08-05T06:33:09.600Z</published>
    <updated>2025-08-05T06:42:22.141Z</updated>
    
    <content type="html"><![CDATA[<h2 id="写在最前"><a href="#写在最前" class="headerlink" title="写在最前"></a>写在最前</h2><p>不写这一部分感觉难受所以请输入文字。<br>学长让我写我拖了半个月说是，然而感觉这场比赛是两千年前打得了。</p><h2 id="正文"><a href="#正文" class="headerlink" title="正文"></a>正文</h2><h3 id="题目大意："><a href="#题目大意：" class="headerlink" title="题目大意："></a>题目大意：</h3><blockquote><p>定义 $f_i$ 表示斐波那契数列第 $i$ 项，求对于任意一个 $x$，是否存在 $i,;j;(i &lt; j)$，使得 $f_x&#x3D;f_i^2+f_j^2$。如果存在，请输出 $i$ 最小的一组。</p></blockquote><hr><h3 id="引理"><a href="#引理" class="headerlink" title="引理"></a>引理</h3><blockquote><p>引理 1：<br>$f_i &#x3D; f_{i-1} + f_{i-2}$（请输入文字）</p></blockquote><blockquote><p>引理 2：<br>$f_{m + n} &#x3D; f_mf_{n+1}+f_{m-1}f_n$</p></blockquote><blockquote><p>引理 3：<br> $f_{2n} &#x3D; f_{n}^2 + 2f_n f_{n-1}$。</p></blockquote><hr><h3 id="证明"><a href="#证明" class="headerlink" title="证明"></a>证明</h3><p>不妨分类讨论。</p><h4 id="对于奇数"><a href="#对于奇数" class="headerlink" title="对于奇数"></a>对于奇数</h4><p>不妨将 $x$ 表示为 $2k + 1$，由引理 2 可知：<br>$$<br>\begin{align*}<br>f_{2k+1} &amp;&#x3D; f_{k}f_{k+2} + f_{k-1}f_{k+1} \<br>         &amp;&#x3D; f_k(f_k+f_{k+1}) + f_{k-1}f_{k+1} \<br>         &amp;&#x3D; f_k^2 + f_kf_{k+1} + f_{k-1}f_{k+1} \<br>         &amp;&#x3D; f_k^2 + f_{k+1}(f_k+f_{k-1}) \<br>         &amp;&#x3D; f_k^2 + f_{k+1}^2<br>\end{align*}<br>$$<br>所以，当 $x$ 是奇数时，$f_x &#x3D; f_k^2 + f_{k+1}^2$ 是一个解，其中 $k &#x3D; \lfloor\frac{x}{2}\rfloor$。存在性证毕。</p><p>接下来我们要证明这个东西的唯一性。<br>我们考虑将 $k$ 变大而 $k+1$ 变小，或者反过来。<br>我们有 $f_{k+2}^2 - f_{k+1}^2 &gt; f_{k+1}^2$。<br>这个结论可以这样证明：<br>$$<br>\begin{align*}<br>f_{k+2}^2 - f_{k+1}^2 &amp;&#x3D; (f_{k+2}-f_{k+1})(f_{k+2}+f_{k+1}) \<br>                       &amp;&#x3D; f_k (f_{k+3})<br>\end{align*}<br>$$<br>因为 $f_k, f_{k+3}&gt;0$，所以 $f_k(f_{k+3})&gt;0$。并且 $f_{k+1}^2 &lt; f_{k+2}^2 - f_{k+1}^2$。<br>所以 $f_{k+1}^2$ 的增大量大于 $f_{k}^{2}$，所以不会存在一个比 $k+1$ 更大的数满足条件。<br>故 $f_n&#x3D;f_{\lfloor\frac{n}{2}\rfloor}^2+f_{\lfloor\frac{n}{2}\rfloor+1}^2$ 为唯一解。</p><hr><h4 id="对于偶数"><a href="#对于偶数" class="headerlink" title="对于偶数"></a>对于偶数</h4><p>不妨将 $x$ 表示为 $2k$。<br>由引理 3 可知：<br>$f_{2k} &#x3D; f_{k}^2 + 2f_k f_{k-1}$。<br>我们现在已经构造出了一个 $f_{k}^2$，则需要考虑 $2f_{k}f_{k-1}$ 是否为某一个斐波那契数的平方。<br>根据斐波那契数列的性质，对于 $n&gt;3$，我们有 $f_n &lt; 2f_{n-1}$ 和 $f_{n+1} &gt; 2f_{n-1}$。<br>因此 $2f_{k}f_{k-1}$ 不可能为某一个斐波那契数的平方。  </p><p>接下来我们考虑 $f_{2k} &#x3D; f_{k’}^2+f_j^2$ 是否可能存在。<br>根据引理 3，我们有 $f_{2k} &#x3D; f_k^2 + 2f_k f_{k-1}$。<br>由于 $f_k, f_{k-1} &gt; 0$，所以 $f_{2k} &gt; f_k^2$。<br>并且，我们有 $f_{2k} &lt; f_{k+1}^2$。<br>证明如下：<br>$$<br>\begin{align*}<br>f_{k+1}^2 - f_{2k} &amp;&#x3D; f_{k+1}^2 - (f_k^2 + 2f_k f_{k-1}) \<br>                   &amp;&#x3D; (f_k+f_{k-1})^2 - f_k^2 - 2f_k f_{k-1} \<br>                   &amp;&#x3D; f_k^2+2f_kf_{k-1}+f_{k-1}^2 - f_k^2 - 2f_k f_{k-1} \<br>                   &amp;&#x3D; f_{k-1}^2 &gt; 0<br>\end{align*}<br>$$<br>所以 $f_k^2 &lt; f_{2k} &lt; f_{k+1}^2$。<br>这意味着 $f_{2k}$ 夹在两个相邻斐波那契数的平方之间。<br>对于任意一个正整数 $k’$，如果 $k’ \ge k+1$，那么 $f_{k’}^2 \ge f_{k+1}^2 &gt; f_{2k}$。所以 $f_{k’}^2$ 加上任何正数都会大于 $f_{2k}$。<br>如果 $k’ &lt; k$，我们记 $\Delta&#x3D;f_{2k}-f_{k’}^2$。<br>因为 $f_{k’}^2 &lt; f_k^2$，所以 $\Delta &gt; f_{2k}-f_k^2 &#x3D; 2f_k f_{k-1}$。<br>而 $f_k^2 &lt; \Delta &lt; f_{k+1}^2$。<br>所以 $\Delta$ 夹在两个相邻斐波那契数的平方之间，因此 $\Delta$ 无法被表示为一个斐波那契数的平方。<br>故，当 $x$ 为偶数时，不存在满足条件的解。</p><p>综上，有<br>当 $x$ 为偶数时，不存在两个数 $i$ 和 $j$ 使得它们满足 $i&gt;j$ 且 $f_{x}&#x3D;f_{i}^{2}+f_{j}^{2}$。<br>当 $x$ 为奇数时，当且仅当 $i&#x3D;\lfloor\frac{x}{2}\rfloor+1$, $j&#x3D;\lfloor\frac{x}{2}\rfloor$ 时满足 $i&gt;j$ 且 $f_{x}&#x3D;f_{i}^{2}+f_{j}^{2}$。</p>]]></content>
    
    
      
      
    <summary type="html">&lt;h2 id=&quot;写在最前&quot;&gt;&lt;a href=&quot;#写在最前&quot; class=&quot;headerlink&quot; title=&quot;写在最前&quot;&gt;&lt;/a&gt;写在最前&lt;/h2&gt;&lt;p&gt;不写这一部分感觉难受所以请输入文字。&lt;br&gt;学长让我写我拖了半个月说是，然而感觉这场比赛是两千年前打得了。&lt;/p&gt;
&lt;h2 </summary>
      
    
    
    
    <category term="OI" scheme="http://blog.wsq127.top/categories/OI/"/>
    
    
    <category term="OI" scheme="http://blog.wsq127.top/tags/OI/"/>
    
    <category term="C++" scheme="http://blog.wsq127.top/tags/C/"/>
    
    <category term="数论" scheme="http://blog.wsq127.top/tags/%E6%95%B0%E8%AE%BA/"/>
    
    <category term="数学" scheme="http://blog.wsq127.top/tags/%E6%95%B0%E5%AD%A6/"/>
    
    <category term="模拟赛" scheme="http://blog.wsq127.top/tags/%E6%A8%A1%E6%8B%9F%E8%B5%9B/"/>
    
    <category term="提高组" scheme="http://blog.wsq127.top/tags/%E6%8F%90%E9%AB%98%E7%BB%84/"/>
    
  </entry>
  
  <entry>
    <title>分块</title>
    <link href="http://blog.wsq127.top/posts/44007/"/>
    <id>http://blog.wsq127.top/posts/44007/</id>
    <published>2025-06-06T10:46:06.332Z</published>
    <updated>2025-06-27T14:55:28.450Z</updated>
    
    <content type="html"><![CDATA[<h2 id="写在最前"><a href="#写在最前" class="headerlink" title="写在最前"></a>写在最前</h2><p>发现文章被吃掉了好多，先重写一篇分块吧</p><p>众所周知某知名大佬 <del>（DeepSeek）</del>  说过这么一句话：</p><blockquote><p>当你不会写线段树的时候，分块是你的救世主；当你学会线段树之后，分块是你的白月光。</p></blockquote><p><del>所以我是分块的勾！</del></p><h3 id="核心思想"><a href="#核心思想" class="headerlink" title="核心思想"></a>核心思想</h3><p>分块的核心思想其实很简单：将序列分成若干块，对整块进行<strong>整体处理</strong>，对零散的部分进行<strong>暴力处理</strong>。</p><p>那么具体分多少块呢，不妨分析一下复杂度：</p><ul><li>假设我们序列长为 $n$，块长为 $m$</li><li>查询操作：<ul><li>对于整块，我们需要枚举每一个块，复杂度即为 $O(\frac{n}{m})$</li><li>对于零散的部分，我们暴力枚举，因为块长为 $m$，所以复杂度即为 $O(m)$</li></ul></li><li>修改同理</li><li>那么整体最坏复杂度即为 $O(\frac{n}{m}+m)$</li><li>根据均值不等式 $\frac{a+b}{2} \ge \sqrt{ab}$ 可知，当 $\frac{n}{m}&#x3D;m$ 即 $m &#x3D; \sqrt{n}$ 时，复杂度最优</li></ul><p>故当块长为 $\sqrt{m}$ 时复杂度最优，为 $O(\sqrt{n})$</p><p>不难发现不如线段树（？</p><p>那我们为什么要用粪块呢？</p><blockquote><p>虽然分块常被称为”优雅的暴力”，但它绝不仅仅是暴力那么简单。分块真正的魅力在于：</p><ol><li><strong>灵活性</strong>：可以维护很多线段树难以维护的信息</li><li><strong>可扩展性</strong>：可以轻松支持各种复杂的区间操作</li><li><strong>调试友好</strong>：比起线段树的递归，分块的逻辑更加直观，且不需要懒标记下传等操作</li></ol></blockquote><p>——by DeepSeek</p><p>所以当你被线段树的标记下传折磨得死去活来时，不妨试试分块（</p><h2 id="实现"><a href="#实现" class="headerlink" title="实现"></a>实现</h2><h3 id="初始化"><a href="#初始化" class="headerlink" title="初始化"></a>初始化</h3><p>不难发现如果块长为 $m$，那么第 $i$ 个块的 $id$ 即为 <code>(i - 1) / m + 1</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><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">fenkuai</span>(<span class="type">int</span> _n, <span class="type">int</span> _a[]) &#123;</span><br><span class="line">    n = _n;</span><br><span class="line">    m = <span class="built_in">sqrt</span>(n); </span><br><span class="line">    <span class="keyword">for</span>(<span class="type">int</span> i = <span class="number">1</span>; i &lt;= n; i++) &#123;</span><br><span class="line">        id[i] = (i - <span class="number">1</span>) / m + <span class="number">1</span>;</span><br><span class="line">        a[i] = _a[i];</span><br><span class="line">        sum[id[i]] += a[i];</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h4 id="区间修改"><a href="#区间修改" class="headerlink" title="区间修改"></a>区间修改</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></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="type">void</span> <span class="title">modify</span><span class="params">(<span class="type">int</span> l, <span class="type">int</span> r, <span class="type">int</span> x)</span> </span>&#123;</span><br><span class="line">    <span class="type">int</span> L = id[l], R = id[r];</span><br><span class="line">    <span class="comment">// 在一个块</span></span><br><span class="line">    <span class="keyword">if</span>(L == R) &#123;</span><br><span class="line">        <span class="keyword">for</span>(<span class="type">int</span> i = l; i &lt;= r; i++) &#123;</span><br><span class="line">            a[i] += x;</span><br><span class="line">            sum[L] += x;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">return</span>;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="comment">// 处理左边零散的部分</span></span><br><span class="line">    <span class="keyword">for</span>(<span class="type">int</span> i = l; id[i] == L; i++) &#123; </span><br><span class="line">        a[i] += x; </span><br><span class="line">        sum[L] += x; </span><br><span class="line">    &#125;</span><br><span class="line">    <span class="comment">// 处理中间整块</span></span><br><span class="line">    <span class="keyword">for</span>(<span class="type">int</span> i = L + <span class="number">1</span>; i &lt; R; i++) &#123; </span><br><span class="line">        tag[i] += x;  <span class="comment">// 标记整块的修改</span></span><br><span class="line">        sum[i] += m * x; </span><br><span class="line">    &#125;</span><br><span class="line">    <span class="comment">// 处理右边零散的部分</span></span><br><span class="line">    <span class="keyword">for</span>(<span class="type">int</span> i = r; id[i] == R; i--) &#123; </span><br><span class="line">        a[i] += x; </span><br><span class="line">        sum[R] += x; </span><br><span class="line">    &#125;</span><br><span class="line">&#125; </span><br></pre></td></tr></table></figure><h4 id="区间查询"><a href="#区间查询" class="headerlink" title="区间查询"></a>区间查询</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></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="type">int</span> <span class="title">query</span><span class="params">(<span class="type">int</span> l, <span class="type">int</span> r)</span> </span>&#123;</span><br><span class="line">    <span class="type">int</span> ans = <span class="number">0</span>;</span><br><span class="line">    <span class="type">int</span> L = id[l], R = id[r];</span><br><span class="line">    <span class="comment">// 在一个块</span></span><br><span class="line">    <span class="keyword">if</span>(L == R) &#123;</span><br><span class="line">        ans += tag[L] * (r - l + <span class="number">1</span>);  <span class="comment">// 加上标记</span></span><br><span class="line">        <span class="keyword">for</span>(<span class="type">int</span> i = l; i &lt;= r; i++) </span><br><span class="line">            ans += a[i];</span><br><span class="line">        <span class="keyword">return</span> ans;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="comment">// 处理左边零散的部分</span></span><br><span class="line">    <span class="keyword">for</span>(<span class="type">int</span> i = l; id[i] == L; i++) &#123; </span><br><span class="line">        ans += a[i]; </span><br><span class="line">        ans += tag[L];  <span class="comment">// 加上标记</span></span><br><span class="line">    &#125;</span><br><span class="line">    <span class="comment">// 处理中间整块</span></span><br><span class="line">    <span class="keyword">for</span>(<span class="type">int</span> i = L + <span class="number">1</span>; i &lt; R; i++) &#123;</span><br><span class="line">        ans += sum[i];</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="comment">// 处理右边零散的部分</span></span><br><span class="line">    <span class="keyword">for</span>(<span class="type">int</span> i = r; id[i] == R; i--) &#123; </span><br><span class="line">        ans += a[i]; </span><br><span class="line">        ans += tag[R];  <span class="comment">// 加上标记</span></span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> ans;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h3 id="完整代码"><a href="#完整代码" class="headerlink" title="完整代码"></a>完整代码</h3><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><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></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">fenkuai</span> &#123;</span><br><span class="line"><span class="type">int</span> n, len;</span><br><span class="line"><span class="type">int</span> a[N];</span><br><span class="line"><span class="type">int</span> id[N];</span><br><span class="line"><span class="type">int</span> tag[N];</span><br><span class="line"><span class="type">int</span> sum[N];</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line"><span class="built_in">fenkuai</span>(<span class="type">int</span> _n, <span class="type">int</span> _a[]) &#123;</span><br><span class="line">n = _n;</span><br><span class="line">len = <span class="built_in">sqrt</span>(n);</span><br><span class="line"><span class="keyword">for</span>(<span class="type">int</span> i = <span class="number">1</span>; i &lt;= n; i++) &#123;</span><br><span class="line">id[i] = (i - <span class="number">1</span>) / len + <span class="number">1</span>;</span><br><span class="line">a[i] = _a[i];</span><br><span class="line">            sum[id[i]] += a[i];</span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">modify</span><span class="params">(<span class="type">int</span> l, <span class="type">int</span> r, <span class="type">int</span> x)</span> </span>&#123;</span><br><span class="line"><span class="type">int</span> L = id[l], R = id[r];</span><br><span class="line"><span class="keyword">if</span>(L == R) &#123;</span><br><span class="line"><span class="keyword">for</span>(<span class="type">int</span> i = l; i &lt;= r; i++) &#123;</span><br><span class="line">a[i] += x;</span><br><span class="line">sum[L] += x;</span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">return</span> ;</span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">for</span>(<span class="type">int</span> i = l; id[i] == L; i++) &#123; a[i] += x; sum[L] += x; &#125;</span><br><span class="line"><span class="keyword">for</span>(<span class="type">int</span> i = L + <span class="number">1</span>; i &lt; R; i++) &#123; tag[i] += x; sum[i] += len * x; &#125;</span><br><span class="line"><span class="keyword">for</span>(<span class="type">int</span> i = r; id[i] == R; i--) &#123; a[i] += x; sum[R] += x; &#125;</span><br><span class="line">&#125;</span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">query</span><span class="params">(<span class="type">int</span> l, <span class="type">int</span> r)</span> </span>&#123;</span><br><span class="line"><span class="type">int</span> ans = <span class="number">0</span>;</span><br><span class="line"><span class="type">int</span> L = id[l], R = id[r];</span><br><span class="line"><span class="keyword">if</span>(L == R) &#123;</span><br><span class="line">ans += tag[L] * (r - l + <span class="number">1</span>);</span><br><span class="line"><span class="keyword">for</span>(<span class="type">int</span> i = l; i &lt;= r; i++) </span><br><span class="line">ans += a[i];</span><br><span class="line"><span class="keyword">return</span> ans;</span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">for</span>(<span class="type">int</span> i = l; id[i] == L; i++) &#123; ans += a[i]; ans += tag[L]; &#125;</span><br><span class="line"><span class="keyword">for</span>(<span class="type">int</span> i = L + <span class="number">1</span>; i &lt; R; i++) &#123;ans += sum[i];&#125;</span><br><span class="line"><span class="keyword">for</span>(<span class="type">int</span> i = r; id[i] == R; i--) &#123; ans += a[i]; ans += tag[R]; &#125;</span><br><span class="line"><span class="keyword">return</span> ans;</span><br><span class="line">&#125;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><h2 id="例题"><a href="#例题" class="headerlink" title="例题"></a>例题</h2><blockquote><p><del>世界上没有分块解决不了的题，如果有，那就多分几块</del></p></blockquote><h3 id="P3373-【模板】线段树-2"><a href="#P3373-【模板】线段树-2" class="headerlink" title="P3373 【模板】线段树 2"></a><a href="https://www.luogu.com.cn/problem/P3373">P3373 【模板】线段树 2</a></h3><p>没错这是分块题👍</p><p>首先你得会这题线段树做法的 ‘tag’处理，即先乘后加，这里不过多赘述，发现使用粪块的话不好直接对零散的部分加上标记，所以我们直接对零散的部分一整个块修改</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><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></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">fenkuai</span> &#123;</span><br><span class="line"><span class="type">int</span> n, m;</span><br><span class="line"><span class="type">int</span> a[N];</span><br><span class="line"><span class="type">int</span> id[N];</span><br><span class="line"><span class="type">int</span> tag_add[N];</span><br><span class="line"><span class="type">int</span> tag_mul[N];</span><br><span class="line"><span class="type">int</span> sum[N];</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line"><span class="built_in">fenkuai</span>(<span class="type">int</span> _n, <span class="type">int</span> _a[]) &#123;</span><br><span class="line">n = _n;</span><br><span class="line">m = <span class="built_in">sqrt</span>(n);</span><br><span class="line"><span class="keyword">for</span>(<span class="type">int</span> i = <span class="number">1</span>; i &lt;= n; i++) &#123;</span><br><span class="line">id[i] = (i - <span class="number">1</span>) / m + <span class="number">1</span>;</span><br><span class="line">a[i] = _a[i];</span><br><span class="line">            (sum[id[i]] += a[i]) %= Mod;</span><br><span class="line">tag_add[i] = <span class="number">0</span>; tag_mul[i] = <span class="number">1</span>;</span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">modify_add</span><span class="params">(<span class="type">int</span> l, <span class="type">int</span> r, <span class="type">int</span> x)</span> </span>&#123;</span><br><span class="line"><span class="type">int</span> L = id[l], R = id[r];</span><br><span class="line"><span class="keyword">if</span>(L == R) &#123;</span><br><span class="line">sum[L] = <span class="number">0</span>;</span><br><span class="line"><span class="keyword">for</span>(<span class="type">int</span> i = (L - <span class="number">1</span>) * m + <span class="number">1</span>; i &lt;= L * m; i++) &#123;</span><br><span class="line">(a[i] = a[i] * tag_mul[L] % Mod + tag_add[L]) %= Mod;</span><br><span class="line"><span class="keyword">if</span>(l &lt;= i &amp;&amp; i &lt;= r)</span><br><span class="line">(a[i] += x) %= Mod;</span><br><span class="line">(sum[L] += a[i]) %= Mod;</span><br><span class="line">&#125;</span><br><span class="line">tag_mul[L] = <span class="number">1</span>;</span><br><span class="line">tag_add[L] = <span class="number">0</span>;</span><br><span class="line"><span class="keyword">return</span> ;</span><br><span class="line">&#125;</span><br><span class="line">sum[L] = <span class="number">0</span>;</span><br><span class="line"><span class="keyword">for</span>(<span class="type">int</span> i = (L - <span class="number">1</span>) * m + <span class="number">1</span>; i &lt;= L * m; i++) &#123;</span><br><span class="line">(a[i] = a[i] * tag_mul[L] % Mod + tag_add[L]) %= Mod;</span><br><span class="line"><span class="keyword">if</span>(l &lt;= i &amp;&amp; i &lt;= r)</span><br><span class="line">(a[i] += x) %= Mod;</span><br><span class="line">(sum[L] += a[i]) %= Mod;</span><br><span class="line">&#125;</span><br><span class="line">tag_mul[L] = <span class="number">1</span>;</span><br><span class="line">tag_add[L] = <span class="number">0</span>;</span><br><span class="line"><span class="keyword">for</span>(<span class="type">int</span> i = L + <span class="number">1</span>; i &lt; R; i++) &#123;</span><br><span class="line">(sum[i] += m * x) %= Mod;</span><br><span class="line">tag_add[i] += x;</span><br><span class="line">&#125;</span><br><span class="line">sum[R] = <span class="number">0</span>;</span><br><span class="line"><span class="keyword">for</span>(<span class="type">int</span> i = (R - <span class="number">1</span>) * m + <span class="number">1</span>; i &lt;= R * m; i++) &#123;</span><br><span class="line">(a[i] = a[i] * tag_mul[R] % Mod + tag_add[R]) %= Mod;</span><br><span class="line"><span class="keyword">if</span>(l &lt;= i &amp;&amp; i &lt;= r)</span><br><span class="line">(a[i] += x) %= Mod;</span><br><span class="line">(sum[R] += a[i]) %= Mod;</span><br><span class="line">&#125;</span><br><span class="line">tag_mul[R] = <span class="number">1</span>;</span><br><span class="line">tag_add[R] = <span class="number">0</span>;</span><br><span class="line">&#125;</span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">modify_mul</span><span class="params">(<span class="type">int</span> l, <span class="type">int</span> r, <span class="type">int</span> x)</span> </span>&#123;</span><br><span class="line"><span class="type">int</span> L = id[l], R = id[r];</span><br><span class="line"><span class="keyword">if</span>(L == R) &#123;</span><br><span class="line">sum[L] = <span class="number">0</span>;</span><br><span class="line"><span class="keyword">for</span>(<span class="type">int</span> i = (L - <span class="number">1</span>) * m + <span class="number">1</span>; i &lt;= L * m; i++) &#123;</span><br><span class="line">(a[i] = a[i] * tag_mul[L] % Mod + tag_add[L]) %= Mod;</span><br><span class="line"><span class="keyword">if</span>(l &lt;= i &amp;&amp; i &lt;= r)</span><br><span class="line">(a[i] *= x) %= Mod;</span><br><span class="line">(sum[L] += a[i]) %= Mod;</span><br><span class="line">&#125;</span><br><span class="line">tag_mul[L] = <span class="number">1</span>;</span><br><span class="line">tag_add[L] = <span class="number">0</span>;</span><br><span class="line"><span class="keyword">return</span> ;</span><br><span class="line">&#125;</span><br><span class="line">sum[L] = <span class="number">0</span>;</span><br><span class="line"><span class="keyword">for</span>(<span class="type">int</span> i = (L - <span class="number">1</span>) * m + <span class="number">1</span>; i &lt;= L * m; i++) &#123;</span><br><span class="line">(a[i] = a[i] * tag_mul[L] % Mod + tag_add[L]) %= Mod;</span><br><span class="line"><span class="keyword">if</span>(l &lt;= i &amp;&amp; i &lt;= r)</span><br><span class="line">(a[i] *= x) %= Mod;</span><br><span class="line">(sum[L] += a[i]) %= Mod;</span><br><span class="line">&#125;</span><br><span class="line">tag_mul[L] = <span class="number">1</span>;</span><br><span class="line">tag_add[L] = <span class="number">0</span>;</span><br><span class="line"><span class="keyword">for</span>(<span class="type">int</span> i = L + <span class="number">1</span>; i &lt; R; i++) &#123;</span><br><span class="line">(sum[i] *= x) %= Mod;</span><br><span class="line">(tag_add[i] *= x) %= Mod;</span><br><span class="line">(tag_mul[i] *= x) %= Mod;</span><br><span class="line">&#125;</span><br><span class="line">sum[R] = <span class="number">0</span>;</span><br><span class="line"><span class="keyword">for</span>(<span class="type">int</span> i = (R - <span class="number">1</span>) * m + <span class="number">1</span>; i &lt;= R * m; i++) &#123;</span><br><span class="line">(a[i] = a[i] * tag_mul[R] % Mod + tag_add[R]) %= Mod;</span><br><span class="line"><span class="keyword">if</span>(l &lt;= i &amp;&amp; i &lt;= r)</span><br><span class="line">(a[i] *= x) %= Mod;</span><br><span class="line">(sum[R] += a[i]) %= Mod;</span><br><span class="line">&#125;</span><br><span class="line">tag_mul[R] = <span class="number">1</span>;</span><br><span class="line">tag_add[R] = <span class="number">0</span>;</span><br><span class="line">&#125;</span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">query</span><span class="params">(<span class="type">int</span> l, <span class="type">int</span> r)</span> </span>&#123;</span><br><span class="line"><span class="type">int</span> ans = <span class="number">0</span>;</span><br><span class="line"><span class="type">int</span> L = id[l], R = id[r];</span><br><span class="line"><span class="keyword">if</span>(L == R) &#123;</span><br><span class="line"><span class="keyword">for</span>(<span class="type">int</span> i = l; i &lt;= r; i++) </span><br><span class="line">(ans += a[i] * tag_mul[L] % Mod + tag_add[L]) %= Mod;</span><br><span class="line"><span class="keyword">return</span> ans;</span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">for</span>(<span class="type">int</span> i = l; id[i] == L; i++)</span><br><span class="line">(ans += a[i] * tag_mul[L] % Mod + tag_add[L]) %= Mod;</span><br><span class="line"><span class="keyword">for</span>(<span class="type">int</span> i = L + <span class="number">1</span>; i &lt; R; i++)</span><br><span class="line">(ans += sum[i]) %= Mod;</span><br><span class="line"><span class="keyword">for</span>(<span class="type">int</span> i = r; id[i] == R; i--)</span><br><span class="line">(ans += a[i] * tag_mul[R] % Mod + tag_add[R]) %= Mod;</span><br><span class="line"><span class="keyword">return</span> ans;</span><br><span class="line">&#125;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><h3 id="P4145-上帝造题的七分钟-2-花神游历各国"><a href="#P4145-上帝造题的七分钟-2-花神游历各国" class="headerlink" title="P4145 上帝造题的七分钟 2 &#x2F; 花神游历各国"></a><a href="https://www.luogu.com.cn/problem/P4145">P4145 上帝造题的七分钟 2 &#x2F; 花神游历各国</a></h3><p>观察数据范围</p><blockquote><p>对于 $100%$ 的数据，$1\le n,m\le 10^5$，$1\le l,r\le n$，数列中的数大于 $0$，且不超过 $10^{12}$。</p></blockquote><p>发现最多开根号 $6$ 次，然后就会变成 $1$，所以我们可以直接暴力开根号，然后变成 $1$ 后直接跳过：</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><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></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">fenkuai</span> &#123;</span><br><span class="line">    <span class="type">int</span> n, m;</span><br><span class="line">    <span class="type">int</span> a[N];</span><br><span class="line">    <span class="type">int</span> id[N];</span><br><span class="line">    <span class="type">int</span> tag[N];</span><br><span class="line">    <span class="type">int</span> sum[N];</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="built_in">fenkuai</span>(<span class="type">int</span> _n, <span class="type">int</span> _a[]) &#123;</span><br><span class="line">        n = _n;</span><br><span class="line">        m = <span class="built_in">sqrt</span>(n);</span><br><span class="line">        <span class="keyword">for</span>(<span class="type">int</span> i = <span class="number">1</span>; i &lt;= n; i++) &#123;</span><br><span class="line">            id[i] = (i - <span class="number">1</span>) / m + <span class="number">1</span>;</span><br><span class="line">            a[i] = _a[i];</span><br><span class="line">            sum[id[i]] += a[i];</span><br><span class="line">            tag[i] = <span class="number">1</span>;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="function"><span class="type">void</span> <span class="title">modify</span><span class="params">(<span class="type">int</span> l, <span class="type">int</span> r)</span> </span>&#123;</span><br><span class="line">        <span class="type">int</span> L = id[l], R = id[r];</span><br><span class="line">        <span class="keyword">if</span>(L == R) &#123;</span><br><span class="line"><span class="keyword">for</span>(<span class="type">int</span> i = l; i &lt;= r; i++) &#123;</span><br><span class="line">sum[L] -= a[i];</span><br><span class="line">a[i] = <span class="built_in">sqrt</span>(a[i]);</span><br><span class="line">sum[L] += a[i];</span><br><span class="line">&#125;</span><br><span class="line">            <span class="keyword">return</span> ;</span><br><span class="line">        &#125;</span><br><span class="line"><span class="keyword">if</span>(tag[L]) &#123;</span><br><span class="line"><span class="keyword">for</span>(<span class="type">int</span> i = l; id[i] == L; i++) &#123;</span><br><span class="line">sum[L] -= a[i];</span><br><span class="line">a[i] = <span class="built_in">sqrt</span>(a[i]);</span><br><span class="line">sum[L] += a[i];</span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">if</span>(sum[L] == m)</span><br><span class="line">tag[L] = <span class="number">0</span>;</span><br><span class="line">&#125;</span><br><span class="line">        <span class="keyword">for</span>(<span class="type">int</span> i = L + <span class="number">1</span>; i &lt; R; i++) &#123;</span><br><span class="line">            <span class="keyword">if</span>(tag[i]) &#123;</span><br><span class="line">                <span class="keyword">for</span>(<span class="type">int</span> j = m * (i - <span class="number">1</span>) + <span class="number">1</span>; j &lt;= i * m; j++) &#123;</span><br><span class="line">sum[i] -= a[j];</span><br><span class="line">                    a[j] = <span class="built_in">sqrt</span>(a[j]);</span><br><span class="line">                    sum[i] += a[j];</span><br><span class="line">                &#125;</span><br><span class="line"><span class="keyword">if</span>(sum[i] == m)</span><br><span class="line">tag[i] = <span class="number">0</span>;</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line"><span class="keyword">if</span>(tag[R]) &#123;</span><br><span class="line"><span class="keyword">for</span>(<span class="type">int</span> i = r; id[i] == R; i--) &#123;</span><br><span class="line">sum[R] -= a[i];</span><br><span class="line">a[i] = <span class="built_in">sqrt</span>(a[i]);</span><br><span class="line">sum[R] += a[i];</span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">if</span>(sum[R] == m)</span><br><span class="line">tag[R] = <span class="number">0</span>;</span><br><span class="line">&#125;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="function"><span class="type">int</span> <span class="title">query</span><span class="params">(<span class="type">int</span> l, <span class="type">int</span> r)</span> </span>&#123;</span><br><span class="line">        <span class="type">int</span> ans = <span class="number">0</span>;</span><br><span class="line">        <span class="type">int</span> L = id[l], R = id[r];</span><br><span class="line">        <span class="keyword">if</span>(L == R) &#123;</span><br><span class="line">            <span class="keyword">for</span>(<span class="type">int</span> i = l; i &lt;= r; i++) </span><br><span class="line">                ans += a[i];</span><br><span class="line">            <span class="keyword">return</span> ans;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">for</span>(<span class="type">int</span> i = l; id[i] == L; i++)</span><br><span class="line">            ans += a[i];</span><br><span class="line">        <span class="keyword">for</span>(<span class="type">int</span> i = L + <span class="number">1</span>; i &lt; R; i++)</span><br><span class="line">            ans += sum[i];</span><br><span class="line">        <span class="keyword">for</span>(<span class="type">int</span> i = r; id[i] == R; i--)</span><br><span class="line">            ans += a[i];</span><br><span class="line">        <span class="keyword">return</span> ans;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure>]]></content>
    
    
      
      
    <summary type="html">&lt;h2 id=&quot;写在最前&quot;&gt;&lt;a href=&quot;#写在最前&quot; class=&quot;headerlink&quot; title=&quot;写在最前&quot;&gt;&lt;/a&gt;写在最前&lt;/h2&gt;&lt;p&gt;发现文章被吃掉了好多，先重写一篇分块吧&lt;/p&gt;
&lt;p&gt;众所周知某知名大佬 &lt;del&gt;（DeepSeek）&lt;/del&gt;  说过</summary>
      
    
    
    
    <category term="OI" scheme="http://blog.wsq127.top/categories/OI/"/>
    
    
    <category term="OI" scheme="http://blog.wsq127.top/tags/OI/"/>
    
    <category term="C++" scheme="http://blog.wsq127.top/tags/C/"/>
    
    <category term="提高组" scheme="http://blog.wsq127.top/tags/%E6%8F%90%E9%AB%98%E7%BB%84/"/>
    
    <category term="数据结构" scheme="http://blog.wsq127.top/tags/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/"/>
    
    <category term="分块" scheme="http://blog.wsq127.top/tags/%E5%88%86%E5%9D%97/"/>
    
  </entry>
  
  <entry>
    <title>Tarjan</title>
    <link href="http://blog.wsq127.top/posts/1059/"/>
    <id>http://blog.wsq127.top/posts/1059/</id>
    <published>2025-03-01T08:33:10.000Z</published>
    <updated>2025-06-06T13:28:44.959Z</updated>
    
    
    
    
    <category term="OI" scheme="http://blog.wsq127.top/categories/OI/"/>
    
    
    <category term="OI" scheme="http://blog.wsq127.top/tags/OI/"/>
    
    <category term="C++" scheme="http://blog.wsq127.top/tags/C/"/>
    
    <category term="提高组" scheme="http://blog.wsq127.top/tags/%E6%8F%90%E9%AB%98%E7%BB%84/"/>
    
    <category term="算法" scheme="http://blog.wsq127.top/tags/%E7%AE%97%E6%B3%95/"/>
    
    <category term="图论" scheme="http://blog.wsq127.top/tags/%E5%9B%BE%E8%AE%BA/"/>
    
    <category term="Tarjan" scheme="http://blog.wsq127.top/tags/Tarjan/"/>
    
  </entry>
  
  <entry>
    <title>线段树</title>
    <link href="http://blog.wsq127.top/posts/48555/"/>
    <id>http://blog.wsq127.top/posts/48555/</id>
    <published>2024-10-16T11:43:13.164Z</published>
    <updated>2025-06-06T13:13:36.713Z</updated>
    
    <content type="html"><![CDATA[<h2 id="写在最前"><a href="#写在最前" class="headerlink" title="写在最前"></a>写在最前</h2><p><del>我承认这个封面的<code>线段树</code>有点过于抽象，但是真的没有别的办法乐。</del></p><p>先引用一个大佬说的一句话：</p><blockquote><p>什么是线段树？<br>如果你在考提高组前一天还在问这个问题，那么你会与一等奖失之交臂；如果你还在冲击普及组一等奖，那么这篇博客会浪费你人生中宝贵的5~20分钟。</p></blockquote><p>显而易见，线段树是一个 OIer 从萌新过渡到正式选手的标志性算法。</p><p>然而事实上，对于一个正式的 OIer 选手，线段树更应该是一个工具，所以……</p><p><strong>线段树是世界上最好的数据结构！！！（bushi</strong></p><p>线段树可以 $O(\log n)$ 的实现区间和、区间乘、区间最值、区间修改等操作，<del>在很多题中都可以以略逊于正解的解法过掉</del>。</p><h2 id="核心思想"><a href="#核心思想" class="headerlink" title="核心思想"></a>核心思想</h2><p>线段树的核心思想是 <strong>分治</strong>。它将一个区间分成若干个子区间，每个节点代表一个区间，并通过递归的方式维护区间的信息。</p><ul><li><strong>区间划分</strong>：对于一个区间 $[l, r]$，我们将其分成两个子区间 $[l, mid]$ 和 $[mid+1, r]$，其中 $mid &#x3D; \lfloor \frac{l+r}{2} \rfloor$。</li><li><strong>递归维护</strong>：通过递归的方式，逐步将区间划分到最小单位（即叶子节点），并在回溯时合并子区间的信息。</li></ul><p>不难发现复杂度为均 $O(n\log n)$。</p><p>正常情况下我们存一棵树可能会用到存图的方法，或者是存每一个点的子节点，然而为了维护一串序列而真的建一个图实在是又臭又长过于屎山，不难想到<strong>父子两倍</strong>，即父节点为 $n$ 的话，子节点分别是 $2n$ 和 $2n+1$。</p><p>如果用这种方法的话不妨思考一下他所需的空间（以下非重点，可以酌情跳过）：</p><blockquote><p>首先设这个序列长度为 $n$。<br>按照正常的逻辑，线段树的最下面是长度为 1 的区间，那么也就是说总共有 $n$ 个叶子节点。<br>不难发现总共有 $2n-1$ 个节点。<br>然而实际上，我们在建树中，会浪费掉一些空间，所以说开 $2n-1$ 是不一定够的。</p><ul><li>线段树的深度为 $\lceil \log_2 n \rceil$。</li><li>在最坏情况下，线段树的最后一层可能会有 $2^{\lceil \log_2 n \rceil}$ 个节点。</li><li>由于 $2^{\lceil \log_2 n \rceil} \leq 2n$，因此总节点数最多为 $2 \times 2n - 1 &#x3D; 4n - 1$。</li></ul></blockquote><p>在实现线段树时，区间更新是一个常见的操作。然而，如果每次更新都递归到叶子节点，时间复杂度会退化为 $O(N)$，这显然无法接受。</p><p>例如我们进行两次操作：</p><p>操作 1：区间 <code>[1, 3]</code> 加 2</p><ul><li>递归到叶子节点 <code>[1, 1]</code>、<code>[2, 2]</code> 和 <code>[3, 3]</code>，分别更新它们的值。</li><li>更新后的数组为 <code>a = [3, 4, 5, 4, 5]</code>。</li></ul><p>操作 2：区间 <code>[2, 4]</code> 加 3</p><ul><li>递归到叶子节点 <code>[2, 2]</code>、<code>[3, 3]</code> 和 <code>[4, 4]</code>，分别更新它们的值。</li><li>更新后的数组为 <code>a = [3, 7, 8, 7, 5]</code>。</li></ul><p>可以看到在操作 2 中，节点 <code>[2, 2]</code> 和 <code>[3, 3]</code> 已经被操作 1 更新过，现在又被操作 2 更新了一次。这种重复操作会导致时间复杂度增加。</p><p>不难想到可以把一个节点的修改累加标记起来，直到需要访问时再下传，这就是懒标记。</p><p>懒标记下传是线段树的核心优化。它通过延迟更新的方式，避免不必要的递归操作。</p><h2 id="实现"><a href="#实现" class="headerlink" title="实现"></a>实现</h2><h3 id="建树"><a href="#建树" class="headerlink" title="建树"></a>建树</h3><p>建树的过程是通过递归实现的。我们从根节点开始，逐步将区间划分到最小单位，并在回溯时合并子区间的信息。</p><figure class="highlight c++"><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><span class="line"><span class="function"><span class="type">void</span> <span class="title">build</span><span class="params">(<span class="type">int</span> ro, <span class="type">int</span> l, <span class="type">int</span> r)</span> </span>&#123;</span><br><span class="line">    t[ro].l = l;</span><br><span class="line">    t[ro].r = r;</span><br><span class="line">    <span class="keyword">if</span> (l == r) &#123;</span><br><span class="line">        t[ro].sum = a[l];  <span class="comment">// 叶子节点，直接赋值</span></span><br><span class="line">        <span class="keyword">return</span>;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="type">int</span> mid = (l + r) / <span class="number">2</span>;</span><br><span class="line">    <span class="built_in">build</span>(ro * <span class="number">2</span>, l, mid);          <span class="comment">// 递归构建左子树</span></span><br><span class="line">    <span class="built_in">build</span>(ro * <span class="number">2</span> + <span class="number">1</span>, mid + <span class="number">1</span>, r);  <span class="comment">// 递归构建右子树</span></span><br><span class="line">    t[ro].sum = t[ro * <span class="number">2</span>].sum + t[ro * <span class="number">2</span> + <span class="number">1</span>].sum;  <span class="comment">// 合并子区间信息</span></span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h3 id="区间查询"><a href="#区间查询" class="headerlink" title="区间查询"></a>区间查询</h3><p>区间查询的过程是通过递归实现的。我们从根节点开始，逐步向下查询目标区间，并合并子区间的信息。</p><figure class="highlight c++"><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></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="type">int</span> <span class="title">query</span><span class="params">(<span class="type">int</span> ro, <span class="type">int</span> l, <span class="type">int</span> r)</span> </span>&#123;</span><br><span class="line">    <span class="keyword">if</span> (l &lt;= t[ro].l &amp;&amp; t[ro].r &lt;= r) &#123;</span><br><span class="line">        <span class="keyword">return</span> t[ro].sum;  <span class="comment">// 当前节点区间完全包含在查询区间内</span></span><br><span class="line">    &#125;</span><br><span class="line">    <span class="built_in">down</span>(ro);  <span class="comment">// 下传懒标记</span></span><br><span class="line">    <span class="type">int</span> mid = (t[ro].l + t[ro].r) / <span class="number">2</span>;</span><br><span class="line">    <span class="type">int</span> sum = <span class="number">0</span>;</span><br><span class="line">    <span class="keyword">if</span> (l &lt;= mid) &#123;</span><br><span class="line">        sum += <span class="built_in">query</span>(ro * <span class="number">2</span>, l, r);  <span class="comment">// 递归查询左子树</span></span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">if</span> (r &gt; mid) &#123;</span><br><span class="line">        sum += <span class="built_in">query</span>(ro * <span class="number">2</span> + <span class="number">1</span>, l, r);  <span class="comment">// 递归查询右子树</span></span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> sum;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h3 id="区间更新"><a href="#区间更新" class="headerlink" title="区间更新"></a>区间更新</h3><p>区间更新的过程是通过递归实现的。我们从根节点开始，逐步向下更新目标区间，并通过懒标记延迟更新。</p><figure class="highlight c++"><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></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="type">void</span> <span class="title">update</span><span class="params">(<span class="type">int</span> ro, <span class="type">int</span> l, <span class="type">int</span> r, <span class="type">int</span> x)</span> </span>&#123;</span><br><span class="line">    <span class="keyword">if</span> (l &lt;= t[ro].l &amp;&amp; t[ro].r &lt;= r) &#123;</span><br><span class="line">        t[ro].flag += x;  <span class="comment">// 更新懒标记</span></span><br><span class="line">        t[ro].sum += (t[ro].r - t[ro].l + <span class="number">1</span>) * x;  <span class="comment">// 更新当前节点的区间和</span></span><br><span class="line">        <span class="keyword">return</span>;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="built_in">down</span>(ro);  <span class="comment">// 下传懒标记</span></span><br><span class="line">    <span class="type">int</span> mid = (t[ro].l + t[ro].r) / <span class="number">2</span>;</span><br><span class="line">    <span class="keyword">if</span> (l &lt;= mid) &#123;</span><br><span class="line">        <span class="built_in">update</span>(ro * <span class="number">2</span>, l, r, x);  <span class="comment">// 递归更新左子树</span></span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">if</span> (r &gt; mid) &#123;</span><br><span class="line">        <span class="built_in">update</span>(ro * <span class="number">2</span> + <span class="number">1</span>, l, r, x);  <span class="comment">// 递归更新右子树</span></span><br><span class="line">    &#125;</span><br><span class="line">    t[ro].sum = t[ro * <span class="number">2</span>].sum + t[ro * <span class="number">2</span> + <span class="number">1</span>].sum;  <span class="comment">// 合并子区间信息</span></span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h3 id="懒标记下传"><a href="#懒标记下传" class="headerlink" title="懒标记下传"></a>懒标记下传</h3><p>将节点的懒标记下传到子节点，并清空当前节点的标记</p><figure class="highlight c++"><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></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="type">void</span> <span class="title">down</span><span class="params">(<span class="type">int</span> ro)</span> </span>&#123;</span><br><span class="line">    <span class="keyword">if</span> (t[ro].flag != <span class="number">0</span>) &#123;</span><br><span class="line">        t[ro * <span class="number">2</span>].flag += t[ro].flag;</span><br><span class="line">        t[ro * <span class="number">2</span>].sum += (t[ro * <span class="number">2</span>].r - t[ro * <span class="number">2</span>].l + <span class="number">1</span>) * t[ro].flag;</span><br><span class="line">        t[ro * <span class="number">2</span> + <span class="number">1</span>].flag += t[ro].flag;</span><br><span class="line">        t[ro * <span class="number">2</span> + <span class="number">1</span>].sum += (t[ro * <span class="number">2</span> + <span class="number">1</span>].r - t[ro * <span class="number">2</span> + <span class="number">1</span>].l + <span class="number">1</span>) * t[ro].flag;</span><br><span class="line">        t[ro].flag = <span class="number">0</span>;  <span class="comment">// 清空当前节点的懒标记</span></span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h3 id="完整代码"><a href="#完整代码" class="headerlink" title="完整代码"></a>完整代码</h3><p>喜闻乐见封装环节</p><figure class="highlight c++"><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></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">SegmentTree</span> &#123;</span><br><span class="line"><span class="meta">#<span class="keyword">define</span> ls ro*2</span></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> rs ro*2+1</span></span><br><span class="line"><span class="keyword">struct</span> <span class="title class_">node</span> &#123;</span><br><span class="line"><span class="type">int</span> l, r, sum, flag;</span><br><span class="line">&#125; c[<span class="number">4</span> * N];</span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">down</span><span class="params">(<span class="type">int</span> ro)</span> </span>&#123;</span><br><span class="line">c[ls].flag += c[ro].flag;</span><br><span class="line">c[ls].sum += (c[ls].r - c[ls].l + <span class="number">1</span>) * c[ro].flag;</span><br><span class="line">c[rs].flag += c[ro].flag;</span><br><span class="line">c[rs].sum += (c[rs].r - c[rs].l + <span class="number">1</span>) * c[ro].flag;</span><br><span class="line">c[ro].flag = <span class="number">0</span>;</span><br><span class="line">&#125;</span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">build</span><span class="params">(<span class="type">int</span> ro, <span class="type">int</span> l, <span class="type">int</span> r, <span class="type">int</span> *a)</span> </span>&#123;</span><br><span class="line">c[ro].l = l; c[ro].r = r;</span><br><span class="line"><span class="keyword">if</span>(l == r) &#123;</span><br><span class="line">c[ro].sum = a[l];</span><br><span class="line"><span class="keyword">return</span>;</span><br><span class="line">&#125;</span><br><span class="line"><span class="type">int</span> mid = l + r &gt;&gt; <span class="number">1</span>;</span><br><span class="line"><span class="built_in">build</span>(ls, l, mid, a);</span><br><span class="line"><span class="built_in">build</span>(rs, mid + <span class="number">1</span>, r, a);</span><br><span class="line">c[ro].sum = c[ls].sum + c[rs].sum;</span><br><span class="line">&#125;</span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">update</span><span class="params">(<span class="type">int</span> ro, <span class="type">int</span> l, <span class="type">int</span> r, <span class="type">int</span> x)</span> </span>&#123;</span><br><span class="line"><span class="keyword">if</span>(l &lt;= c[ro].l &amp;&amp; c[ro].r &lt;= r) &#123;</span><br><span class="line">c[ro].flag += x;</span><br><span class="line">c[ro].sum += (c[ro].r - c[ro].l + <span class="number">1</span>) * x;</span><br><span class="line"><span class="keyword">return</span> ;</span><br><span class="line">&#125;</span><br><span class="line"><span class="built_in">down</span>(ro);</span><br><span class="line"><span class="type">int</span> mid = c[ro].l + c[ro].r &gt;&gt; <span class="number">1</span>;</span><br><span class="line"><span class="keyword">if</span>(l &lt;= mid)</span><br><span class="line"><span class="built_in">update</span>(ls, l, r, x);</span><br><span class="line"><span class="keyword">if</span>(mid &lt; r)</span><br><span class="line"><span class="built_in">update</span>(rs, l, r, x);</span><br><span class="line">c[ro].sum = c[ls].sum + c[rs].sum;</span><br><span class="line">&#125;</span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">ask</span><span class="params">(<span class="type">int</span> ro, <span class="type">int</span> l, <span class="type">int</span> r)</span> </span>&#123;</span><br><span class="line"><span class="keyword">if</span>(l &lt;= c[ro].l &amp;&amp; c[ro].r &lt;= r) &#123;</span><br><span class="line"><span class="keyword">return</span> c[ro].sum;</span><br><span class="line">&#125;</span><br><span class="line"><span class="built_in">down</span>(ro);</span><br><span class="line"><span class="type">int</span> sum = <span class="number">0</span>;</span><br><span class="line"><span class="type">int</span> mid = c[ro].l + c[ro].r &gt;&gt; <span class="number">1</span>;</span><br><span class="line"><span class="keyword">if</span>(l &lt;= mid)</span><br><span class="line">sum += <span class="built_in">ask</span>(ls, l, r);</span><br><span class="line"><span class="keyword">if</span>(mid &lt; r)</span><br><span class="line">sum += <span class="built_in">ask</span>(rs, l, r);</span><br><span class="line"><span class="keyword">return</span> sum;</span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line"><span class="built_in">SegmentTree</span>(<span class="type">int</span> n, <span class="type">int</span> *a) &#123;</span><br><span class="line"><span class="built_in">build</span>(<span class="number">1</span>, <span class="number">1</span>, n, a);</span><br><span class="line">&#125;</span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">modify</span><span class="params">(<span class="type">int</span> l, <span class="type">int</span> r, <span class="type">int</span> x)</span> </span>&#123;</span><br><span class="line"><span class="built_in">update</span>(<span class="number">1</span>, l, r, x);</span><br><span class="line">&#125;</span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">query</span><span class="params">(<span class="type">int</span> l, <span class="type">int</span> r)</span> </span>&#123;</span><br><span class="line"><span class="keyword">return</span> <span class="built_in">ask</span>(<span class="number">1</span>, l, r);</span><br><span class="line">&#125;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure>]]></content>
    
    
      
      
    <summary type="html">&lt;h2 id=&quot;写在最前&quot;&gt;&lt;a href=&quot;#写在最前&quot; class=&quot;headerlink&quot; title=&quot;写在最前&quot;&gt;&lt;/a&gt;写在最前&lt;/h2&gt;&lt;p&gt;&lt;del&gt;我承认这个封面的&lt;code&gt;线段树&lt;/code&gt;有点过于抽象，但是真的没有别的办法乐。&lt;/del&gt;&lt;/p&gt;
&lt;p&gt;</summary>
      
    
    
    
    <category term="OI" scheme="http://blog.wsq127.top/categories/OI/"/>
    
    
    <category term="OI" scheme="http://blog.wsq127.top/tags/OI/"/>
    
    <category term="C++" scheme="http://blog.wsq127.top/tags/C/"/>
    
    <category term="提高组" scheme="http://blog.wsq127.top/tags/%E6%8F%90%E9%AB%98%E7%BB%84/"/>
    
    <category term="数据结构" scheme="http://blog.wsq127.top/tags/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/"/>
    
    <category term="线段树" scheme="http://blog.wsq127.top/tags/%E7%BA%BF%E6%AE%B5%E6%A0%91/"/>
    
  </entry>
  
  <entry>
    <title>树状数组</title>
    <link href="http://blog.wsq127.top/posts/59a0de58/"/>
    <id>http://blog.wsq127.top/posts/59a0de58/</id>
    <published>2024-05-08T08:40:57.458Z</published>
    <updated>2024-05-18T14:36:29.731Z</updated>
    
    <content type="html"><![CDATA[<h2 id="写在最前"><a href="#写在最前" class="headerlink" title="写在最前"></a>写在最前</h2><p>树状数组算是我目前学过最优雅<del>好写</del>的数据结构了。</p><p>树状数组也被称为二进制索引树(<strong>B</strong>inary <strong>I</strong>ndexed <strong>T</strong>ree,<strong>BIT</strong>)，是一种高效的数据结构，它可以实现 $O(\log n)$ 的单点修改和前缀和查询。</p><h2 id="核心思想"><a href="#核心思想" class="headerlink" title="核心思想"></a>核心思想</h2><p>当我们想实现单点修改和区间查询时，肯定会有人想到用一个数组来维护若干个小区间的和，使得修改和查询的复杂度都不会那么高。</p><p>树状数组便是巧妙的运用了二进制来实现这一想法。</p><p>现在我们存储每一个位置前面 lowbit 位的和，也就是是说 $c_i&#x3D;\sum_{j&#x3D;i-lowbit(i)+1}^ia[j]$，比如 $i&#x3D;6$，那么我们可以先将 6 转化为二进制 $(0110)_2$，显然 $c[6]&#x3D;a[5]+a[6]$。</p><h2 id="实现"><a href="#实现" class="headerlink" title="实现"></a>实现</h2><h3 id="区间查询"><a href="#区间查询" class="headerlink" title="区间查询"></a>区间查询</h3><p>这里<del>偷</del>借一下<a href="https://ganmouren.github.io/">老师</a>的图（（（（</p><p><img src="https://ganmouren.github.io/BIT/%E6%A0%91%E7%8A%B6%E6%95%B0%E7%BB%84.jpg"></p><p>不难发现<del>长得确实很像树</del>如果现在要求前 $i$ 项的和，那么就可以通过每次减去 $lowbit(i)$ 得到的 $c_i$ 求和，具体来说就是 $sum[i]&#x3D;c[i]+sum[i-lowbit[i]]$。</p><p>还是拿 6 举例，先化成二进制 $(0110)_2$。</p><ul><li>$lowbit((0110)_2)&#x3D;(0010)_2$，即 $lowbit(6)&#x3D;2$</li><li>$(0110)_2-(0010)_2&#x3D;(0100)_2$，即 $6-2&#x3D;4$</li><li>$lowbit((0100)_2)&#x3D;(0100)_2$，即 $lowbit(4)&#x3D;4$</li><li>$(0100)_2-(0100)_2&#x3D;(0000)_2$，即 $4-4&#x3D;0$</li></ul><p>所以 $c[6]&#x3D;c[4]+c[2]$。</p><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></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="type">long</span> <span class="type">long</span> <span class="title">query</span><span class="params">(<span class="type">long</span> <span class="type">long</span> x)</span></span></span><br><span class="line"><span class="function"></span>&#123;</span><br><span class="line">    <span class="type">long</span> <span class="type">long</span> sum=<span class="number">0</span>;</span><br><span class="line">    <span class="keyword">while</span>(x)</span><br><span class="line">    &#123;</span><br><span class="line">        sum+=c[x];</span><br><span class="line">        x-=(x&amp;-x);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> sum;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h3 id="单点修改"><a href="#单点修改" class="headerlink" title="单点修改"></a>单点修改</h3><p>查询是从上往下退，修改也同理，从下往上爬就行了，不难发现，$i$ 的父节点即为 $i+lowbit(i)$。</p><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></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="type">void</span> <span class="title">update</span><span class="params">(<span class="type">long</span> <span class="type">long</span> x,<span class="type">long</span> <span class="type">long</span> v)</span></span></span><br><span class="line"><span class="function"></span>&#123;</span><br><span class="line">    <span class="keyword">while</span>(x&lt;=n)</span><br><span class="line">    &#123;</span><br><span class="line">        c[x]+=v;</span><br><span class="line">        x+=(x&amp;-x);</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><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></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">BIT</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">long</span> <span class="type">long</span> c[N];</span><br><span class="line">    <span class="function"><span class="type">long</span> <span class="type">long</span> <span class="title">prefix</span><span class="params">(<span class="type">long</span> <span class="type">long</span> x)</span></span></span><br><span class="line"><span class="function">    </span>&#123;</span><br><span class="line">        <span class="type">long</span> <span class="type">long</span> sum=<span class="number">0</span>;</span><br><span class="line">        <span class="keyword">while</span>(x)</span><br><span class="line">        &#123;</span><br><span class="line">            sum+=c[x];</span><br><span class="line">            x-=(x&amp;-x);</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">return</span> sum;</span><br><span class="line">    &#125;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="function"><span class="type">void</span> <span class="title">update</span><span class="params">(<span class="type">long</span> <span class="type">long</span> x,<span class="type">long</span> <span class="type">long</span> v)</span></span></span><br><span class="line"><span class="function">    </span>&#123;</span><br><span class="line">        <span class="keyword">while</span>(x&lt;=n)</span><br><span class="line">        &#123;</span><br><span class="line">            c[x]+=v;</span><br><span class="line">            x+=(x&amp;-x);</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="function"><span class="type">long</span> <span class="type">long</span> <span class="title">query</span><span class="params">(<span class="type">long</span> <span class="type">long</span> l,<span class="type">long</span> <span class="type">long</span> r)</span></span></span><br><span class="line"><span class="function">    </span>&#123;</span><br><span class="line">        <span class="keyword">return</span> <span class="built_in">prefix</span>(r)-<span class="built_in">prefix</span>(l<span class="number">-1</span>);</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br><span class="line">...</span><br><span class="line">BIT c;<span class="comment">//定义</span></span><br><span class="line">c.<span class="built_in">update</span>(i,x)<span class="comment">//第 I 位加 x</span></span><br><span class="line">c.<span class="built_in">query</span>(l,r)<span class="comment">//查询 l~r 的和</span></span><br></pre></td></tr></table></figure><h2 id="进阶"><a href="#进阶" class="headerlink" title="进阶"></a>进阶</h2><h3 id="区间修改单点查询"><a href="#区间修改单点查询" class="headerlink" title="区间修改单点查询"></a>区间修改单点查询</h3><p>结合单点修改区间查询，不难想到差分，我们只需要对差分数组做树状数组，这样需要区间修改的话只需要单点修改差分数组的两端，单点修改的话需要修改一整个区间。</p><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">c.<span class="built_in">update</span>(l,x);c.<span class="built_in">update</span>(r+<span class="number">1</span>,-x);<span class="comment">//l~r 加 x</span></span><br><span class="line">c.<span class="built_in">query</span>(<span class="number">1</span>,x)<span class="comment">//查询第 x 位</span></span><br></pre></td></tr></table></figure><h3 id="区间修改区间查询"><a href="#区间修改区间查询" class="headerlink" title="区间修改区间查询"></a>区间修改区间查询</h3><h4 id="核心思想-1"><a href="#核心思想-1" class="headerlink" title="核心思想"></a>核心思想</h4><p>仍然是差分，通过差分数组 $d$，我们可以将区间修改转化为单点修改：</p><ul><li>将区间 $[l, r]$ 内的所有元素加上 $x$，等价于：<ul><li>$d[l] +&#x3D; x$</li><li>$d[r+1] -&#x3D; x$</li></ul></li></ul><p>同时，区间查询可以通过差分数组的前缀和来实现：</p><ul><li>$<br>  a[i] &#x3D; \sum_{j&#x3D;1}^i d[j]<br>  $</li><li>$\sum_{i&#x3D;1}^k a[i] &#x3D; \sum_{i&#x3D;1}^k \sum_{j&#x3D;1}^i d[j] &#x3D; \sum_{j&#x3D;1}^k d[j] \cdot (k - j + 1) &#x3D; (k + 1) \cdot \sum_{j&#x3D;1}^k d[j] - \sum_{j&#x3D;1}^k d[j] \cdot j$</li></ul><p>为了高效计算上述公式，我们需要维护两个树状数组：</p><ol><li>一个树状数组维护差分数组 $d[i]$。</li><li>另一个树状数组维护 $d[i] \cdot i$。</li></ol><h4 id="实现细节"><a href="#实现细节" class="headerlink" title="实现细节"></a>实现细节</h4><h5 id="修改"><a href="#修改" class="headerlink" title="修改"></a>修改</h5><p>对于区间 $[l, r]$ 的修改操作，我们需要更新两个树状数组：</p><ul><li>在第一个树状数组中：<ul><li>$d[l] +&#x3D; x$</li><li>$d[r+1] -&#x3D; x$</li></ul></li><li>在第二个树状数组中：<ul><li>$d[l] \cdot l +&#x3D; x \cdot l$</li><li>$d[r+1] \cdot (r+1) -&#x3D; x \cdot (r+1)$</li></ul></li></ul><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></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="type">void</span> <span class="title">update</span><span class="params">(<span class="type">int</span> l, <span class="type">int</span> r, <span class="type">long</span> <span class="type">long</span> x)</span> </span>&#123;</span><br><span class="line">    <span class="built_in">modify</span>(d, l, x);</span><br><span class="line">    <span class="built_in">modify</span>(d, r + <span class="number">1</span>, -x);</span><br><span class="line">    <span class="built_in">modify</span>(id, l, x * l);</span><br><span class="line">    <span class="built_in">modify</span>(id, r + <span class="number">1</span>, -x * (r + <span class="number">1</span>));</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h5 id="查询"><a href="#查询" class="headerlink" title="查询"></a>查询</h5><p>对于区间 $[1, k]$ 的查询操作，我们可以通过以下公式计算：</p><p>$\sum_{i&#x3D;1}^k a[i] &#x3D; (k + 1) \cdot \text{query}<em>d(k) - \text{query}</em>{id}(k)$其中：</p><ul><li>$\text{query}<em>d(k)$ 是第一个树状数组的前缀和，即 $\sum</em>{i&#x3D;1}^k d[i]$。</li><li>$\text{query}<em>{id}(k)$ 是第二个树状数组的前缀和，即 $\sum</em>{i&#x3D;1}^k d[i] \cdot i$。</li></ul><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></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="type">long</span> <span class="type">long</span> <span class="title">query</span><span class="params">(<span class="type">int</span> l, <span class="type">int</span> r)</span> </span>&#123;</span><br><span class="line">    <span class="keyword">auto</span> get_sum = [&amp;](<span class="type">int</span> k) &#123;</span><br><span class="line">        <span class="built_in">return</span> (k + <span class="number">1</span>) * <span class="built_in">query</span>(d, k) - <span class="built_in">query</span>(id, k);</span><br><span class="line">    &#125;;</span><br><span class="line">    <span class="keyword">return</span> <span class="built_in">get_sum</span>(r) - <span class="built_in">get_sum</span>(l - <span class="number">1</span>);</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><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><span class="line">40</span><br><span class="line">41</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">BIT</span> &#123;</span><br><span class="line"><span class="keyword">private</span>:</span><br><span class="line">    <span class="type">int</span> n;</span><br><span class="line">    <span class="type">long</span> <span class="type">long</span> d[N];</span><br><span class="line">    <span class="type">long</span> <span class="type">long</span> id[N];</span><br><span class="line">    <span class="function"><span class="type">void</span> <span class="title">modify</span><span class="params">(<span class="type">int</span> x, <span class="type">long</span> <span class="type">long</span> v, <span class="type">long</span> <span class="type">long</span> arr[])</span> </span>&#123;</span><br><span class="line">        <span class="keyword">while</span> (x &lt;= n) &#123;</span><br><span class="line">            arr[x] += v;</span><br><span class="line">            x += (x &amp; -x);</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="function"><span class="type">long</span> <span class="type">long</span> <span class="title">ask</span><span class="params">(<span class="type">int</span> x, <span class="type">long</span> <span class="type">long</span> arr[])</span> </span>&#123;</span><br><span class="line">        <span class="type">long</span> <span class="type">long</span> sum = <span class="number">0</span>;</span><br><span class="line">        <span class="keyword">while</span> (x) &#123;</span><br><span class="line">            sum += arr[x];</span><br><span class="line">            x -= (x &amp; -x);</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">return</span> sum;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="function"><span class="type">long</span> <span class="type">long</span> <span class="title">get_sum</span><span class="params">(<span class="type">int</span> k)</span> </span>&#123;</span><br><span class="line">        <span class="keyword">return</span> (k + <span class="number">1</span>) * <span class="built_in">ask</span>(k, d) - <span class="built_in">ask</span>(k, id);</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="built_in">BIT</span>(<span class="type">int</span> size) &#123;</span><br><span class="line">        n = size;</span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i &lt;= n + <span class="number">1</span>; i++) &#123;</span><br><span class="line">            d[i] = <span class="number">0</span>;</span><br><span class="line">            id[i] = <span class="number">0</span>;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="function"><span class="type">void</span> <span class="title">update</span><span class="params">(<span class="type">int</span> l, <span class="type">int</span> r, <span class="type">long</span> <span class="type">long</span> x)</span> </span>&#123;</span><br><span class="line">        <span class="built_in">modify</span>(l, x, d);</span><br><span class="line">        <span class="built_in">modify</span>(r + <span class="number">1</span>, -x, d);</span><br><span class="line">        <span class="built_in">modify</span>(l, x * l, id);</span><br><span class="line">        <span class="built_in">modify</span>(r + <span class="number">1</span>, -x * (r + <span class="number">1</span>), id);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="function"><span class="type">long</span> <span class="type">long</span> <span class="title">query</span><span class="params">(<span class="type">int</span> l, <span class="type">int</span> r)</span> </span>&#123;</span><br><span class="line">        <span class="keyword">return</span> <span class="built_in">get_sum</span>(r) - <span class="built_in">get_sum</span>(l - <span class="number">1</span>);</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure>]]></content>
    
    
      
      
    <summary type="html">&lt;h2 id=&quot;写在最前&quot;&gt;&lt;a href=&quot;#写在最前&quot; class=&quot;headerlink&quot; title=&quot;写在最前&quot;&gt;&lt;/a&gt;写在最前&lt;/h2&gt;&lt;p&gt;树状数组算是我目前学过最优雅&lt;del&gt;好写&lt;/del&gt;的数据结构了。&lt;/p&gt;
&lt;p&gt;树状数组也被称为二进制索引树(&lt;stro</summary>
      
    
    
    
    <category term="OI" scheme="http://blog.wsq127.top/categories/OI/"/>
    
    
    <category term="OI" scheme="http://blog.wsq127.top/tags/OI/"/>
    
    <category term="C++" scheme="http://blog.wsq127.top/tags/C/"/>
    
    <category term="提高组" scheme="http://blog.wsq127.top/tags/%E6%8F%90%E9%AB%98%E7%BB%84/"/>
    
    <category term="数据结构" scheme="http://blog.wsq127.top/tags/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/"/>
    
    <category term="树状数组" scheme="http://blog.wsq127.top/tags/%E6%A0%91%E7%8A%B6%E6%95%B0%E7%BB%84/"/>
    
  </entry>
  
  <entry>
    <title>2023 ZJ noip 迷惑行为大赏</title>
    <link href="http://blog.wsq127.top/posts/ffca3de1/"/>
    <id>http://blog.wsq127.top/posts/ffca3de1/</id>
    <published>2023-12-05T15:42:04.000Z</published>
    <updated>2024-07-07T14:47:08.018Z</updated>
    
    <content type="html"><![CDATA[<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>如果您不愿意展示自己的代码，可以申请撤下您的代码。</p><p>如果上述代码中存在个人信息泄露情况，请立即联系作者。</p><p>代码来源：<a href="http://www.cs.zju.edu.cn/csen/2023/1118/c62747a2828209/page.htm">浙江省 NOIP 2023 考生代码</a></p><h2 id="正文"><a href="#正文" class="headerlink" title="正文"></a>正文</h2><h3 id="统计"><a href="#统计" class="headerlink" title="统计"></a>统计</h3><p>共 $788$ 人，$3404$ 份文件，平均每入约 $4.319797$ 份文件</p><p>其中：</p><ul><li><code>114514</code> 出现 $114$ 次（臭</li><li><code>1919810</code> 出现 $26$ 次</li><li><code>AC</code> 出现 $26$ 次</li><li><code>ccf</code> 出现 $45$ 次</li><li><code>noi</code> 出现 $35$ 次</li><li><code>csp</code> 出现 $11$ 次</li><li><code>orz</code> 出现 $47$ 次</li><li><code>qwq</code> 出现 $212$ 次</li><li><code>rp</code> 出现 $160$ 次</li><li><code>rp++</code> 出现 $27$ 次</li><li><code>system</code> 出现 $243$ 次</li><li><code>define</code> 出现 $4315$ 次</li><li><code>rand</code> 出现 $400$ 次</li><li>$57$ 人注释了文件操作</li><li>$63$ 人写了对拍</li></ul><h3 id="空间第一：ZJ-0184"><a href="#空间第一：ZJ-0184" class="headerlink" title="空间第一：ZJ-0184"></a>空间第一：ZJ-0184</h3><p>本场重量级</p><p>共 ${44.9 MB}$</p><p>一人霸占 ${\frac{9}{10}}$<br><img src="https://cdn.luogu.com.cn/upload/image_hosting/spag3tqv.png" alt="wiztree空间"><br>死因：<a href="https://www.wenshushu.cn/f/cp628pnzxso/folder/cp61txk7ent">玄学文件</a></p><h3 id="一、白给型"><a href="#一、白给型" class="headerlink" title="一、白给型"></a>一、白给型</h3><p>ZJ-0595:</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></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span><span class="string">&lt;bits/stdc++.h&gt;</span></span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> std;</span><br><span class="line"><span class="type">int</span> n,m;</span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span></span>&#123;</span><br><span class="line"><span class="built_in">freopen</span>(<span class="string">&quot;tribool.in&quot;</span>,<span class="string">&quot;r&quot;</span>,stdin);</span><br><span class="line"><span class="built_in">freopen</span>(<span class="string">&quot;tribool.out&quot;</span>,<span class="string">&quot;w&quot;</span>,stdin);</span><br><span class="line"><span class="built_in">srand</span>(<span class="built_in">time</span>(<span class="literal">NULL</span>))</span><br><span class="line">cin&gt;&gt;n&gt;&gt;m;</span><br><span class="line"><span class="keyword">for</span>(<span class="type">int</span> i=<span class="number">1</span>;i&lt;=m;i++)<span class="built_in">printf</span>(<span class="string">&quot;%d\n&quot;</span>,<span class="built_in">rand</span>()%<span class="number">500</span>+<span class="number">1</span>);</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>ZJ-0498:</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></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span><span class="string">&lt;bits/stdc++.h&gt;</span></span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> std;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">signed</span> <span class="title">main</span><span class="params">()</span></span>&#123;</span><br><span class="line"><span class="built_in">freopen</span>(<span class="string">&quot;run.in&quot;</span>,<span class="string">&quot;r&quot;</span>,stdin);</span><br><span class="line"><span class="built_in">freopen</span>(<span class="string">&quot;run.out&quot;</span>,<span class="string">&quot;w&quot;</span>,stdout);</span><br><span class="line"><span class="comment">//ru guo ni yao ba ta jia ru mi huo xing wei da shang , jian yi xian si xin wo ,xie xie.</span></span><br><span class="line">ios::<span class="built_in">sync_with_stdio</span>(<span class="literal">false</span>);</span><br><span class="line">cin.<span class="built_in">tie</span>(<span class="number">0</span>);</span><br><span class="line">cout.<span class="built_in">tie</span>(<span class="number">0</span>);</span><br><span class="line">cout&lt;&lt;<span class="string">&quot;Life isn&#x27;t always easy.&quot;</span>;</span><br><span class="line">cout&lt;&lt;<span class="string">&quot;I&#x27;m Aslf_Ek.&quot;</span>;</span><br><span class="line">cout&lt;&lt;<span class="string">&quot;Goodbye,OI&quot;</span>;</span><br><span class="line">cout&lt;&lt;<span class="string">&quot;Maybe I should get out and find my own life.&quot;</span>;</span><br><span class="line">cout&lt;&lt;<span class="string">&quot;UID 175719&quot;</span>;</span><br><span class="line">cout&lt;&lt;<span class="string">&quot;I have too much to say,but I said before.&quot;</span>;</span><br><span class="line">cout&lt;&lt;<span class="string">&quot;Everything is like OI ,isn&#x27;t it ?&quot;</span>;</span><br><span class="line">cout&lt;&lt;<span class="string">&quot;I once falling love with a girl,&quot;</span>;</span><br><span class="line">cout&lt;&lt;<span class="string">&quot;but,like OI ,she left me alone.&quot;</span>;</span><br><span class="line">cout&lt;&lt;<span class="string">&quot;I like those memories.&quot;</span>;</span><br><span class="line">cout&lt;&lt;<span class="string">&quot;Hope the it like me,too.&quot;</span>;</span><br><span class="line">cout&lt;&lt;<span class="string">&quot;there&#x27;s still a long way to go.&quot;</span>;</span><br><span class="line">cout&lt;&lt;<span class="string">&quot;For me ,for my dream.&quot;</span>;</span><br><span class="line"></span><br><span class="line">cout&lt;&lt;<span class="string">&quot;I remember the words I said,&quot;</span>;</span><br><span class="line"></span><br><span class="line">cout&lt;&lt;<span class="string">&quot; Its not the dream,it&#x27;s the destiny &quot;</span>;</span><br><span class="line"></span><br><span class="line">cout&lt;&lt;<span class="string">&quot;Today,I&#x27;m away from OI&quot;</span>;</span><br><span class="line">cout&lt;&lt;<span class="string">&quot;I don&#x27;t know how much things I will lose.&quot;</span>;</span><br><span class="line">cout&lt;&lt;<span class="string">&quot;but what I only have to do is just chase,and lose,chase,and lose.&quot;</span>;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line">cout&lt;&lt;<span class="string">&quot;It&#x27;s my life.&quot;</span>;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h3 id="二、暴厌语言友好问候"><a href="#二、暴厌语言友好问候" class="headerlink" title="二、暴厌语言友好问候"></a>二、<del>暴厌语言</del>友好问候</h3><p>ZJ-0496:</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><span class="line"><span class="comment">/*</span></span><br><span class="line"><span class="comment"></span></span><br><span class="line"><span class="comment">fuck ccf</span></span><br><span class="line"><span class="comment">fuck noip</span></span><br><span class="line"><span class="comment">fuck csp</span></span><br><span class="line"><span class="comment"></span></span><br><span class="line"><span class="comment">我不干了</span></span><br><span class="line"><span class="comment"></span></span><br><span class="line"><span class="comment">还有一个小时考试结束 </span></span><br><span class="line"><span class="comment"></span></span><br><span class="line"><span class="comment">看我光速退役</span></span><br><span class="line"><span class="comment"></span></span><br><span class="line"><span class="comment">*/</span></span><br></pre></td></tr></table></figure><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><span class="line"><span class="function"><span class="type">int</span> <span class="title">fuck_ccf</span><span class="params">()</span></span></span><br><span class="line"><span class="function"></span>&#123;</span><br><span class="line"><span class="built_in">scanf</span>(<span class="string">&quot;%d%d%d%d&quot;</span>,&amp;n,&amp;m,&amp;k,&amp;d);</span><br><span class="line">ll ans=<span class="number">0</span>;</span><br><span class="line"><span class="keyword">for</span>(<span class="type">int</span> i=<span class="number">1</span>;i&lt;=m;i++)</span><br><span class="line">&#123;</span><br><span class="line"><span class="type">int</span> x,y;ll v;</span><br><span class="line"><span class="built_in">scanf</span>(<span class="string">&quot;%d%d%lld&quot;</span>,&amp;x,&amp;y,&amp;v);</span><br><span class="line">ans=<span class="built_in">max</span>(ans,ans-y*d+v);</span><br><span class="line">&#125;</span><br><span class="line"><span class="built_in">printf</span>(<span class="string">&quot;%lld\n&quot;</span>,ans);</span><br><span class="line"><span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h3 id="三、ccf庇佑"><a href="#三、ccf庇佑" class="headerlink" title="三、ccf庇佑"></a>三、ccf庇佑</h3><p>ZJ-0558:</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><span class="line"><span class="comment">//    ------ ------ ------</span></span><br><span class="line"><span class="comment">//    --     --     --</span></span><br><span class="line"><span class="comment">//    --     --     ------</span></span><br><span class="line"><span class="comment">//    --     --     --</span></span><br><span class="line"><span class="comment">//    ------ ------ --</span></span><br><span class="line"><span class="comment">//    </span></span><br><span class="line"><span class="comment">//</span></span><br><span class="line"><span class="comment">//</span></span><br><span class="line"><span class="comment">//    --  -- ------ --     ------  --  -- ------ </span></span><br><span class="line"><span class="comment">//    --  -- --     --     --  --  - -- - --    </span></span><br><span class="line"><span class="comment">//    ------ ------ --     ------  - -- - ------</span></span><br><span class="line"><span class="comment">//    --  -- --     --     --      - -- - --    </span></span><br><span class="line"><span class="comment">//    --  -- ------ ------ --      - -- - ------ </span></span><br></pre></td></tr></table></figure><p>ZJ-0220:</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></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span></span>&#123;</span><br><span class="line"><span class="built_in">freopen</span>(<span class="string">&quot;run.in&quot;</span>,<span class="string">&quot;r&quot;</span>,stdin);</span><br><span class="line"><span class="built_in">freopen</span>(<span class="string">&quot;run.out&quot;</span>,<span class="string">&quot;w&quot;</span>,stdout);</span><br><span class="line"><span class="comment">//I love CCF(^_^)</span></span><br><span class="line"><span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>ZJ-0245:</p><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">//I would appreciate it if CCF cound give me 1=</span></span><br></pre></td></tr></table></figure><p>ZJ-0266:</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></pre></td><td class="code"><pre><span class="line">std::cout &lt;&lt; <span class="number">0</span> &lt;&lt; std::endl;</span><br><span class="line"><span class="comment">// I know I can&#x27;t solve a so difficult problem like this</span></span><br><span class="line"><span class="comment">// so can you give me 45 pts?</span></span><br><span class="line"><span class="comment">// please! I thank you ccf !!!</span></span><br></pre></td></tr></table></figure><p>ZJ-0285:</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></pre></td><td class="code"><pre><span class="line"><span class="comment">/*</span></span><br><span class="line"><span class="comment">I love CCF</span></span><br><span class="line"><span class="comment">chu le t3 mei gei duo shao fen</span></span><br><span class="line"><span class="comment">qi ta ti bu fen fen dou hao duo!!!</span></span><br><span class="line"><span class="comment">*/</span></span><br></pre></td></tr></table></figure><h3 id="四、诈骗"><a href="#四、诈骗" class="headerlink" title="四、诈骗"></a>四、诈骗</h3><p>ZJ-0608:</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></pre></td><td class="code"><pre><span class="line"><span class="comment">//100pts......?</span></span><br><span class="line"><span class="comment">//I don&#x27;t know</span></span><br><span class="line"><span class="comment">//**** ***</span></span><br><span class="line"><span class="comment">//never gonna give you up</span></span><br><span class="line"><span class="comment">//sto ccf orz</span></span><br></pre></td></tr></table></figure><p>ZJ-0266<del>怎么还是他</del>的小作文:</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></pre></td><td class="code"><pre><span class="line"><span class="comment">/*</span></span><br><span class="line"><span class="comment">Oh, I&#x27;m so bored (12: 30)</span></span><br><span class="line"><span class="comment">I&#x27;m a junior high school student </span></span><br><span class="line"><span class="comment">I used to think I will AFO after taking 1=</span></span><br><span class="line"><span class="comment">but I think I will be more and more confident</span></span><br><span class="line"><span class="comment">and also be more and more strong</span></span><br><span class="line"><span class="comment">we should fight fight fight, without stopping</span></span><br><span class="line"><span class="comment"></span></span><br><span class="line"><span class="comment">Never gonna give you up~</span></span><br><span class="line"><span class="comment">Never gonna let you down~</span></span><br><span class="line"><span class="comment"></span></span><br><span class="line"><span class="comment">rp++ rp++</span></span><br><span class="line"><span class="comment">#define int long long</span></span><br><span class="line"><span class="comment">](</span></span><br><span class="line"><span class="comment">using namespace std;</span></span><br><span class="line"><span class="comment">//freopen</span></span><br><span class="line"><span class="comment">*/</span></span><br></pre></td></tr></table></figure><h3 id="五、玄学"><a href="#五、玄学" class="headerlink" title="五、玄学"></a>五、玄学</h3><p>ZJ-0085:<br>什么都写了，又好像什么都没写</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></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span><span class="string">&lt;cstdio&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span><span class="string">&lt;iostream&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> ll long long</span></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> ull unsigned ll</span></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> Tp template<span class="string">&lt;typename _T&gt;</span></span></span><br><span class="line"><span class="function">Tp _T <span class="title">mabs</span><span class="params">(_T x)</span></span>&#123; <span class="keyword">return</span> x&lt;<span class="number">0</span>?-x:x; &#125;</span><br><span class="line"><span class="function">Tp _T <span class="title">mmin</span><span class="params">(_T x,_T y)</span></span>&#123; <span class="keyword">return</span> x&lt;y?x:y; &#125;</span><br><span class="line"><span class="function">Tp _T <span class="title">mmax</span><span class="params">(_T x,_T y)</span></span>&#123; <span class="keyword">return</span> x&lt;y?y:x; &#125;</span><br><span class="line"><span class="function">Tp <span class="type">void</span> <span class="title">mswap</span><span class="params">(_T &amp;x,_T &amp;y)</span></span>&#123; _T t=x; x=y; y=t; <span class="keyword">return</span>; &#125;</span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> std;</span><br><span class="line"><span class="meta">#<span class="keyword">define</span> maxn</span></span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span></span>&#123;</span><br><span class="line"><span class="comment">//freopen(&quot;.in&quot;,&quot;r&quot;,stdin);</span></span><br><span class="line"><span class="comment">//freopen(&quot;.out&quot;,&quot;w&quot;,stdout);</span></span><br><span class="line">cin.<span class="built_in">tie</span>(<span class="number">0</span>); cout.<span class="built_in">tie</span>(<span class="number">0</span>); ios::<span class="built_in">sync_with_stdio</span>(<span class="number">0</span>);</span><br><span class="line"></span><br><span class="line"><span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>ZJ-0023:<br>对怕写错位置</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></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span><span class="string">&lt;bits/stdc++.h&gt;</span></span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> std;</span><br><span class="line"><span class="meta">#<span class="keyword">define</span> rep(i,j,k) for(int i=(j),i##_=(k);i&lt;=i##_;i++)</span></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> per(i,j,k) for(int i=(j),i##_=(k);i&gt;=i##_;i--)</span></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> ckmn(i,j) (i=min(i,j))</span></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> ckmx(i,j) (i=max(i,j))</span></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> fir first</span></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> sec second</span></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> mkp make_pair</span></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> eb emplace_back</span></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> pb push_back</span></span><br><span class="line"><span class="keyword">typedef</span> <span class="type">long</span> <span class="type">long</span> ll;</span><br><span class="line"><span class="keyword">typedef</span> <span class="type">long</span> <span class="type">double</span> db;</span><br><span class="line"><span class="meta">#<span class="keyword">define</span> siz(i) ((int)(i).size())</span></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> all(i) (i).begin(),(i).end()</span></span><br><span class="line"><span class="comment">// #define int ll</span></span><br><span class="line"><span class="keyword">typedef</span> vector&lt;<span class="type">int</span>&gt; vi;</span><br><span class="line"><span class="keyword">typedef</span> pair&lt;<span class="type">int</span>,<span class="type">int</span>&gt; pi;</span><br><span class="line"><span class="function"><span class="type">signed</span> <span class="title">main</span><span class="params">()</span></span>&#123;ios::<span class="built_in">sync_with_stdio</span>(<span class="literal">false</span>),cin.<span class="built_in">tie</span>(<span class="literal">nullptr</span>);</span><br><span class="line">    <span class="built_in">system</span>((<span class="string">&quot;g++ run.cpp -O2 -Dsuper -Wall -Wextra -Wshadow -o run&quot;</span>));</span><br><span class="line">    <span class="built_in">system</span>((<span class="string">&quot;g++ run_bf.cpp -O2 -Dsuper -Wall -Wextra -Wshadow -o run_bf&quot;</span>));</span><br><span class="line">    <span class="built_in">system</span>((<span class="string">&quot;g++ make.cpp -O2 -Dsuper -Wall -Wextra -Wshadow -o make&quot;</span>));</span><br><span class="line">    <span class="keyword">while</span>(<span class="number">1</span>)&#123;</span><br><span class="line">        <span class="built_in">system</span>((<span class="string">&quot;./make &gt; qwq.in&quot;</span>));</span><br><span class="line">        <span class="built_in">system</span>((<span class="string">&quot;./run &lt; qwq.in &gt; 1.out&quot;</span>));</span><br><span class="line">        <span class="built_in">system</span>((<span class="string">&quot;./run_bf &lt; qwq.in &gt; 2.out&quot;</span>));</span><br><span class="line">        <span class="keyword">if</span>(<span class="built_in">system</span>((<span class="string">&quot;diff 1.out 2.out -b&quot;</span>))) <span class="keyword">break</span>;</span><br><span class="line">    &#125;</span><br><span class="line"><span class="keyword">return</span> <span class="number">0</span>;&#125;</span><br></pre></td></tr></table></figure><h3 id="六、原p"><a href="#六、原p" class="headerlink" title="六、原p"></a>六、原p</h3><p>ZJ-0423:</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><span class="line"><span class="comment">//if (3==tt)&#123;</span></span><br><span class="line"><span class="comment">//cout&lt;&lt;&quot;yuanshen&quot;;</span></span><br><span class="line"><span class="comment">//fo(i,1,n) cout&lt;&lt;char(x[i]);</span></span><br><span class="line"><span class="comment">//cout&lt;&lt;endl;</span></span><br><span class="line"><span class="comment">//cout&lt;&lt;&quot;qidong&quot;;</span></span><br><span class="line"><span class="comment">//fo(i,1,n) cout&lt;&lt;char(t[i]);</span></span><br><span class="line"><span class="comment">//cout&lt;&lt;endl;</span></span><br><span class="line"><span class="comment">//&#125;</span></span><br></pre></td></tr></table></figure><h3 id="七、小黑子真爱粉"><a href="#七、小黑子真爱粉" class="headerlink" title="七、小黑子真爱粉"></a>七、<del>小黑子</del>真爱粉</h3><p>ZJ-0467:</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><span class="line"><span class="keyword">struct</span> <span class="title class_">ngm</span>&#123;</span><br><span class="line"><span class="type">int</span> to,nxt,z;</span><br><span class="line">&#125;e[<span class="number">100001</span>];</span><br></pre></td></tr></table></figure><p>ZJ-0285:</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><span class="line">57</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span><span class="string">&lt;bits/stdc++.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> int long long</span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> std;</span><br><span class="line"><span class="type">int</span> dian,T,n,m,ans,kun,d,i,x,y,z,tree[<span class="number">1010</span>][<span class="number">1010</span>],dp[<span class="number">1010</span>][<span class="number">1010</span>],j;</span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">lowbit</span><span class="params">(<span class="type">int</span> x)</span></span>&#123;<span class="keyword">return</span> x&amp;-x;&#125;</span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">add</span><span class="params">(<span class="type">int</span> x,<span class="type">int</span> y,<span class="type">int</span> z)</span></span>&#123;</span><br><span class="line"><span class="keyword">for</span>(;y&lt;=n;y+=<span class="built_in">lowbit</span>(y))</span><br><span class="line">tree[x][y]+=z;</span><br><span class="line">&#125;</span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">da</span><span class="params">(<span class="type">int</span> x,<span class="type">int</span> y)</span></span>&#123;</span><br><span class="line"><span class="type">int</span> sum=<span class="number">0</span>;</span><br><span class="line"><span class="keyword">for</span>(;y;y-=<span class="built_in">lowbit</span>(y))</span><br><span class="line">sum=sum+tree[x][y];</span><br><span class="line"><span class="keyword">return</span> sum;</span><br><span class="line">&#125;</span><br><span class="line"><span class="function"><span class="type">signed</span> <span class="title">main</span><span class="params">()</span></span>&#123;</span><br><span class="line"><span class="built_in">freopen</span>(<span class="string">&quot;run.in&quot;</span>,<span class="string">&quot;r&quot;</span>,stdin);</span><br><span class="line"><span class="built_in">freopen</span>(<span class="string">&quot;run.out&quot;</span>,<span class="string">&quot;w&quot;</span>,stdout);</span><br><span class="line">cin&gt;&gt;dian&gt;&gt;T;</span><br><span class="line"><span class="keyword">if</span>(dian==<span class="number">17</span>||dian==<span class="number">18</span>)&#123;</span><br><span class="line"><span class="keyword">while</span>(T--)&#123;</span><br><span class="line">cin&gt;&gt;n&gt;&gt;m&gt;&gt;kun&gt;&gt;d;ans=<span class="number">0</span>;</span><br><span class="line"><span class="keyword">for</span>(i=<span class="number">1</span>;i&lt;=m;i++)&#123;</span><br><span class="line">cin&gt;&gt;x&gt;&gt;y&gt;&gt;z;</span><br><span class="line"><span class="keyword">if</span>(y&gt;kun||y&gt;x)<span class="keyword">continue</span>;</span><br><span class="line"><span class="keyword">if</span>(z&gt;y*d)ans=ans+z-y*d;</span><br><span class="line">&#125;</span><br><span class="line">cout&lt;&lt;ans&lt;&lt;<span class="string">&#x27;\n&#x27;</span>;</span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">while</span>(T--)&#123;</span><br><span class="line">cin&gt;&gt;n&gt;&gt;m&gt;&gt;kun&gt;&gt;d;</span><br><span class="line"><span class="keyword">for</span>(i=<span class="number">1</span>;i&lt;=n;i++)</span><br><span class="line"><span class="keyword">for</span>(j=<span class="number">0</span>;j&lt;=n;j++)</span><br><span class="line">tree[i][j]=<span class="number">0</span>;</span><br><span class="line"><span class="keyword">for</span>(i=<span class="number">1</span>;i&lt;=m;i++)&#123;</span><br><span class="line">cin&gt;&gt;x&gt;&gt;y&gt;&gt;z;</span><br><span class="line"><span class="built_in">add</span>(x,y,z);</span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">for</span>(i=<span class="number">0</span>;i&lt;=n;i++)</span><br><span class="line"><span class="keyword">for</span>(j=<span class="number">0</span>;j&lt;=kun;j++)</span><br><span class="line">dp[i][j]=<span class="number">-1e18</span>;</span><br><span class="line">dp[<span class="number">0</span>][<span class="number">0</span>]=<span class="number">0</span>;</span><br><span class="line"><span class="keyword">for</span>(i=<span class="number">1</span>;i&lt;=n;i++)&#123;</span><br><span class="line"><span class="keyword">for</span>(j=<span class="number">0</span>;j&lt;=<span class="built_in">min</span>(i<span class="number">-1</span>,kun);j++)</span><br><span class="line">dp[i][<span class="number">0</span>]=<span class="built_in">max</span>(dp[i][<span class="number">0</span>],dp[i<span class="number">-1</span>][j]);</span><br><span class="line"><span class="keyword">for</span>(j=<span class="number">1</span>;j&lt;=<span class="built_in">min</span>(kun,i);j++)</span><br><span class="line">dp[i][j]=dp[i<span class="number">-1</span>][j<span class="number">-1</span>]+<span class="built_in">da</span>(i,j)-d;</span><br><span class="line">&#125;</span><br><span class="line">ans=<span class="number">0</span>;</span><br><span class="line"><span class="keyword">for</span>(j=<span class="number">0</span>;j&lt;=<span class="built_in">min</span>(n,kun);j++)</span><br><span class="line">ans=<span class="built_in">max</span>(ans,dp[n][j]);</span><br><span class="line">cout&lt;&lt;ans&lt;&lt;<span class="string">&#x27;\n&#x27;</span>;</span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h3 id="八、游记"><a href="#八、游记" class="headerlink" title="八、游记"></a>八、游记</h3><p>ZJ-0364:</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></pre></td><td class="code"><pre><span class="line"><span class="comment">// 题记: 老骥伏枥, 志在千里</span></span><br><span class="line"><span class="comment">// 11:41 前两题 如 过了, 来水一下</span></span><br><span class="line"><span class="comment">// 其实l₀是几并不重要</span></span><br><span class="line"><span class="comment">// 只要有一个较短的满足条件即可输出1</span></span><br><span class="line"><span class="comment">// 对前缀DP</span></span><br><span class="line"><span class="comment">// 但是居然要考虑最末尾</span></span><br><span class="line"><span class="comment">// 12:06 ... 遗憾的, 不会写暴力</span></span><br><span class="line"><span class="comment">// 最优策略一定是数字间互相对应</span></span><br><span class="line"><span class="comment">// 不会有一个数字被分成两段</span></span><br><span class="line"><span class="comment">// 12:12 两序列最末端的数字一定会在一起</span></span><br><span class="line"><span class="comment">// 所以结果的相对大小关系与最末端数字相同</span></span><br><span class="line"><span class="comment">// 强制让a &gt; b</span></span><br><span class="line"><span class="comment">// 12：36 啊, 台昆南拉</span></span><br><span class="line"><span class="comment">// 测试点应该是没有捆测, 这点我相信西西弗</span></span><br><span class="line"><span class="comment">// 骗到5分, 险些失手</span></span><br></pre></td></tr></table></figure>]]></content>
    
    
      
      
    <summary type="html">&lt;h2 id=&quot;前言&quot;&gt;&lt;a href=&quot;#前言&quot; class=&quot;headerlink&quot; title=&quot;前言&quot;&gt;&lt;/a&gt;前言&lt;/h2&gt;&lt;p&gt;如果您不愿意展示自己的代码，可以申请撤下您的代码。&lt;/p&gt;
&lt;p&gt;如果上述代码中存在个人信息泄露情况，请立即联系作者。&lt;/p&gt;
&lt;p&gt;代码来</summary>
      
    
    
    
    <category term="整活" scheme="http://blog.wsq127.top/categories/%E6%95%B4%E6%B4%BB/"/>
    
    
    <category term="整活" scheme="http://blog.wsq127.top/tags/%E6%95%B4%E6%B4%BB/"/>
    
    <category term="ZJ" scheme="http://blog.wsq127.top/tags/ZJ/"/>
    
    <category term="NOIp" scheme="http://blog.wsq127.top/tags/NOIp/"/>
    
    <category term="整活大赏" scheme="http://blog.wsq127.top/tags/%E6%95%B4%E6%B4%BB%E5%A4%A7%E8%B5%8F/"/>
    
    <category term="统计" scheme="http://blog.wsq127.top/tags/%E7%BB%9F%E8%AE%A1/"/>
    
  </entry>
  
</feed>
