<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>Wyxoi&#39;s Blog</title>
  <subtitle>OI&#39;s Dream</subtitle>
  <link href="/atom.xml" rel="self"/>
  
  <link href="http://yoursite.com/"/>
  <updated>2016-04-24T12:42:35.999Z</updated>
  <id>http://yoursite.com/</id>
  
  <author>
    <name>wyxoi</name>
    
  </author>
  
  <generator uri="http://hexo.io/">Hexo</generator>
  
  <entry>
    <title>数论函数一丢题解</title>
    <link href="http://yoursite.com/2016/04/22/%E6%95%B0%E8%AE%BA%E5%87%BD%E6%95%B0%E4%B8%80%E4%B8%A2%E9%A2%98%E8%A7%A3/"/>
    <id>http://yoursite.com/2016/04/22/数论函数一丢题解/</id>
    <published>2016-04-22T06:16:03.000Z</published>
    <updated>2016-04-24T12:42:35.999Z</updated>
    
    <content type="html">&lt;p&gt;省选二试之前刷数论&lt;del&gt;(水)&lt;/del&gt;，来写一写题解。&lt;br&gt;&lt;a id=&quot;more&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;embed src=&quot;http://music.163.com/style/swf/widget.swf?sid=409872507&amp;type=2&amp;auto=0&amp;width=320&amp;height=66&quot; width=&quot;340&quot; height=&quot;86&quot; allownetworking=&quot;all&quot;&gt;Aimer女神的新歌，三天4000+的评论，期待完整版&lt;br&gt;突然想起来我是不是还有一个主席树的坑。。&lt;em&gt;(:з」∠)&lt;/em&gt; 。。算了不管他了。。&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;BZOJ-2301-HAOI2011-Problem-b&quot;&gt;&lt;a href=&quot;#BZOJ-2301-HAOI2011-Problem-b&quot; class=&quot;headerlink&quot; title=&quot;BZOJ 2301: [HAOI2011]Problem b&quot;&gt;&lt;/a&gt;BZOJ 2301: [HAOI2011]Problem b&lt;/h3&gt;&lt;p&gt;&lt;a href=&quot;http:\\www.lydsy.com/JudgeOnline/problem.php?id=2301&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;点击这里去虐题&lt;/a&gt;&lt;br&gt;题意要求$\sum_{i=a}^{b}\sum_{j=c}^{d}e(gcd(i,j)=k)$&lt;br&gt;首先我们可以利用容斥，将二维区间的询问改为四个二维前缀的询问。&lt;br&gt;然后显然的$\sum_{i=1}^{n}\sum_{j=1}^{m}e(gcd(i,j)=k)=\sum_{i=1}^{\lfloor\frac{n}{k}\rfloor}\sum_{j=1}^{\lfloor\frac{m}{k}\rfloor}e(gcd(i,j))$&lt;br&gt;然后尝试化简&lt;br&gt;$$&lt;br&gt;\begin{align}&lt;br&gt;&amp;amp; \ \sum_{i=1}^{n}\sum_{j=1}^{m}e(gcd(i,j)) \\&lt;br&gt;= &amp;amp; \ \sum_{i=1}^{n}\sum_{j=1}^{m}\sum_{d|gcd(i,j)}\mu(d) \\&lt;br&gt;= &amp;amp; \ \sum_{d}\sum_{i=1}^{\lfloor\frac{n}{d}\rfloor}\sum_{j=1}^{\lfloor\frac{m}{d}\rfloor}\mu(d) \\&lt;br&gt;= &amp;amp; \ \sum_{d}\mu(d)\lfloor\frac{n}{d}\rfloor\lfloor\frac{m}{d}\rfloor \\&lt;br&gt;\end{align}&lt;br&gt;$$&lt;br&gt;对于$\lfloor\frac{n}{d}\rfloor$的值，只有$\sqrt{n}$种，预处理莫比乌斯函数前缀和之后分段处理。&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;BZOJ-2005-Noi2010-能量采集&quot;&gt;&lt;a href=&quot;#BZOJ-2005-Noi2010-能量采集&quot; class=&quot;headerlink&quot; title=&quot;BZOJ 2005: [Noi2010]能量采集&quot;&gt;&lt;/a&gt;BZOJ 2005: [Noi2010]能量采集&lt;/h3&gt;&lt;p&gt;&lt;a href=&quot;http://www.lydsy.com/JudgeOnline/problem.php?id=2005&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;点击这里去虐题&lt;/a&gt;&lt;br&gt;题意要求&lt;br&gt;$$&lt;br&gt;\begin{align}&lt;br&gt;&amp;amp; \ \sum_{i=1}^{n}\sum_{j=1}^{m}(gcd(i,j)*2-1) \\&lt;br&gt;= &amp;amp; \ 2*\sum_{i=1}^{n}\sum_{j=1}^{m}gcd(i,j)-n*m \\&lt;br&gt;\end{align}&lt;br&gt;$$&lt;br&gt;然后就如同上题一样求出$\sum_{i=1}^{n}\sum_{j=1}^{m}gcd(i,j)$即可&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;BZOJ-2820-YY的GCD&quot;&gt;&lt;a href=&quot;#BZOJ-2820-YY的GCD&quot; class=&quot;headerlink&quot; title=&quot;BZOJ 2820: YY的GCD&quot;&gt;&lt;/a&gt;BZOJ 2820: YY的GCD&lt;/h3&gt;&lt;p&gt;&lt;a href=&quot;http://www.lydsy.com/JudgeOnline/problem.php?id=2820&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;点击这里去虐题&lt;/a&gt;&lt;br&gt;题意要求$\sum_{i=1}^{n}\sum_{j=1}^{m}1(gcd(i,j)是质数)$&lt;br&gt;我们设$f(n)=&lt;br&gt;\begin{cases}&lt;br&gt;1\ \ \ n是质数 \\&lt;br&gt;0\ \ \ n不是质数 \\&lt;br&gt;\end{cases}&lt;br&gt;$&lt;br&gt;于是问题就变成了求$\sum_{i=1}^{n}\sum_{j=1}^{m}f(gcd(i,j))$了&lt;br&gt;$$&lt;br&gt;\begin{align}&lt;br&gt;&amp;amp; \ \sum_{i=1}^{n}\sum_{j=1}^{m}f(gcd(i,j)) \\&lt;br&gt;= &amp;amp; \ \sum_{d}\sum_{i=1}^{\lfloor\frac{n}{d}\rfloor}\sum_{j=1}^{\lfloor\frac{m}{d}\rfloor}f(d)e(gcd(i,j)) \\&lt;br&gt;= &amp;amp; \ \sum_{d}f(d)\sum_{i=1}^{\lfloor\frac{n}{d}\rfloor}\sum_{j=1}^{\lfloor\frac{m}{d}\rfloor}\sum_{d’|gcd(i,j)}\mu(d’) \\&lt;br&gt;= &amp;amp; \ \sum_{d}\sum_{d’}f(d)\mu(d’)\sum_{i=1}^{\lfloor\frac{n}{dd’}\rfloor}\sum_{j=1}^{\lfloor\frac{m}{dd’}\rfloor} \\&lt;br&gt;= &amp;amp; \ \sum_{d}\sum_{d’}f(d)\mu(d’)\lfloor\frac{n}{dd’}\rfloor\lfloor\frac{m}{dd’}\rfloor \\&lt;br&gt;\end{align}&lt;br&gt;$$&lt;br&gt;设$g(n)=\sum_{d|n}f(d)\mu(\frac{n}{d})$&lt;br&gt;$$&lt;br&gt;\begin{align}&lt;br&gt;&amp;amp; \ \sum_{d}\sum_{d’}f(d)\mu(d’)\lfloor\frac{n}{dd’}\rfloor\lfloor\frac{m}{dd’}\rfloor \\&lt;br&gt;= &amp;amp; \ \sum_{i=1}^{n}g(i)\lfloor\frac{n}{i}\rfloor\lfloor\frac{m}{i}\rfloor \\&lt;br&gt;\end{align}&lt;br&gt;$$&lt;br&gt;然后与上题类似预处理g的前缀和，对函数分段计算。&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;BZOJ-3309-DZY-Loves-Math&quot;&gt;&lt;a href=&quot;#BZOJ-3309-DZY-Loves-Math&quot; class=&quot;headerlink&quot; title=&quot;BZOJ 3309: DZY Loves Math&quot;&gt;&lt;/a&gt;BZOJ 3309: DZY Loves Math&lt;/h3&gt;&lt;p&gt;&lt;a href=&quot;http://www.lydsy.com/JudgeOnline/problem.php?id=3309&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;点击这里去虐题&lt;/a&gt;&lt;br&gt;将上题中的函数f的定义换一下就可以。&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;BZOJ-2154-Crash的数字表格&quot;&gt;&lt;a href=&quot;#BZOJ-2154-Crash的数字表格&quot; class=&quot;headerlink&quot; title=&quot;BZOJ 2154: Crash的数字表格&quot;&gt;&lt;/a&gt;BZOJ 2154: Crash的数字表格&lt;/h3&gt;&lt;p&gt;&lt;a href=&quot;http://www.lydsy.com/JudgeOnline/problem.php?id=2154&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;点击这里去虐题&lt;/a&gt;&lt;br&gt;题意要求$\sum_{i=1}^{n}\sum_{j=1}^{m}lcm(i,j)$&lt;br&gt;尝试转化成枚举Gcd的形式&lt;br&gt;$$&lt;br&gt;\begin{align}&lt;br&gt;&amp;amp; \ \sum_{i=1}^{n}\sum_{j=1}^{m}\left(\frac{i*j}{gcd(i,j)}\right) \\&lt;br&gt;= &amp;amp; \ \sum_{d}\sum_{i=1}^{\lfloor\frac{n}{d}\rfloor}\sum_{j=1}^{\lfloor\frac{m}{d}\rfloor}\left(\frac{id*jd}{d}\right)e(gcd(i,j)) \\&lt;br&gt;= &amp;amp; \ \sum_{d}d\sum_{i=1}^{\lfloor\frac{n}{d}\rfloor}\sum_{j=1}^{\lfloor\frac{m}{d}\rfloor}i*j\sum_{d’|gcd(i,j)}\mu(d’) \\&lt;br&gt;= &amp;amp; \ \sum_{d}\sum_{d’}d*d’^2*\mu(d’)\sum_{i=1}^{\lfloor\frac{n}{dd’}\rfloor}\sum_{j=1}^{\lfloor\frac{m}{dd’}\rfloor}i*j \\&lt;br&gt;\end{align}&lt;br&gt;$$&lt;br&gt;很显然的可以得到$\sum_{i=1}^{n}\sum_{j=1}^{m}i*j=\frac{1}{4}nm(n+1)(m+1)$&lt;br&gt;与上题类似地设$g(n)=\sum_{d|n}d^2*\mu(d)*\frac{n}{d}$&lt;br&gt;$$&lt;br&gt;\begin{align}&lt;br&gt;&amp;amp; \ \sum_{d}\sum_{d’}d*d’^2*\mu(d’)\sum_{i=1}^{\lfloor\frac{n}{dd’}\rfloor}\sum_{j=1}^{\lfloor\frac{m}{dd’}\rfloor}i*j \\&lt;br&gt;= &amp;amp; \ \sum_{i}g(i)\sum_{i=1}^{\lfloor\frac{n}{i}\rfloor}\sum_{j=1}^{\lfloor\frac{m}{i}\rfloor}i*j&lt;br&gt;\end{align}&lt;br&gt;$$&lt;br&gt;因为g是积性函数，所以可以做到$O(n)$预处理。&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;BZOJ-2693-jzptab&quot;&gt;&lt;a href=&quot;#BZOJ-2693-jzptab&quot; class=&quot;headerlink&quot; title=&quot;BZOJ 2693: jzptab&quot;&gt;&lt;/a&gt;BZOJ 2693: jzptab&lt;/h3&gt;&lt;p&gt;&lt;a href=&quot;http://www.lydsy.com/JudgeOnline/problem.php?id=2693&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;点击这里去虐题&lt;/a&gt;&lt;br&gt;与上题相同，多组数据&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;BZOJ-3560-DZY-Loves-Math-V&quot;&gt;&lt;a href=&quot;#BZOJ-3560-DZY-Loves-Math-V&quot; class=&quot;headerlink&quot; title=&quot;BZOJ 3560: DZY Loves Math V&quot;&gt;&lt;/a&gt;BZOJ 3560: DZY Loves Math V&lt;/h3&gt;&lt;p&gt;&lt;a href=&quot;http://www.lydsy.com/JudgeOnline/problem.php?id=3560&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;点击这里去虐题&lt;/a&gt;&lt;br&gt;题意要求$\sum_{i_1|a_1}\sum_{i_2|a_2}\cdots\sum_{i_n|a_n}\varphi(i_{1}i_{2}\cdots i_n)$&lt;br&gt;我们知道$\varphi$是一个积性函数，考虑通过积性函数的性质进行计算&lt;br&gt;考虑分解质因子计算，求出每一种质因子的$\varphi$值即可，先计算出所有的组合情况&lt;br&gt;设$q_i$为$p$因子在$a_i$中出现的次数，那么就是要求$$sum=\prod_{i=1}^{n}\sum_{k=0}^{q_i}p_i$$&lt;br&gt;只有不含$p$因子的那一项不乘$\frac{p-1}{p}$，单独处理即可，易得对答案的贡献为$$\frac{p-1}{p}(sum-1)+1$$&lt;br&gt;当$a_i$较大的时候需要使用rho等高效的分解质因数方法。&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;BZOJ-3561-DZY-Loves-Math-VI&quot;&gt;&lt;a href=&quot;#BZOJ-3561-DZY-Loves-Math-VI&quot; class=&quot;headerlink&quot; title=&quot;BZOJ 3561: DZY Loves Math VI&quot;&gt;&lt;/a&gt;BZOJ 3561: DZY Loves Math VI&lt;/h3&gt;&lt;p&gt;&lt;a href=&quot;http://www.lydsy.com/JudgeOnline/problem.php?id=3561&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;点击这里去虐题&lt;/a&gt;&lt;br&gt;题意要求$$\sum_{i=1}^{n}\sum_{j=1}^{m}lcm(i,j)^{gcd(i,j)}$$&lt;br&gt;考虑改为枚举gcd的形式&lt;br&gt;$$&lt;br&gt;\begin{align}&lt;br&gt;&amp;amp; \ \sum_{i=1}^{n}\sum_{j=1}^{m}(\frac{i*j}{gcd(i,j)})^{gcd(i,j)} \\&lt;br&gt;= &amp;amp; \ \sum_{d}\sum_{i=1}^{\lfloor\frac{n}{d}\rfloor}\sum_{j=1}^{\lfloor\frac{m}{d}\rfloor}(\frac{id*jd}{d})^{d}e(gcd(i,j)) \\&lt;br&gt;= &amp;amp; \ \sum_{d}d^{d}\sum_{i=1}^{\lfloor\frac{n}{d}\rfloor}\sum_{j=1}^{\lfloor\frac{m}{d}\rfloor}(i*j)^{d}\sum_{d’|gcd(i,j)}\mu(d’) \\&lt;br&gt;= &amp;amp; \ \sum_{d}d^{d}\sum_{d’}\mu(d’)\sum_{i=1}^{\lfloor\frac{n}{dd’}\rfloor}\sum_{j=1}^{\lfloor\frac{m}{dd’}\rfloor}(id’*jd’)^{d} \\&lt;br&gt;= &amp;amp; \ \sum_{d}d^{d}\sum_{d’}\mu(d’)d’^{2d’}\sum_{i=1}^{\lfloor\frac{n}{dd’}\rfloor}i^d\sum_{j=1}^{\lfloor\frac{m}{dd’}\rfloor}j^d \\&lt;br&gt;\end{align}&lt;br&gt;$$&lt;br&gt;对于每一个$d$暴力维护一下$\sum_{d’}\mu(d’)d’^{2d’}$和$\sum_{i=1}^{\lfloor\frac{n}{dd’}\rfloor}i^d$即可&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;BZOJ-3739-DZY-loves-math-VIII&quot;&gt;&lt;a href=&quot;#BZOJ-3739-DZY-loves-math-VIII&quot; class=&quot;headerlink&quot; title=&quot;BZOJ 3739: DZY loves math VIII&quot;&gt;&lt;/a&gt;BZOJ 3739: DZY loves math VIII&lt;/h3&gt;&lt;p&gt;&lt;a href=&quot;http://www.lydsy.com/JudgeOnline/problem.php?id=3739&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;点击这里去虐题&lt;/a&gt;&lt;br&gt;题意要求$$\sum_{i=1}^{n}\sum_{j=1}^{i}\mu(lcm(i,j)^{gcd(i,j)})$$&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;有错误请指出$$Continue…$$&lt;/p&gt;
</content>
    
    <summary type="html">
    
      &lt;p&gt;省选二试之前刷数论&lt;del&gt;(水)&lt;/del&gt;，来写一写题解。&lt;br&gt;
    
    </summary>
    
      <category term="题解" scheme="http://yoursite.com/categories/%E9%A2%98%E8%A7%A3/"/>
    
    
      <category term="题解" scheme="http://yoursite.com/tags/%E9%A2%98%E8%A7%A3/"/>
    
      <category term="数论" scheme="http://yoursite.com/tags/%E6%95%B0%E8%AE%BA/"/>
    
      <category term="数论函数" scheme="http://yoursite.com/tags/%E6%95%B0%E8%AE%BA%E5%87%BD%E6%95%B0/"/>
    
      <category term="杜教筛" scheme="http://yoursite.com/tags/%E6%9D%9C%E6%95%99%E7%AD%9B/"/>
    
  </entry>
  
  <entry>
    <title>三月走了啊</title>
    <link href="http://yoursite.com/2016/03/31/%E4%B8%89%E6%9C%88%E8%B5%B0%E4%BA%86%E5%95%8A/"/>
    <id>http://yoursite.com/2016/03/31/三月走了啊/</id>
    <published>2016-03-31T11:53:29.000Z</published>
    <updated>2016-03-31T12:51:32.000Z</updated>
    
    <content type="html">&lt;p&gt;本来还没有什么感觉，晚上翻博客的时候看到了一个月前发癫的时候写的博客，才意识到已经一个月过去了。&lt;br&gt;&lt;a id=&quot;more&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;embed src=&quot;http://music.163.com/style/swf/widget.swf?sid=28629058&amp;type=2&amp;auto=0&amp;width=320&amp;height=66&quot; width=&quot;340&quot; height=&quot;86&quot; allownetworking=&quot;all&quot;&gt;&lt;br&gt;一个月过去了，天气已经越来越暖和了。绍一的樱花落了，取而代之的美丽是慢慢葱郁的爬山虎。一切都在悄无声息地改变着。而一个月后的我呢。还是这样的无力。&lt;br&gt;&lt;br&gt;省一以后机房里少了好多人，外省的神犇走了。高二的一些学长也不来了。又一年的省选季。不如说是又一年的退役季吧。去年也是今年也是，看着一些学长胸怀梦想来到这里，然后失落地离去。&lt;br&gt;&lt;br&gt;明年这个时候。应该就是我离去的时候了吧。离开这个逃避现实的避风港。是啊我一直在逃避着。一直想着，还有一年多吧，时间还有啊。什么时候励励志就能追上去的吧。&lt;br&gt;&lt;br&gt;明明已经是被甩在身后的爬虫，却每天生活在幻想里。为一些没有意义的事情浪费时间，还沾沾自喜着。庸庸碌碌地过着每一天，就像现在这样一个月来毫无进步。&lt;br&gt;&lt;br&gt;是我不适合OI吧，只能这样安慰自己了。也许一心一意搞文化课会有点成绩呢。可是我怎么又会不知道呢，只要是石头，到哪里都不会发光的。&lt;br&gt;&lt;br&gt;不想写一些励志的话。我做不到的。爬虫还是继续活在自己的世界里好吧。&lt;br&gt;&lt;br&gt;谁も仆を望まない&lt;br&gt;&lt;br&gt;そんな世界だったらいいのかな&lt;br&gt;&lt;/p&gt;
</content>
    
    <summary type="html">
    
      &lt;p&gt;本来还没有什么感觉，晚上翻博客的时候看到了一个月前发癫的时候写的博客，才意识到已经一个月过去了。&lt;br&gt;
    
    </summary>
    
      <category term="杂文" scheme="http://yoursite.com/categories/%E6%9D%82%E6%96%87/"/>
    
    
      <category term="杂文" scheme="http://yoursite.com/tags/%E6%9D%82%E6%96%87/"/>
    
      <category term="不定时发癫" scheme="http://yoursite.com/tags/%E4%B8%8D%E5%AE%9A%E6%97%B6%E5%8F%91%E7%99%AB/"/>
    
  </entry>
  
  <entry>
    <title>主席树预习与整理</title>
    <link href="http://yoursite.com/2016/03/31/%E4%B8%BB%E5%B8%AD%E6%A0%91%E9%A2%84%E4%B9%A0%E4%B8%8E%E6%95%B4%E7%90%86/"/>
    <id>http://yoursite.com/2016/03/31/主席树预习与整理/</id>
    <published>2016-03-31T10:47:23.000Z</published>
    <updated>2016-04-03T11:25:51.877Z</updated>
    
    <content type="html">&lt;p&gt;这几天在看主席树的题目，发现我数据结构能力缺失严重，主席树几&lt;del&gt;(根)&lt;/del&gt;乎&lt;del&gt;(本)&lt;/del&gt;忘&lt;del&gt;(不)&lt;/del&gt;了&lt;del&gt;(会)&lt;/del&gt;。于是来整理复&lt;del&gt;(预)&lt;/del&gt;习一下主席树相关的内容。&lt;br&gt;&lt;a id=&quot;more&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;embed src=&quot;http://music.163.com/style/swf/widget.swf?sid=33471584&amp;type=2&amp;auto=0&amp;width=320&amp;height=66&quot; width=&quot;340&quot; height=&quot;86&quot; allownetworking=&quot;all&quot;&gt;这几天好像洛天依的歌听上瘾了。。&lt;em&gt;(:з」∠)&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;关于主席树是什么，通俗的来说就是对于一个序列每一个前缀建一颗线段树，利用区间减法的性质快速维护一段区间的信息。&lt;/p&gt;
&lt;p&gt;$$\mathcal {Loading\ldots}$$&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;有错误请指出$$\mathcal {Continue\ldots}$$&lt;/p&gt;
</content>
    
    <summary type="html">
    
      &lt;p&gt;这几天在看主席树的题目，发现我数据结构能力缺失严重，主席树几&lt;del&gt;(根)&lt;/del&gt;乎&lt;del&gt;(本)&lt;/del&gt;忘&lt;del&gt;(不)&lt;/del&gt;了&lt;del&gt;(会)&lt;/del&gt;。于是来整理复&lt;del&gt;(预)&lt;/del&gt;习一下主席树相关的内容。&lt;br&gt;
    
    </summary>
    
      <category term="笔记" scheme="http://yoursite.com/categories/%E7%AC%94%E8%AE%B0/"/>
    
    
      <category term="笔记" scheme="http://yoursite.com/tags/%E7%AC%94%E8%AE%B0/"/>
    
      <category term="主席树" scheme="http://yoursite.com/tags/%E4%B8%BB%E5%B8%AD%E6%A0%91/"/>
    
      <category term="题解" scheme="http://yoursite.com/tags/%E9%A2%98%E8%A7%A3/"/>
    
  </entry>
  
  <entry>
    <title>一道题目引发的惨案</title>
    <link href="http://yoursite.com/2016/03/30/%E4%B8%80%E9%81%93%E9%A2%98%E7%9B%AE%E5%BC%95%E5%8F%91%E7%9A%84%E6%83%A8%E6%A1%88/"/>
    <id>http://yoursite.com/2016/03/30/一道题目引发的惨案/</id>
    <published>2016-03-30T09:27:44.000Z</published>
    <updated>2016-03-31T10:50:15.000Z</updated>
    
    <content type="html">&lt;p&gt;这是一个因为插比利而发生的惨案，进而引出了一堆坑。_(:з」∠)_&lt;br&gt;&lt;a id=&quot;more&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;embed src=&quot;http://music.163.com/style/swf/widget.swf?sid=32317208&amp;type=2&amp;auto=0&amp;width=320&amp;height=66&quot; width=&quot;340&quot; height=&quot;86&quot; allownetworking=&quot;all&quot;&gt;

&lt;hr&gt;
&lt;p&gt;一切罪恶的根源啊呸没有罪恶&lt;a href=&quot;http://www.lydsy.com/JudgeOnline/problem.php?id=3236&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;BZOJ3236&lt;/a&gt;&lt;br&gt;事情是怎么样发生的呢。。。当时我听到比利和qiancl在讨论3236，大概的题目是一个序列，求l，r间属于[a,b]的颜色种数。当时我这道题目是用莫队套分块过去的，复杂度是$O(N\cdot \sqrt{N})$的。然后这道题目想一想应该是可以用树套树什么的$log^2N$做的，但是时间和编程复杂度不一定比莫队优。&lt;br&gt;&lt;br&gt;这个时候比利就开始口胡了，说有一只$log$的做法，他说可以把询问区间插成前缀和，排序后就可以一只$log$维护答案了。一听感觉有点道理，但是好像维护的是颜色种类不满足减法，妈的智障。&lt;br&gt;&lt;br&gt;然后比利又开始口胡，既然拆区间拆不了可以把询问的颜色范围拆成两个，然后前缀和，现在总满足减法了吧。突然感觉好有道理。然后细想询问排序之后的插入还是需要一个数据结构维护，所以复杂度还是两只$log$的。妈的智障，并没有什么区别。&lt;br&gt;&lt;br&gt;事情还并没有结束，晚自修的时候，比利走过来和我说他在PoPoQQQ的blog上看到了一只$log$的做法，好像是用主席树在线维护区间颜色种类。感觉很高端的样子，一翻BZOJ翻出来一堆类似的题目。&lt;em&gt;(:з」∠)&lt;/em&gt;&lt;br&gt;&lt;br&gt;我看到这些题目的第一反应就是，奥这道题目啊不是莫队吗，奥这个不是带修改莫队吗，奥这道题我好像以前是用莫队水过去的。。&lt;em&gt;(:з」∠)&lt;/em&gt;&lt;br&gt;&lt;br&gt;感觉我数据结构能力缺失得有点严重，还是补一下比较好。&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;所以上面写了一堆废话，让我们来总结一下这篇博文的主题是什么。&lt;/p&gt;
&lt;h4 id=&quot;用主席树求区间颜色种类的在线带修改算法。（怎么这么绕呢）&quot;&gt;&lt;a href=&quot;#用主席树求区间颜色种类的在线带修改算法。（怎么这么绕呢）&quot; class=&quot;headerlink&quot; title=&quot;用主席树求区间颜色种类的在线带修改算法。（怎么这么绕呢）&quot;&gt;&lt;/a&gt;&lt;strong&gt;用主席树求区间颜色种类的在线带修改算法。&lt;del&gt;（怎么这么绕呢）&lt;/del&gt;&lt;/strong&gt;&lt;/h4&gt;&lt;p&gt;如果不会主席树可以去&lt;a href=&quot;/2016/03/31/主席树预习与整理/&quot;&gt;这里&lt;/a&gt;学习。&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;span id=&quot;jump_xuzhang&quot;&gt; &lt;/span&gt;&lt;/p&gt;
&lt;h3 id=&quot;序幕：离线求不带修改区间颜色种类&quot;&gt;&lt;a href=&quot;#序幕：离线求不带修改区间颜色种类&quot; class=&quot;headerlink&quot; title=&quot;序幕：离线求不带修改区间颜色种类&quot;&gt;&lt;/a&gt;序幕：离线求不带修改区间颜色种类&lt;/h3&gt;&lt;p&gt;例题：&lt;a href=&quot;http://www.lydsy.com/JudgeOnline/problem.php?id=1878&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;1878: [SDOI2009]HH的项链&lt;/a&gt;&lt;br&gt;&lt;del&gt;（很多题解里都提到了这道题的树状数组离线做法，然而我一点印象都没有，后来才发现我写的是莫队，妈的智障）&lt;/del&gt;&lt;br&gt;这道题主要的问题是要求区间的颜色种数，一种颜色只能被计算一次。我们可以对序列预处理一下，处理出每一个点之前的第一个与他相同的点的位置，记为next[i]。然后对于一个区间[l,r]里只出现一次的点，显然满足next&amp;lt;l。&lt;br&gt;然后我们把询问离线，按照r排序，按照顺序插入节点，树状数组维护next小于l的数量，就可以在log的时间内处理问题了。&lt;/p&gt;
&lt;figure class=&quot;highlight c++&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;11&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;12&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;13&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;14&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;15&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;16&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;17&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;18&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;19&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;20&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;21&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;22&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;23&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;24&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;25&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;26&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;27&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;28&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;29&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;30&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;31&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;32&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;33&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;34&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;35&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;36&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;37&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;38&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;39&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;40&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;41&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;meta&quot;&gt;#&lt;span class=&quot;meta-keyword&quot;&gt;include&lt;/span&gt; &lt;span class=&quot;meta-string&quot;&gt;&amp;lt;cstdio&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;meta&quot;&gt;#&lt;span class=&quot;meta-keyword&quot;&gt;include&lt;/span&gt; &lt;span class=&quot;meta-string&quot;&gt;&amp;lt;cstring&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;meta&quot;&gt;#&lt;span class=&quot;meta-keyword&quot;&gt;include&lt;/span&gt; &lt;span class=&quot;meta-string&quot;&gt;&amp;lt;algorithm&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; N = &lt;span class=&quot;number&quot;&gt;1000010&lt;/span&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;using&lt;/span&gt; &lt;span class=&quot;keyword&quot;&gt;namespace&lt;/span&gt; &lt;span class=&quot;built_in&quot;&gt;std&lt;/span&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; S[N],val[N],head[N],next[N],n,m,now,ans[N];&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;struct&lt;/span&gt; data&amp;#123;&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; x,y,id;&amp;#125; q[N];&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;function&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;title&quot;&gt;read&lt;/span&gt;&lt;span class=&quot;params&quot;&gt;()&lt;/span&gt;&lt;/span&gt;&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; x = &lt;span class=&quot;number&quot;&gt;0&lt;/span&gt;,f = &lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;,c = getchar();&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;while&lt;/span&gt; (c&amp;lt;&lt;span class=&quot;string&quot;&gt;&#39;0&#39;&lt;/span&gt; || c&amp;gt;&lt;span class=&quot;string&quot;&gt;&#39;9&#39;&lt;/span&gt;) &amp;#123;&lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt; (c==&lt;span class=&quot;string&quot;&gt;&#39;-&#39;&lt;/span&gt;) f = &lt;span class=&quot;number&quot;&gt;-1&lt;/span&gt;;c = getchar();&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;while&lt;/span&gt; (c&amp;gt;=&lt;span class=&quot;string&quot;&gt;&#39;0&#39;&lt;/span&gt; &amp;amp;&amp;amp; c&amp;lt;=&lt;span class=&quot;string&quot;&gt;&#39;9&#39;&lt;/span&gt;) x = x*&lt;span class=&quot;number&quot;&gt;10&lt;/span&gt;+c-&lt;span class=&quot;string&quot;&gt;&#39;0&#39;&lt;/span&gt;,c = getchar();&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt; x*f;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;function&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;title&quot;&gt;lowbit&lt;/span&gt;&lt;span class=&quot;params&quot;&gt;(&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; x)&lt;/span&gt;&lt;/span&gt;&amp;#123;&lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt; x&amp;amp;-x;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;function&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;title&quot;&gt;Query&lt;/span&gt;&lt;span class=&quot;params&quot;&gt;(&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; pos)&lt;/span&gt;&lt;/span&gt;&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; res = &lt;span class=&quot;number&quot;&gt;0&lt;/span&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;for&lt;/span&gt; (&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; i=pos;i;i-=lowbit(i)) res+=S[i];&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt; res;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;function&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;title&quot;&gt;Update&lt;/span&gt;&lt;span class=&quot;params&quot;&gt;(&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; pos,&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; val)&lt;/span&gt; &lt;/span&gt;&amp;#123;&lt;span class=&quot;keyword&quot;&gt;for&lt;/span&gt; (&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; i=pos;i&amp;lt;=n+&lt;span class=&quot;number&quot;&gt;2&lt;/span&gt;;i+=lowbit(i)) S[i]+=val;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;function&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;bool&lt;/span&gt; &lt;span class=&quot;title&quot;&gt;cmp&lt;/span&gt;&lt;span class=&quot;params&quot;&gt;(data a,data b)&lt;/span&gt;&lt;/span&gt;&amp;#123;&lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt; a.y&amp;lt;b.y;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;function&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;title&quot;&gt;main&lt;/span&gt;&lt;span class=&quot;params&quot;&gt;()&lt;/span&gt;&lt;/span&gt;&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	n = read();&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;for&lt;/span&gt; (&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; i=&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;;i&amp;lt;=n;i++) &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;		val[i] = read();&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;		next[i] = head[val[i]];&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;		head[val[i]] = i;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	m = read();&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;for&lt;/span&gt; (&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; i=&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;;i&amp;lt;=m;i++) q[i].x = read(),q[i].y = read(),q[i].id = i;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	sort(q+&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;,q+&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;+m,cmp);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;for&lt;/span&gt; (&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; i=&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;;i&amp;lt;=m;i++) &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;		&lt;span class=&quot;keyword&quot;&gt;while&lt;/span&gt; (now&amp;lt;q[i].y) &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;			now++;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;			Update(next[now]+&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;,&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;			Update(now+&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;,&lt;span class=&quot;number&quot;&gt;-1&lt;/span&gt;);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;		&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;		ans[q[i].id] = Query(q[i].x);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;for&lt;/span&gt; (&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; i=&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;;i&amp;lt;=m;i++) &lt;span class=&quot;built_in&quot;&gt;printf&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&quot;%d\n&quot;&lt;/span&gt;,ans[i]);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;hr&gt;
&lt;h3 id=&quot;发展：在线求不带修改区间颜色种类&quot;&gt;&lt;a href=&quot;#发展：在线求不带修改区间颜色种类&quot; class=&quot;headerlink&quot; title=&quot;发展：在线求不带修改区间颜色种类&quot;&gt;&lt;/a&gt;发展：在线求不带修改区间颜色种类&lt;/h3&gt;&lt;p&gt;例题：&lt;a href=&quot;http://www.lydsy.com/JudgeOnline/problem.php?id=1878&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;1878: [SDOI2009]HH的项链&lt;/a&gt; （找不到强制在线的模板题了，可以把它当成在线做&lt;em&gt;(:з」∠)&lt;/em&gt;）&lt;br&gt;和上一道题目的想法相似，稍微改变一下next[i]为一个点之后与他相同的点的位置，然后也是可以显然的知道在区间[l,r]之间只出现一次的点的next&amp;gt;r。然后我们可以发现这个东西是满足区间减法的。&lt;br&gt;于是可以想到用主席树求解。对于第i颗线段树在next[i]的位置+1。这样我们就可以容易地求出1~x中next&amp;gt;y的点的数量（在第x颗线段树上对y+1~n+1求和），求区间可以转化成前缀相减的形式。然后就可以在线了。&lt;/p&gt;
&lt;figure class=&quot;highlight c++&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;11&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;12&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;13&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;14&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;15&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;16&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;17&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;18&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;19&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;20&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;21&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;22&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;23&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;24&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;25&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;26&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;27&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;28&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;29&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;30&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;31&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;32&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;33&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;34&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;35&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;36&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;37&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;38&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;39&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;40&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;41&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;42&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;43&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;meta&quot;&gt;#&lt;span class=&quot;meta-keyword&quot;&gt;include&lt;/span&gt; &lt;span class=&quot;meta-string&quot;&gt;&amp;lt;cstdio&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;meta&quot;&gt;#&lt;span class=&quot;meta-keyword&quot;&gt;include&lt;/span&gt; &lt;span class=&quot;meta-string&quot;&gt;&amp;lt;cstring&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;meta&quot;&gt;#&lt;span class=&quot;meta-keyword&quot;&gt;include&lt;/span&gt; &lt;span class=&quot;meta-string&quot;&gt;&amp;lt;algorithm&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; N = &lt;span class=&quot;number&quot;&gt;100010&lt;/span&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;using&lt;/span&gt; &lt;span class=&quot;keyword&quot;&gt;namespace&lt;/span&gt; &lt;span class=&quot;built_in&quot;&gt;std&lt;/span&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;function&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;title&quot;&gt;read&lt;/span&gt;&lt;span class=&quot;params&quot;&gt;()&lt;/span&gt;&lt;/span&gt;&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; x = &lt;span class=&quot;number&quot;&gt;0&lt;/span&gt;,f = &lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;,c = getchar();&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;while&lt;/span&gt; (c&amp;lt;&lt;span class=&quot;string&quot;&gt;&#39;0&#39;&lt;/span&gt; || c&amp;gt;&lt;span class=&quot;string&quot;&gt;&#39;9&#39;&lt;/span&gt;) &amp;#123;&lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt; (c==&lt;span class=&quot;string&quot;&gt;&#39;-&#39;&lt;/span&gt;) f = &lt;span class=&quot;number&quot;&gt;-1&lt;/span&gt;;c = getchar();&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;while&lt;/span&gt; (c&amp;gt;=&lt;span class=&quot;string&quot;&gt;&#39;0&#39;&lt;/span&gt; &amp;amp;&amp;amp; c&amp;lt;=&lt;span class=&quot;string&quot;&gt;&#39;9&#39;&lt;/span&gt;) x = x*&lt;span class=&quot;number&quot;&gt;10&lt;/span&gt;+c-&lt;span class=&quot;string&quot;&gt;&#39;0&#39;&lt;/span&gt;,c = getchar();&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt; x*f;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;struct&lt;/span&gt; Tree&amp;#123;&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; ls,rs,sum;&amp;#125; tree[&lt;span class=&quot;number&quot;&gt;3000010&lt;/span&gt;];&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; next[&lt;span class=&quot;number&quot;&gt;1000010&lt;/span&gt;],head[&lt;span class=&quot;number&quot;&gt;1000010&lt;/span&gt;],val[N],x,y,n,m,treesize,root[N];&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;function&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;title&quot;&gt;Update&lt;/span&gt;&lt;span class=&quot;params&quot;&gt;(&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; l,&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; r,&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; x,&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; &amp;amp;y,&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; val)&lt;/span&gt;&lt;/span&gt;&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	y = ++treesize;tree[y].sum = tree[x].sum+&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt; (l==r) &lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; mid = (l+r)&amp;gt;&amp;gt;&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	tree[y].ls = tree[x].ls;tree[y].rs = tree[x].rs;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt; (val&amp;lt;=mid) Update(l,mid,tree[x].ls,tree[y].ls,val);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;else&lt;/span&gt; Update(mid+&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;,r,tree[x].rs,tree[y].rs,val);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;function&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;title&quot;&gt;Query&lt;/span&gt;&lt;span class=&quot;params&quot;&gt;(&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; L,&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; R,&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; pos,&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; l,&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; r)&lt;/span&gt;&lt;/span&gt;&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt; (L==l &amp;amp;&amp;amp; R==r) &lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt; tree[pos].sum;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; mid = (L+R)&amp;gt;&amp;gt;&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt; (r&amp;lt;=mid) &lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt; Query(L,mid,tree[pos].ls,l,r);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt; (l&amp;gt;mid) &lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt; Query(mid+&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;,R,tree[pos].rs,l,r);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt; Query(L,mid,tree[pos].ls,l,mid)+Query(mid+&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;,R,tree[pos].rs,mid+&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;,r);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;function&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;title&quot;&gt;main&lt;/span&gt;&lt;span class=&quot;params&quot;&gt;()&lt;/span&gt;&lt;/span&gt;&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	n = read();&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;for&lt;/span&gt; (&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; i=&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;;i&amp;lt;=n;i++) val[i] = read();&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;for&lt;/span&gt; (&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; i=n;i;i--) &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;		&lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt; (head[val[i]]==&lt;span class=&quot;number&quot;&gt;0&lt;/span&gt;) next[i] = n+&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;		&lt;span class=&quot;keyword&quot;&gt;else&lt;/span&gt; next[i] = head[val[i]];&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;		head[val[i]] = i;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;for&lt;/span&gt; (&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; i=&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;;i&amp;lt;=n;i++) Update(&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;,n+&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;,root[i&lt;span class=&quot;number&quot;&gt;-1&lt;/span&gt;],root[i],next[i]);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	m = read();&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;for&lt;/span&gt; (&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; i=&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;;i&amp;lt;=m;i++) &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;		x = read();y = read();&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;		&lt;span class=&quot;built_in&quot;&gt;printf&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&quot;%d\n&quot;&lt;/span&gt;,Query(&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;,n+&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;,root[y],y+&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;,n+&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;)-Query(&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;,n+&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;,root[x&lt;span class=&quot;number&quot;&gt;-1&lt;/span&gt;],y+&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;,n+&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;));&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;p&gt;&lt;br&gt;&lt;br&gt;一道相似的题目&lt;a href=&quot;http://www.lydsy.com/JudgeOnline/problem.php?id=4026&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;BZOJ4026: dC Loves Number Theory&lt;/a&gt;&lt;br&gt;题面是求一段区间内数乘积的$\varphi$，考虑$\varphi$的值，设$n=p_1^{q_1}\cdot p_2^{q_2}\ldots p_k^{q_k}$,$\varphi(n)=n\cdot \Pi_{i=1}^{k} \frac {p_i-1}{p_i}$&lt;br&gt;我们发现只与不相同的素数有关，就转化成了求一段区间内的不相同素数的$\frac {p_i-1}{p_i}$的值的积了。因为是对1e6+777取模，所以数的范围很小，可以直接暴力分解质因数，然后类似上一题的用主席树维护。（注意因为这个是乘积，所以要初始化第一棵树）。&lt;/p&gt;
&lt;figure class=&quot;highlight python&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;11&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;12&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;13&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;14&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;15&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;16&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;17&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;18&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;19&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;20&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;21&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;22&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;23&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;24&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;25&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;26&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;27&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;28&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;29&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;30&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;31&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;32&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;33&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;34&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;35&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;36&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;37&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;38&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;39&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;40&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;41&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;42&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;43&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;44&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;45&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;46&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;47&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;48&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;49&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;50&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;51&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;52&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;53&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;54&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;55&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;56&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;57&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;58&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;59&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;60&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;61&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;62&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;63&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;64&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;65&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;66&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;67&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;68&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;69&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;70&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;71&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;72&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;73&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;#include &amp;lt;cstdio&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;#include &amp;lt;cstring&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;#include &amp;lt;algorithm&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;const int RXD = &lt;span class=&quot;number&quot;&gt;1e6&lt;/span&gt;+&lt;span class=&quot;number&quot;&gt;777&lt;/span&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;const int N = &lt;span class=&quot;number&quot;&gt;1000010&lt;/span&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;using namespace std;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;int inv[RXD+&lt;span class=&quot;number&quot;&gt;10&lt;/span&gt;],prime[RXD+&lt;span class=&quot;number&quot;&gt;10&lt;/span&gt;],vis[RXD+&lt;span class=&quot;number&quot;&gt;10&lt;/span&gt;],a[N],S[N],A[N],L[N],R[N],n,m,treesize,cnt,l,r,ans,last,tot,head[N],next[N],root[N];&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;int read()&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	int x = &lt;span class=&quot;number&quot;&gt;0&lt;/span&gt;,f = &lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;,c = getchar();&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;while&lt;/span&gt; (c&amp;lt;&lt;span class=&quot;string&quot;&gt;&#39;0&#39;&lt;/span&gt; || c&amp;gt;&lt;span class=&quot;string&quot;&gt;&#39;9&#39;&lt;/span&gt;) &amp;#123;&lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt; (c==&lt;span class=&quot;string&quot;&gt;&#39;-&#39;&lt;/span&gt;) f = &lt;span class=&quot;number&quot;&gt;-1&lt;/span&gt;;c = getchar();&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;while&lt;/span&gt; (c&amp;gt;=&lt;span class=&quot;string&quot;&gt;&#39;0&#39;&lt;/span&gt; &amp;amp;&amp;amp; c&amp;lt;=&lt;span class=&quot;string&quot;&gt;&#39;9&#39;&lt;/span&gt;) x = x*&lt;span class=&quot;number&quot;&gt;10&lt;/span&gt;+c-&lt;span class=&quot;string&quot;&gt;&#39;0&#39;&lt;/span&gt;,c = getchar();&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt; x*f;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;struct Tree&amp;#123;int ls,rs,val;&amp;#125; tree[&lt;span class=&quot;number&quot;&gt;5000010&lt;/span&gt;];&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;void Prep()&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	inv[&lt;span class=&quot;number&quot;&gt;0&lt;/span&gt;] = inv[&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;] = &lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;for&lt;/span&gt; (int i=&lt;span class=&quot;number&quot;&gt;2&lt;/span&gt;;i&amp;lt;=RXD;i++) inv[i] = ((&lt;span class=&quot;number&quot;&gt;1l&lt;/span&gt;l*RXD-RXD/i)*inv[RXD%i]+RXD)%RXD;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;for&lt;/span&gt; (int i=&lt;span class=&quot;number&quot;&gt;2&lt;/span&gt;;i&amp;lt;=RXD;i++)&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;		&lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt; (!vis[i]) prime[++tot] = i;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;		&lt;span class=&quot;keyword&quot;&gt;for&lt;/span&gt; (int j=&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;;j&amp;lt;=tot &amp;amp;&amp;amp; prime[j]*i&amp;lt;=RXD;j++) &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;			vis[prime[j]*i] = &lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;			&lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt; (i%prime[j]==&lt;span class=&quot;number&quot;&gt;0&lt;/span&gt;) &lt;span class=&quot;keyword&quot;&gt;break&lt;/span&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;		&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;void Build(int pos,int l,int r)&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	tree[pos].val = &lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;;&lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt; (l==r) &lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt;; int mid = (l+r)&amp;gt;&amp;gt;&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	tree[pos].ls = ++treesize;tree[pos].rs = ++treesize;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	Build(tree[pos].ls,l,mid);Build(tree[pos].rs,mid+&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;,r);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;void Update(int l,int r,int x,int &amp;amp;y,int val,int w)&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	y = ++treesize;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	tree[y].val = &lt;span class=&quot;number&quot;&gt;1l&lt;/span&gt;l*tree[x].val*(w&lt;span class=&quot;number&quot;&gt;-1&lt;/span&gt;)%RXD*inv[w]%RXD;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt; (l==r) &lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	int mid = (l+r)&amp;gt;&amp;gt;&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;; &lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	tree[y].ls = tree[x].ls;tree[y].rs = tree[x].rs;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt; (val&amp;lt;=mid) Update(l,mid,tree[x].ls,tree[y].ls,val,w);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;else&lt;/span&gt; Update(mid+&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;,r,tree[x].rs,tree[y].rs,val,w);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;int Query(int L,int R,int pos,int l,int r)&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt; (L==l &amp;amp;&amp;amp; R==r) &lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt; tree[pos].val;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	int mid = (L+R)&amp;gt;&amp;gt;&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt; (r&amp;lt;=mid) &lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt; Query(L,mid,tree[pos].ls,l,r);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt; (l&amp;gt;mid) &lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt; Query(mid+&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;,R,tree[pos].rs,l,r);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;number&quot;&gt;1l&lt;/span&gt;l*Query(L,mid,tree[pos].ls,l,mid)*Query(mid+&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;,R,tree[pos].rs,mid+&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;,r)%RXD;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;int main()&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	n = read();m = read();Prep();S[&lt;span class=&quot;number&quot;&gt;0&lt;/span&gt;] = &lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;for&lt;/span&gt; (int i=&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;;i&amp;lt;=n;i++) A[i] = read(),S[i] = (&lt;span class=&quot;number&quot;&gt;1l&lt;/span&gt;l*S[i&lt;span class=&quot;number&quot;&gt;-1&lt;/span&gt;]*A[i])%RXD;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;for&lt;/span&gt; (int i=&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;;i&amp;lt;=n;i++) &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;		L[i] = cnt+&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;;int x = A[i];&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;		&lt;span class=&quot;keyword&quot;&gt;for&lt;/span&gt; (int j=&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;;j&amp;lt;=tot &amp;amp;&amp;amp; prime[j]*prime[j]&amp;lt;=x;j++)&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;			&lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt; (x%prime[j]==&lt;span class=&quot;number&quot;&gt;0&lt;/span&gt;) &amp;#123;a[++cnt] = prime[j];&lt;span class=&quot;keyword&quot;&gt;while&lt;/span&gt; (x%prime[j]==&lt;span class=&quot;number&quot;&gt;0&lt;/span&gt;) x/=prime[j];&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;		&lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt; (x!=&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;) a[++cnt] = x;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;		R[i] = cnt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	n = cnt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;for&lt;/span&gt; (int i=n;i;i--) &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;		&lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt; (head[a[i]]==&lt;span class=&quot;number&quot;&gt;0&lt;/span&gt;) next[i] = n+&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;		&lt;span class=&quot;keyword&quot;&gt;else&lt;/span&gt; next[i] = head[a[i]];&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;		head[a[i]] = i;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	treesize = &lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;;root[&lt;span class=&quot;number&quot;&gt;0&lt;/span&gt;] = &lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	Build(&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;,&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;,n+&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;for&lt;/span&gt; (int i=&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;;i&amp;lt;=n;i++) Update(&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;,n+&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;,root[i&lt;span class=&quot;number&quot;&gt;-1&lt;/span&gt;],root[i],next[i],a[i]);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;for&lt;/span&gt; (int i=&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;;i&amp;lt;=m;i++)&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;		int l = read()^last,r = read()^last;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;		ans = &lt;span class=&quot;number&quot;&gt;1l&lt;/span&gt;l*S[r]*inv[S[l&lt;span class=&quot;number&quot;&gt;-1&lt;/span&gt;]]%RXD;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;		l = L[l];r = R[r];&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;		last=(&lt;span class=&quot;number&quot;&gt;1l&lt;/span&gt;l*ans*Query(&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;,n+&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;,root[r],r+&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;,n+&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;)%RXD*inv[Query(&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;,n+&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;,root[l&lt;span class=&quot;number&quot;&gt;-1&lt;/span&gt;],r+&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;,n+&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;)]%RXD);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;		printf(&lt;span class=&quot;string&quot;&gt;&quot;%d\n&quot;&lt;/span&gt;,last);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;hr&gt;
&lt;h3 id=&quot;高潮：在线求带修改区间颜色种数&quot;&gt;&lt;a href=&quot;#高潮：在线求带修改区间颜色种数&quot; class=&quot;headerlink&quot; title=&quot;高潮：在线求带修改区间颜色种数&quot;&gt;&lt;/a&gt;高潮：在线求带修改区间颜色种数&lt;/h3&gt;&lt;p&gt;例题：&lt;a href=&quot;http://www.lydsy.com/JudgeOnline/problem.php?id=2120&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;2120: 数颜色&lt;/a&gt;&lt;br&gt;推广到带修改的问题上的方法和一般的主席树一样，主要使用主席树前缀相减的思想，用树状数组套权值线段树。每次询问的时候就在树状数组节点的线段树上询问，然后合并答案。修改需要修改所有包含该节点的线段树。因为这道题权值位置是在next的位置上，所以还需要记录前驱后继，可以直接用一个set维护信息。&lt;/p&gt;
&lt;figure class=&quot;highlight c++&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;11&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;12&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;13&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;14&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;15&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;16&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;17&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;18&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;19&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;20&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;21&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;22&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;23&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;24&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;25&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;26&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;27&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;28&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;29&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;30&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;31&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;32&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;33&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;34&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;35&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;36&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;37&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;38&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;39&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;40&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;41&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;42&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;43&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;44&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;45&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;46&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;47&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;48&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;49&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;50&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;51&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;52&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;53&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;54&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;55&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;56&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;57&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;58&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;59&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;60&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;61&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;62&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;63&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;64&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;65&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;66&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;67&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;68&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;69&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;70&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;71&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;72&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;73&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;74&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;75&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;76&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;77&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;78&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;79&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;80&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;81&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;82&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;83&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;84&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;85&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;86&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;87&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;88&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;89&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;90&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;91&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;92&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;93&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;94&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;95&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;96&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;97&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;98&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;99&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;100&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;101&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;102&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;103&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;104&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;105&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;106&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;107&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;108&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;109&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;110&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;111&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;112&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;113&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;114&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;115&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;116&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;117&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;118&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;119&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;120&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;meta&quot;&gt;#&lt;span class=&quot;meta-keyword&quot;&gt;include&lt;/span&gt; &lt;span class=&quot;meta-string&quot;&gt;&amp;lt;cstdio&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;meta&quot;&gt;#&lt;span class=&quot;meta-keyword&quot;&gt;include&lt;/span&gt; &lt;span class=&quot;meta-string&quot;&gt;&amp;lt;cstring&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;meta&quot;&gt;#&lt;span class=&quot;meta-keyword&quot;&gt;include&lt;/span&gt; &lt;span class=&quot;meta-string&quot;&gt;&amp;lt;iostream&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;meta&quot;&gt;#&lt;span class=&quot;meta-keyword&quot;&gt;include&lt;/span&gt; &lt;span class=&quot;meta-string&quot;&gt;&amp;lt;set&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;meta&quot;&gt;#&lt;span class=&quot;meta-keyword&quot;&gt;include&lt;/span&gt; &lt;span class=&quot;meta-string&quot;&gt;&amp;lt;algorithm&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;using&lt;/span&gt; &lt;span class=&quot;keyword&quot;&gt;namespace&lt;/span&gt; &lt;span class=&quot;built_in&quot;&gt;std&lt;/span&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;meta&quot;&gt;#&lt;span class=&quot;meta-keyword&quot;&gt;define&lt;/span&gt; N 20010&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;meta&quot;&gt;#&lt;span class=&quot;meta-keyword&quot;&gt;define&lt;/span&gt; M 800010&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;built_in&quot;&gt;set&lt;/span&gt; &amp;lt;&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt;&amp;gt; col[N];&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;built_in&quot;&gt;set&lt;/span&gt; &amp;lt;&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt;&amp;gt; :: iterator it;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;struct&lt;/span&gt; xy&amp;#123;&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; x,y;&lt;span class=&quot;keyword&quot;&gt;char&lt;/span&gt; ctrl[&lt;span class=&quot;number&quot;&gt;3&lt;/span&gt;];&amp;#125;q[N];&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; a[N],san[N],next[N],v[N],pre[N],c[N],L[N],R[N],root[N];&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; ls[M],rs[M],sum[M];&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; n,m,ne,cnt,tot,numa,numb;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;char&lt;/span&gt; ch;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;function&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;title&quot;&gt;read&lt;/span&gt;&lt;span class=&quot;params&quot;&gt;(&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; &amp;amp;x)&lt;/span&gt;&lt;/span&gt;&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;   &lt;span class=&quot;keyword&quot;&gt;while&lt;/span&gt; (ch = getchar(),ch &amp;lt; &lt;span class=&quot;string&quot;&gt;&#39;0&#39;&lt;/span&gt; || ch &amp;gt; &lt;span class=&quot;string&quot;&gt;&#39;9&#39;&lt;/span&gt;);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;   x = ch - &lt;span class=&quot;string&quot;&gt;&#39;0&#39;&lt;/span&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;   &lt;span class=&quot;keyword&quot;&gt;while&lt;/span&gt; (ch = getchar(),ch &amp;gt;= &lt;span class=&quot;string&quot;&gt;&#39;0&#39;&lt;/span&gt; &amp;amp;&amp;amp; ch &amp;lt;= &lt;span class=&quot;string&quot;&gt;&#39;9&#39;&lt;/span&gt;) x = x * &lt;span class=&quot;number&quot;&gt;10&lt;/span&gt; + ch - &lt;span class=&quot;string&quot;&gt;&#39;0&#39;&lt;/span&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;function&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;inline&lt;/span&gt; &lt;span class=&quot;keyword&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;title&quot;&gt;update&lt;/span&gt;&lt;span class=&quot;params&quot;&gt;(&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; lson,&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; rson,&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; x,&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; k)&lt;/span&gt;&lt;/span&gt;&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;   sum[++ tot] = sum[x] + k,ls[tot] = lson,rs[tot] = rson;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;function&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;inline&lt;/span&gt; &lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;title&quot;&gt;change&lt;/span&gt;&lt;span class=&quot;params&quot;&gt;(&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; x,&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; l,&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; r,&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; y,&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; k)&lt;/span&gt;&lt;/span&gt;&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;   &lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt; (l == r) &amp;#123;update(&lt;span class=&quot;number&quot;&gt;0&lt;/span&gt;,&lt;span class=&quot;number&quot;&gt;0&lt;/span&gt;,x,k);&lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt; tot;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;   &lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; m = l + r &amp;gt;&amp;gt; &lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;   &lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt; (y &amp;lt;= m) ne = change(ls[x],l,m,y,k),update(ne,rs[x],x,k);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;   &lt;span class=&quot;keyword&quot;&gt;else&lt;/span&gt; ne = change(rs[x],m + &lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;,r,y,k),update(ls[x],ne,x,k);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;   &lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt; tot;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;function&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;inline&lt;/span&gt; &lt;span class=&quot;keyword&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;title&quot;&gt;bitup&lt;/span&gt;&lt;span class=&quot;params&quot;&gt;(&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; x,&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; p,&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; k)&lt;/span&gt;&lt;/span&gt;&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;   &lt;span class=&quot;keyword&quot;&gt;for&lt;/span&gt; (;x &amp;lt;= n;x += x &amp;amp; -x)&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;       c[x] = change(c[x],&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;,n + &lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;,p,k);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;function&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;title&quot;&gt;ask&lt;/span&gt;&lt;span class=&quot;params&quot;&gt;(&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; *a,&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; numa,&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; *b,&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; numb,&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; k)&lt;/span&gt;&lt;/span&gt;&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;   &lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; ans = &lt;span class=&quot;number&quot;&gt;0&lt;/span&gt;,l = &lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;,r = n + &lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;,m;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;   &lt;span class=&quot;keyword&quot;&gt;while&lt;/span&gt; (l &amp;lt; r)&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;       m = l + r &amp;gt;&amp;gt; &lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;       &lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt; (k &amp;gt;= m) &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;           &lt;span class=&quot;keyword&quot;&gt;for&lt;/span&gt; (&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; i = &lt;span class=&quot;number&quot;&gt;0&lt;/span&gt;;i &amp;lt; numa;i ++) a[i] = rs[a[i]];&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;           &lt;span class=&quot;keyword&quot;&gt;for&lt;/span&gt; (&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; i = &lt;span class=&quot;number&quot;&gt;0&lt;/span&gt;;i &amp;lt; numb;i ++) b[i] = rs[b[i]];&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;           l = m + &lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;       &amp;#125;&lt;span class=&quot;keyword&quot;&gt;else&lt;/span&gt;&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;           &lt;span class=&quot;keyword&quot;&gt;for&lt;/span&gt; (&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; i = &lt;span class=&quot;number&quot;&gt;0&lt;/span&gt;;i &amp;lt; numa;i ++) ans -= sum[rs[a[i]]];&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;           &lt;span class=&quot;keyword&quot;&gt;for&lt;/span&gt; (&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; i = &lt;span class=&quot;number&quot;&gt;0&lt;/span&gt;;i &amp;lt; numb;i ++) ans += sum[rs[b[i]]];&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;           &lt;span class=&quot;keyword&quot;&gt;for&lt;/span&gt; (&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; i = &lt;span class=&quot;number&quot;&gt;0&lt;/span&gt;;i &amp;lt; numa;i ++) a[i] = ls[a[i]];&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;           &lt;span class=&quot;keyword&quot;&gt;for&lt;/span&gt; (&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; i = &lt;span class=&quot;number&quot;&gt;0&lt;/span&gt;;i &amp;lt; numb;i ++) b[i] = ls[b[i]];&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;           r = m;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;       &amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;   &amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;   &lt;span class=&quot;keyword&quot;&gt;for&lt;/span&gt; (&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; i = &lt;span class=&quot;number&quot;&gt;0&lt;/span&gt;;i &amp;lt; numa;i ++) ans -= sum[a[i]];&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;   &lt;span class=&quot;keyword&quot;&gt;for&lt;/span&gt; (&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; i = &lt;span class=&quot;number&quot;&gt;0&lt;/span&gt;;i &amp;lt; numb;i ++) ans += sum[b[i]];&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;   &lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt; ans;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;function&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;title&quot;&gt;query&lt;/span&gt;&lt;span class=&quot;params&quot;&gt;(&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; x,&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; y)&lt;/span&gt;&lt;/span&gt;&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;   numa = numb = &lt;span class=&quot;number&quot;&gt;0&lt;/span&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;   &lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; k = y;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;   L[numa ++] = root[x];&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;   &lt;span class=&quot;keyword&quot;&gt;for&lt;/span&gt; (;x;x -= x &amp;amp; -x) L[numa ++] = c[x];&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;   R[numb ++] = root[y];&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;   &lt;span class=&quot;keyword&quot;&gt;for&lt;/span&gt; (;y;y -= y &amp;amp; -y) R[numb ++] = c[y];&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;   &lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt; ask(L,numa,R,numb,k);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;function&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;title&quot;&gt;main&lt;/span&gt;&lt;span class=&quot;params&quot;&gt;()&lt;/span&gt;&lt;/span&gt;&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;   read(n);read(m);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;   &lt;span class=&quot;keyword&quot;&gt;for&lt;/span&gt; (&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; i = &lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;;i &amp;lt;= n;i ++) read(a[i]),san[++ cnt] = a[i];&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;   &lt;span class=&quot;keyword&quot;&gt;for&lt;/span&gt; (&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; i = &lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;;i &amp;lt;= m;i ++)&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;       &lt;span class=&quot;built_in&quot;&gt;scanf&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&quot;%s&quot;&lt;/span&gt;,q[i].ctrl);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;       read(q[i].x);read(q[i].y);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;       &lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt; (q[i].ctrl[&lt;span class=&quot;number&quot;&gt;0&lt;/span&gt;] == &lt;span class=&quot;string&quot;&gt;&#39;R&#39;&lt;/span&gt;) san[++ cnt] = q[i].y;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;   &amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;   sort(san + &lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;,san + &lt;span class=&quot;number&quot;&gt;1&lt;/span&gt; + cnt);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;   cnt = unique(san + &lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;,san + &lt;span class=&quot;number&quot;&gt;1&lt;/span&gt; + cnt) - san - &lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;   &lt;span class=&quot;keyword&quot;&gt;for&lt;/span&gt; (&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; i = &lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;;i &amp;lt;= n;i ++) a[i] = lower_bound(san + &lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;,san + &lt;span class=&quot;number&quot;&gt;1&lt;/span&gt; + cnt,a[i]) - san;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;   &lt;span class=&quot;keyword&quot;&gt;for&lt;/span&gt; (&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; i = &lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;;i &amp;lt;= n;i ++)&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;       next[i] = n + &lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;       &lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt; (!v[a[i]])&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;           v[a[i]] = i;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;       &lt;span class=&quot;keyword&quot;&gt;else&lt;/span&gt; &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;           next[v[a[i]]] = i;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;           pre[i] = v[a[i]];&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;           v[a[i]] = i;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;       &amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;       col[a[i]].insert(i);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;   &amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;   &lt;span class=&quot;keyword&quot;&gt;for&lt;/span&gt; (&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; i = &lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;;i &amp;lt;= n;i ++) root[i] = change(root[i - &lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;],&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;,n + &lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;,next[i],&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;),c[i] = root[&lt;span class=&quot;number&quot;&gt;0&lt;/span&gt;];&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;   &lt;span class=&quot;keyword&quot;&gt;for&lt;/span&gt; (&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; i = &lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;;i &amp;lt;= m;i ++)&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;       &lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt; (q[i].ctrl[&lt;span class=&quot;number&quot;&gt;0&lt;/span&gt;] == &lt;span class=&quot;string&quot;&gt;&#39;Q&#39;&lt;/span&gt;)&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;           &lt;span class=&quot;built_in&quot;&gt;printf&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&quot;%d\n&quot;&lt;/span&gt;,query(q[i].x - &lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;,q[i].y));&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;       &lt;span class=&quot;keyword&quot;&gt;else&lt;/span&gt;&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;           &lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; pos = q[i].x,val = lower_bound(san + &lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;,san + &lt;span class=&quot;number&quot;&gt;1&lt;/span&gt; + cnt,q[i].y) - san;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;           &lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt; (pre[pos])&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;               bitup(pre[pos],pos,&lt;span class=&quot;number&quot;&gt;-1&lt;/span&gt;);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;               next[pre[pos]] = next[pos];&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;               bitup(pre[pos],next[pos],&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;           &amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;           &lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt; (next[pos] &amp;lt; n + &lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;)&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;               pre[next[pos]] = pre[pos];&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;           bitup(pos,next[pos],&lt;span class=&quot;number&quot;&gt;-1&lt;/span&gt;);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;           col[a[pos]].erase(pos);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;           &lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;           a[pos] = val;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;           it = col[val].upper_bound(pos);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;           &lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt; (*it &amp;gt; pos)&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;               next[pos] = *it;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;               pre[*it] = pos;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;           &amp;#125;&lt;span class=&quot;keyword&quot;&gt;else&lt;/span&gt; next[pos] = n + &lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;           bitup(pos,next[pos],&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;           &lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt; (it != col[val].begin())&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;               it --;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;               bitup(*it,next[*it],&lt;span class=&quot;number&quot;&gt;-1&lt;/span&gt;);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;               next[*it] = pos;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;               pre[pos] = *it;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;               bitup(*it,next[*it],&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;           &amp;#125;&lt;span class=&quot;keyword&quot;&gt;else&lt;/span&gt; pre[pos] = &lt;span class=&quot;number&quot;&gt;0&lt;/span&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;           col[val].insert(pos);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;       &amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;   &amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;   &lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;number&quot;&gt;0&lt;/span&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;hr&gt;
&lt;h3 id=&quot;尾声：回到3236&quot;&gt;&lt;a href=&quot;#尾声：回到3236&quot; class=&quot;headerlink&quot; title=&quot;尾声：回到3236.&quot;&gt;&lt;/a&gt;尾声：回到3236.&lt;/h3&gt;&lt;p&gt;搞完了以上一系列题目以后，然我们回到一切罪恶的源泉啊呸没有罪恶3236.可以发现这是一道不带修改的区间颜色种类询问。但是！！这里的颜色有限制！！！所以。还需要一个数据结构维护，复杂度还是两只log的_(:з」∠)_。我们可以得出结论，比利的口胡能力。太强了。&lt;br&gt;至于这道题目是写根号还是$log^2$呢。&lt;/p&gt;
&lt;h5 id=&quot;我强力推荐莫队套分块！！&quot;&gt;&lt;a href=&quot;#我强力推荐莫队套分块！！&quot; class=&quot;headerlink&quot; title=&quot;我强力推荐莫队套分块！！&quot;&gt;&lt;/a&gt;&lt;strong&gt;我强力推荐莫队套分块！！&lt;/strong&gt;&lt;/h5&gt;&lt;h5 id=&quot;莫队暴力出奇迹&quot;&gt;&lt;a href=&quot;#莫队暴力出奇迹&quot; class=&quot;headerlink&quot; title=&quot;莫队暴力出奇迹&quot;&gt;&lt;/a&gt;莫队暴力出奇迹&lt;/h5&gt;&lt;figure class=&quot;highlight c++&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;11&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;12&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;13&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;14&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;15&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;16&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;17&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;18&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;19&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;20&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;21&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;22&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;23&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;24&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;25&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;26&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;27&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;28&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;29&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;30&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;31&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;32&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;33&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;34&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;35&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;36&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;37&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;38&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;39&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;40&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;41&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;42&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;43&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;44&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;45&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;46&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;47&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;48&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;49&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;50&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;51&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;52&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;53&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;54&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;55&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;56&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;57&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;58&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;59&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;60&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;61&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;62&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;63&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;64&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;65&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;66&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;67&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;68&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;69&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;70&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;71&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;72&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;73&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;74&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;75&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;76&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;77&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;78&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;79&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;80&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;meta&quot;&gt;#&lt;span class=&quot;meta-keyword&quot;&gt;include&lt;/span&gt; &lt;span class=&quot;meta-string&quot;&gt;&amp;lt;cmath&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;meta&quot;&gt;#&lt;span class=&quot;meta-keyword&quot;&gt;include&lt;/span&gt; &lt;span class=&quot;meta-string&quot;&gt;&amp;lt;cstdio&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;meta&quot;&gt;#&lt;span class=&quot;meta-keyword&quot;&gt;include&lt;/span&gt; &lt;span class=&quot;meta-string&quot;&gt;&amp;lt;cstring&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;meta&quot;&gt;#&lt;span class=&quot;meta-keyword&quot;&gt;include&lt;/span&gt; &lt;span class=&quot;meta-string&quot;&gt;&amp;lt;algorithm&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;using&lt;/span&gt; &lt;span class=&quot;keyword&quot;&gt;namespace&lt;/span&gt; &lt;span class=&quot;built_in&quot;&gt;std&lt;/span&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; M = &lt;span class=&quot;number&quot;&gt;1000010&lt;/span&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; N = &lt;span class=&quot;number&quot;&gt;100010&lt;/span&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;struct&lt;/span&gt; data&amp;#123;&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; l,r,a,b,id;&amp;#125; q[M];&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; vis[N],s2[N],pos[N],l[N],r[N],n,m,blk,a[N],ans1[M],s1[N],ans2[M];&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;function&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;title&quot;&gt;read&lt;/span&gt;&lt;span class=&quot;params&quot;&gt;()&lt;/span&gt;&lt;/span&gt;&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; x = &lt;span class=&quot;number&quot;&gt;0&lt;/span&gt;,f = &lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;,c = getchar();&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;keyword&quot;&gt;while&lt;/span&gt; (c&amp;lt;&lt;span class=&quot;string&quot;&gt;&#39;0&#39;&lt;/span&gt; || c&amp;gt;&lt;span class=&quot;string&quot;&gt;&#39;9&#39;&lt;/span&gt;) &amp;#123;&lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt; (c==&lt;span class=&quot;string&quot;&gt;&#39;-&#39;&lt;/span&gt;) f = &lt;span class=&quot;number&quot;&gt;-1&lt;/span&gt;;c = getchar();&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;keyword&quot;&gt;while&lt;/span&gt; (c&amp;gt;=&lt;span class=&quot;string&quot;&gt;&#39;0&#39;&lt;/span&gt; &amp;amp;&amp;amp; c&amp;lt;=&lt;span class=&quot;string&quot;&gt;&#39;9&#39;&lt;/span&gt;) x = x*&lt;span class=&quot;number&quot;&gt;10&lt;/span&gt;+c-&lt;span class=&quot;string&quot;&gt;&#39;0&#39;&lt;/span&gt;,c = getchar();&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt; x*f;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;function&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;bool&lt;/span&gt; &lt;span class=&quot;title&quot;&gt;cmp&lt;/span&gt;&lt;span class=&quot;params&quot;&gt;(data a,data b)&lt;/span&gt;&lt;/span&gt;&amp;#123;&lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt; (pos[a.l]==pos[b.l]) &lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt; a.r&amp;lt;b.r;&lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt; a.l&amp;lt;b.l;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;function&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;title&quot;&gt;init&lt;/span&gt;&lt;span class=&quot;params&quot;&gt;()&lt;/span&gt;&lt;/span&gt;&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    n = read();m = read();blk = &lt;span class=&quot;built_in&quot;&gt;sqrt&lt;/span&gt;(n/&lt;span class=&quot;number&quot;&gt;2&lt;/span&gt;);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;keyword&quot;&gt;for&lt;/span&gt; (&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; i=&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;;i&amp;lt;=n;i++)&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        a[i] = read();&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        pos[i] = (i&lt;span class=&quot;number&quot;&gt;-1&lt;/span&gt;)/blk+&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        r[pos[i]] = i;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        &lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt; (!l[pos[i]]) l[pos[i]] = i;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;keyword&quot;&gt;for&lt;/span&gt; (&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; i=&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;;i&amp;lt;=m;i++)&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        q[i].l = read();q[i].r = read();&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        q[i].a = read();q[i].b = read();&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        q[i].id = i;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    sort(q+&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;,q+&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;+m,cmp);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;function&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;title&quot;&gt;Query1&lt;/span&gt;&lt;span class=&quot;params&quot;&gt;(&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; x,&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; y)&lt;/span&gt;&lt;/span&gt;&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; res = &lt;span class=&quot;number&quot;&gt;0&lt;/span&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt; (pos[x]==pos[y])&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        &lt;span class=&quot;keyword&quot;&gt;for&lt;/span&gt; (&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; i=x;i&amp;lt;=y;i++) &lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt; (vis[i]) res+=vis[i];&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        &lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt; res;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;keyword&quot;&gt;else&lt;/span&gt; &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        &lt;span class=&quot;keyword&quot;&gt;for&lt;/span&gt; (&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; i=pos[x]+&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;;i&amp;lt;pos[y];i++) res+=s1[i];&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        &lt;span class=&quot;keyword&quot;&gt;for&lt;/span&gt; (&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; i=x;i&amp;lt;=r[pos[x]];i++) &lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt; (vis[i]) res+=vis[i];&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        &lt;span class=&quot;keyword&quot;&gt;for&lt;/span&gt; (&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; i=l[pos[y]];i&amp;lt;=y;i++) &lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt; (vis[i]) res+=vis[i];&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        &lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt; res;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;function&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;title&quot;&gt;Query2&lt;/span&gt;&lt;span class=&quot;params&quot;&gt;(&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; x,&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; y)&lt;/span&gt;&lt;/span&gt;&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; res = &lt;span class=&quot;number&quot;&gt;0&lt;/span&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt; (pos[x]==pos[y])&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        &lt;span class=&quot;keyword&quot;&gt;for&lt;/span&gt; (&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; i=x;i&amp;lt;=y;i++) &lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt; (vis[i]) res++;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        &lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt; res;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;keyword&quot;&gt;else&lt;/span&gt; &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        &lt;span class=&quot;keyword&quot;&gt;for&lt;/span&gt; (&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; i=pos[x]+&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;;i&amp;lt;pos[y];i++) res+=s2[i];&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        &lt;span class=&quot;keyword&quot;&gt;for&lt;/span&gt; (&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; i=x;i&amp;lt;=r[pos[x]];i++) &lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt; (vis[i]) res++;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        &lt;span class=&quot;keyword&quot;&gt;for&lt;/span&gt; (&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; i=l[pos[y]];i&amp;lt;=y;i++) &lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt; (vis[i]) res++;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        &lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt; res;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;function&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;title&quot;&gt;Add&lt;/span&gt;&lt;span class=&quot;params&quot;&gt;(&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; x)&lt;/span&gt;&lt;/span&gt;&amp;#123;&lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt; (!vis[x]) s2[pos[x]]++;vis[x]++;s1[pos[x]]++;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;function&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;title&quot;&gt;Del&lt;/span&gt;&lt;span class=&quot;params&quot;&gt;(&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; x)&lt;/span&gt;&lt;/span&gt;&amp;#123;&lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt; (vis[x]==&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;) s2[pos[x]]--;vis[x]--;s1[pos[x]]--;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;function&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;title&quot;&gt;solve&lt;/span&gt;&lt;span class=&quot;params&quot;&gt;()&lt;/span&gt;&lt;/span&gt;&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; l = &lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;,r = &lt;span class=&quot;number&quot;&gt;0&lt;/span&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;keyword&quot;&gt;for&lt;/span&gt; (&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; i=&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;;i&amp;lt;=m;i++)&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        &lt;span class=&quot;keyword&quot;&gt;while&lt;/span&gt; (r&amp;lt;q[i].r) r++,Add(a[r]);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        &lt;span class=&quot;keyword&quot;&gt;while&lt;/span&gt; (r&amp;gt;q[i].r) Del(a[r]),r--;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        &lt;span class=&quot;keyword&quot;&gt;while&lt;/span&gt; (l&amp;lt;q[i].l) Del(a[l]),l++;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        &lt;span class=&quot;keyword&quot;&gt;while&lt;/span&gt; (l&amp;gt;q[i].l) l--,Add(a[l]);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        ans1[q[i].id] = Query1(q[i].a,q[i].b);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        ans2[q[i].id] = Query2(q[i].a,q[i].b);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;function&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;title&quot;&gt;write&lt;/span&gt;&lt;span class=&quot;params&quot;&gt;(&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; x)&lt;/span&gt;&lt;/span&gt;&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt; (x&amp;lt;&lt;span class=&quot;number&quot;&gt;0&lt;/span&gt;) &lt;span class=&quot;built_in&quot;&gt;putchar&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&#39;-&#39;&lt;/span&gt;),write(-x);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt; (x&amp;gt;=&lt;span class=&quot;number&quot;&gt;10&lt;/span&gt;) write(x/&lt;span class=&quot;number&quot;&gt;10&lt;/span&gt;);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;built_in&quot;&gt;putchar&lt;/span&gt;(x%&lt;span class=&quot;number&quot;&gt;10&lt;/span&gt;+&lt;span class=&quot;string&quot;&gt;&#39;0&#39;&lt;/span&gt;);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;function&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;title&quot;&gt;main&lt;/span&gt;&lt;span class=&quot;params&quot;&gt;()&lt;/span&gt;&lt;/span&gt;&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    init();&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    solve();&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;keyword&quot;&gt;for&lt;/span&gt; (&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; i=&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;;i&amp;lt;=m;i++) write(ans1[i]),&lt;span class=&quot;built_in&quot;&gt;printf&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&quot; &quot;&lt;/span&gt;),write(ans2[i]),&lt;span class=&quot;built_in&quot;&gt;puts&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&quot;&quot;&lt;/span&gt;);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;hr&gt;
&lt;h3 id=&quot;后记：通过了这一系列题目的研究我们知道了口胡的危害&quot;&gt;&lt;a href=&quot;#后记：通过了这一系列题目的研究我们知道了口胡的危害&quot; class=&quot;headerlink&quot; title=&quot;后记：通过了这一系列题目的研究我们知道了口胡的危害&quot;&gt;&lt;/a&gt;后记：通过了这一系列题目的研究我们知道了口胡的危害&lt;/h3&gt;&lt;hr&gt;
&lt;p&gt;有错误请指出$$\mathcal {FIN}$$&lt;/p&gt;
</content>
    
    <summary type="html">
    
      &lt;p&gt;这是一个因为插比利而发生的惨案，进而引出了一堆坑。_(:з」∠)_&lt;br&gt;
    
    </summary>
    
      <category term="笔记" scheme="http://yoursite.com/categories/%E7%AC%94%E8%AE%B0/"/>
    
    
      <category term="笔记" scheme="http://yoursite.com/tags/%E7%AC%94%E8%AE%B0/"/>
    
      <category term="主席树" scheme="http://yoursite.com/tags/%E4%B8%BB%E5%B8%AD%E6%A0%91/"/>
    
      <category term="坑" scheme="http://yoursite.com/tags/%E5%9D%91/"/>
    
      <category term="题解" scheme="http://yoursite.com/tags/%E9%A2%98%E8%A7%A3/"/>
    
  </entry>
  
  <entry>
    <title>省选与之前数论函数讲课的搬运和整合</title>
    <link href="http://yoursite.com/2016/03/25/%E7%9C%81%E9%80%89%E6%95%B0%E8%AE%BA%E8%AE%B2%E8%AF%BE%E7%9A%84%E6%90%AC%E8%BF%90/"/>
    <id>http://yoursite.com/2016/03/25/省选数论讲课的搬运/</id>
    <published>2016-03-25T11:51:36.000Z</published>
    <updated>2016-04-22T06:03:20.692Z</updated>
    
    <content type="html">&lt;p&gt;感觉这次省选讲课里好像只有洲爷的课正常，于是就来写一写&lt;br&gt;&lt;a id=&quot;more&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;embed src=&quot;http://music.163.com/style/swf/widget.swf?sid=28912021&amp;type=2&amp;auto=0&amp;width=320&amp;height=66&quot; width=&quot;340&quot; height=&quot;86&quot; allownetworking=&quot;all&quot;&gt;好像找不到歌了。。&lt;em&gt;(:з」∠)&lt;/em&gt;换一种风格的发发&lt;br&gt;突然想起来好像给初三讲数论函数的是我。。&lt;em&gt;(:з」∠)&lt;/em&gt;，我自己都不会怎么讲。要出事了。&lt;br&gt;以下内容中涉及函数均为数论函数，即定义域为正整数的函数。&lt;br&gt;以下内容纯属搬运与口胡，若有错误，欢迎指出&lt;del&gt;(请当做没看见)&lt;/del&gt;。&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;/p&gt;&lt;h2 id=&quot;menu&quot;&gt;Menu:&lt;/h2&gt;&lt;p&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#jump_jixinghanshu&quot;&gt;积性函数&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#jump_juanji&quot;&gt;Dirichlet卷积&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#jump_mobiwusifanyan&quot;&gt;莫比乌斯反演&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#jump_jixinghanshuqianzhuihe&quot;&gt;一类积性函数求前缀和问题&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.eddy.com.cn/rc/zoe.html&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;And more…(这里没有链接，不要点!!)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;&lt;span id=&quot;jump_jixinghanshu&quot;&gt;　&lt;/span&gt;&lt;/p&gt;
&lt;h3 id=&quot;积性函数&quot;&gt;&lt;a href=&quot;#积性函数&quot; class=&quot;headerlink&quot; title=&quot;积性函数&quot;&gt;&lt;/a&gt;积性函数&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;积性函数：$\forall a,b \in N^+,\ gcd(a,b)=1,\ f(a\cdot b)=f(a)\cdot f(b)$&lt;/strong&gt;&lt;br&gt;一些常见的积性函数:&lt;br&gt;欧拉函数：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$\varphi(n)$表示$n$以内与$n$互质的数的个数。&lt;/li&gt;
&lt;li&gt;设$n=p_1^{q_1}\cdot p_2^{q_2}\ldots p_k^{q_k}$,$\varphi(n)=n\cdot \Pi_{i=1}^{k} \frac {p_i-1}{p_i}$&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;莫比乌斯函数：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;如果$n$有平方因子，则$\mu (n)=0$&lt;/li&gt;
&lt;li&gt;如果$n$没有平方因子，则设$n=p_1^{q_1}\cdot p_2^{q_2}\ldots p_k^{q_k}$，$\mu (n)=(-1)^k$&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;除数函数：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$\sigma _k(n)$表示$n$的所有正因子的$k$次幂的和。&lt;/li&gt;
&lt;li&gt;特别的&lt;ul&gt;
&lt;li&gt;$d(n)=\sigma _0(n)$表示$n$的正因子个数。&lt;/li&gt;
&lt;li&gt;$\sigma(n)=\sigma_1(n)$表示$n$的所有正因子之和。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;最大公因数函数：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$gcd(n,k)$在$k$为固定时，$n,k$的最大公因数。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;br&gt;&lt;br&gt;&lt;strong&gt;完全积性函数：$\forall a,b \in N^+\ ,f(a\cdot b)=f(a)\cdot f(b)$&lt;/strong&gt;&lt;br&gt;一些常见的完全积性函数：&lt;br&gt;幂函数：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$ld_k(n)=n^k$&lt;/li&gt;
&lt;li&gt;特别的&lt;ul&gt;
&lt;li&gt;$1(n)=ld_0(n)=1$&lt;/li&gt;
&lt;li&gt;$ld(n)=ld_1(n)=n$&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;单位函数：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$\rm e(n)=\epsilon (n)=\begin{cases}1 &amp;amp; n=1 \\0 &amp;amp; n&amp;gt;1\end{cases}$&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;br&gt;&lt;br&gt;&lt;strong&gt;积性函数的一些性质&lt;/strong&gt;&lt;br&gt;性质一：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;设$n=p_1^{q_1}\cdot p_2^{q_2}\ldots p_k^{q_k}$，$f(n)=\Sigma_{i=1}^{k} f(p_i^{q_i})$&lt;/li&gt;
&lt;li&gt;所以如果可以快速求出$f(p_k^{q_k})$的值，就可以用Euler筛法$O(n)$求出所有$f(i)(i\leq n)$的值。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;性质二：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;若$f，g$为积性函数，那么&lt;ul&gt;
&lt;li&gt;它们的点积$(f\cdot g)(i)=f(i)\cdot g(i)$也是积性函数&lt;/li&gt;
&lt;li&gt;它们的商$(\frac {f}{g})(i)=\frac {f(i)}{g(i)}$也是积性函数&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;br&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;#menu&quot;&gt;Back To Menu&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;span id=&quot;jump_juanji&quot;&gt; &lt;/span&gt;&lt;/p&gt;
&lt;h3 id=&quot;Dirichlet-卷积&quot;&gt;&lt;a href=&quot;#Dirichlet-卷积&quot; class=&quot;headerlink&quot; title=&quot;$Dirichlet$卷积&quot;&gt;&lt;/a&gt;$Dirichlet$卷积&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;定义：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;两个数论函数$f,g$的$Dirichlet$卷积为：$$(f*g)(n)=\sum_{d|n} f(d)\cdot g(\frac {n}{d})$$&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;br&gt;&lt;br&gt;&lt;strong&gt;性质：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;交换律：$f*g=g*f$&lt;/li&gt;
&lt;li&gt;结合律：$(f*g)*h=f*(g*h)$&lt;/li&gt;
&lt;li&gt;分配律：$f*(g+h)=f*g+f*h$&lt;/li&gt;
&lt;li&gt;单位元：$\epsilon*f=f$&lt;/li&gt;
&lt;li&gt;若$f,g$为积性函数，则$f*g$也为积性函数&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;br&gt;&lt;br&gt;&lt;strong&gt;一些常见的$Dirichlet$卷积：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$d(n)=\sum_{d|n} 1\Leftrightarrow d=1*1$&lt;/li&gt;
&lt;li&gt;$\sigma(n)=\sum_{d|n} d\Leftrightarrow \sigma=1*ld$&lt;/li&gt;
&lt;li&gt;$\epsilon(n)=\sum_{d|n}\mu(d)\Leftrightarrow \epsilon=1*\mu$&lt;/li&gt;
&lt;li&gt;$\varphi(n)=\sum_{d|n}\mu(d)\cdot \frac {n}{d} \Leftrightarrow \varphi=\mu*ld$&lt;/li&gt;
&lt;li&gt;$n=\sum_{d|n}\varphi(d)\Leftrightarrow ld=1*\varphi$&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;br&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;#menu&quot;&gt;Back To Menu&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;span id=&quot;jump_mobiwusifanyan&quot;&gt; &lt;/span&gt;&lt;/p&gt;
&lt;h3 id=&quot;莫比乌斯反演&quot;&gt;&lt;a href=&quot;#莫比乌斯反演&quot; class=&quot;headerlink&quot; title=&quot;莫比乌斯反演&quot;&gt;&lt;/a&gt;莫比乌斯反演&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;莫比乌斯反演公式：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;如果两个数论函数$f,g$满足$$f(n)=\sum_{d|n}g(d)$$&lt;/li&gt;
&lt;li&gt;则它们满足$$g(n)=\sum_{d|n}\mu(d)\cdot f(\frac{n}{d})$$&lt;/li&gt;
&lt;li&gt;反之亦然&lt;/li&gt;
&lt;li&gt;写成$Dirichlet$卷积形式为$f=g*1\Leftrightarrow g=\mu*f$&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;br&gt;&lt;br&gt;&lt;strong&gt;证明：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;设，$f=g*1$&lt;/li&gt;
&lt;li&gt;两边都卷上，$\mu$,得$\mu*f=\mu*g*1$&lt;/li&gt;
&lt;li&gt;整理得，$\mu*f=\epsilon*g=g$&lt;/li&gt;
&lt;li&gt;两边都卷上1，$g*1=\mu*f*1=\epsilon*f=f$&lt;/li&gt;
&lt;li&gt;证毕&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;br&gt;&lt;br&gt;&lt;strong&gt;莫比乌斯等式：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$${\rm e}(n)=\sum_{d|n}\mu(d)$$&lt;/li&gt;
&lt;li&gt;设$$n=\sum_{i=1}^{k} p_i^{q_i}，\ n’=\sum_{i=1}^{k}p_i，\ S=\lbrace 1,2,\ldots ,k\rbrace $$&lt;/li&gt;
&lt;li&gt;那么$$\sum_{d|n}\mu(d)=\sum_{d|n’}\mu(d)=\sum_{I\subseteq S}(-1)^I=\sum_{i=0}^{k}{k \choose i}(-1)^i=(1-1)^k$$&lt;/li&gt;
&lt;li&gt;证毕&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;br&gt;&lt;br&gt;&lt;strong&gt;简单的应用：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$$\varphi=\mu*ld\Leftrightarrow ld=\varphi*1$$&lt;/li&gt;
&lt;li&gt;$$\varphi(n)=\sum_{d|n}\mu(d)\cdot \frac{n}{d}\Leftrightarrow n=\sum_{d|n}\varphi(d)$$&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;br&gt;&lt;br&gt;&lt;strong&gt;另一种形式：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;在整数集$D$中，$$f(x)=\sum_{x|d,d\in D}g(d)\Leftrightarrow g(x)=\sum_{x|d,d\in D}\mu(d)f(\frac{d}{x})$$&lt;/li&gt;
&lt;li&gt;两种形式的本质都是容斥原理&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;br&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;#menu&quot;&gt;Back To Menu&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;span id=&quot;jump_jixinghanshuqianzhuihe&quot;&gt; &lt;/span&gt;&lt;/p&gt;
&lt;h3 id=&quot;一类积性函数求前缀和问题&quot;&gt;&lt;a href=&quot;#一类积性函数求前缀和问题&quot; class=&quot;headerlink&quot; title=&quot;一类积性函数求前缀和问题&quot;&gt;&lt;/a&gt;一类积性函数求前缀和问题&lt;/h3&gt;&lt;p&gt;4.22 这个坑不知道已经在这里多久了。。&lt;em&gt;(:з」∠)&lt;/em&gt; 。。终于要来填掉了。。&lt;/p&gt;
&lt;p&gt;我们知道一般的积性函数可以用欧拉筛$O(n)$求值，但是在一些题目里要求在低于线性的复杂度下求积性函数的前缀和。这个时候我们就需要一种更加高效的求前缀和的算法。&lt;/p&gt;
&lt;p&gt;现在OI圈里比较常见的方法是杜教筛，可以做到在$O(n^{\frac{3}{4}})$或$O(n^{\frac{2}{3}})$的时间内求出积性函数的前缀和。&lt;/p&gt;
&lt;p&gt;&lt;br&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;杜教筛：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;现在我们要求$S(n)=\sum_{i=1}^{n}f(i)$&lt;/li&gt;
&lt;li&gt;我们可以找出另一个函数g，然后考虑$(g*f)(n)$的前缀和&lt;br&gt;$$&lt;br&gt;\begin{align}&lt;br&gt;&amp;amp;\ \sum_{i=1}^{n}(f*g)(i) \\&lt;br&gt;= &amp;amp;\ \sum_{i=1}^{n}\sum_{j|i}f(j)g(\frac{i}{j}) \\&lt;br&gt;= &amp;amp;\ \sum_{\frac{i}{j}}^{n}\sum_{j=1}^{\left\lfloor\cfrac{n}{\frac{i}{j}}\right\rfloor}f(j)g(\frac{i}{j}) \\&lt;br&gt;= &amp;amp;\ \sum_{i=1}^{n}g(i)\sum_{j=1}^{\lfloor\frac{n}{i}\rfloor}f(j) \\&lt;br&gt;= &amp;amp;\ \sum_{i=1}^{n}g(i)S(\lfloor\frac{n}{i}\rfloor) \\&lt;br&gt;\end{align}$$&lt;/li&gt;
&lt;li&gt;然后我们就可以得到一个关于$S(n)$的递推式$$g(1)S(n)=\sum_{i=1}^{n}(f*g)(i)-\sum_{i=2}^{n}g(i)S(\lfloor\frac{n}{i}\rfloor)$$&lt;/li&gt;
&lt;li&gt;所以如果我们可以快速的求出$g$和$(f*g)$的前缀和，那就可以用记忆化搜索做到$O(n^{\frac{3}{4}})$的复杂度。如果原函数也可以快速求前缀和，那我们可以预处理$\sqrt{n}$以内的结果，这样就可以做到$O(n^{\frac{2}{3}})$的复杂度.&lt;/li&gt;
&lt;li&gt;现在我们已经可以很轻松的求出简单的积性函数如$\varphi\ \mu$的前缀和了&lt;/li&gt;
&lt;li&gt;但是对于一些比较复杂的函数，想要找一个合适的g是比较困难的。对于较复杂的函数一般有两个比较基本的形式&lt;ul&gt;
&lt;li&gt;求$S(n)=\sum_{i=1}^{n}(f*g)(i)$的值，$g(i)$为完全积性函数，这时有$$S(n)=\sum_{i=1}^{n}[(f*1)\cdot g](i)-\sum_{i=2}^{n}S(\lfloor\frac{n}{i}\rfloor)$$&lt;/li&gt;
&lt;li&gt;求$S(n)=\sum_{i=1}^{n}(f*g)(i)$的值，这时有$$S(n)=\sum_{i=1}^{n}g(i)\sum_{ij&amp;lt;=n}(f*1)(j)-\sum_{i=2}^{n}S(\lfloor\frac{n}{i}\rfloor)$$&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;有了这些性质我们就可以较容易地求出积性函数的前缀和了&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;br&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;#menu&quot;&gt;Back To Menu&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;有错误请指出$$\mathcal {FIN.}$$&lt;/p&gt;
</content>
    
    <summary type="html">
    
      &lt;p&gt;感觉这次省选讲课里好像只有洲爷的课正常，于是就来写一写&lt;br&gt;
    
    </summary>
    
      <category term="笔记" scheme="http://yoursite.com/categories/%E7%AC%94%E8%AE%B0/"/>
    
    
      <category term="笔记" scheme="http://yoursite.com/tags/%E7%AC%94%E8%AE%B0/"/>
    
      <category term="数论" scheme="http://yoursite.com/tags/%E6%95%B0%E8%AE%BA/"/>
    
      <category term="省选讲课" scheme="http://yoursite.com/tags/%E7%9C%81%E9%80%89%E8%AE%B2%E8%AF%BE/"/>
    
      <category term="搬运" scheme="http://yoursite.com/tags/%E6%90%AC%E8%BF%90/"/>
    
  </entry>
  
  <entry>
    <title>又到一年省选季</title>
    <link href="http://yoursite.com/2016/03/20/%E5%8F%88%E5%88%B0%E4%B8%80%E5%B9%B4%E7%9C%81%E9%80%89%E5%AD%A3/"/>
    <id>http://yoursite.com/2016/03/20/又到一年省选季/</id>
    <published>2016-03-20T12:03:27.000Z</published>
    <updated>2016-03-31T10:38:39.000Z</updated>
    
    <content type="html">&lt;p&gt;时间过得好快啊，马上我就要以高一选手的身份参加省选了&lt;br&gt;&lt;a id=&quot;more&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;embed src=&quot;http://music.163.com/style/swf/widget.swf?sid=30903066&amp;type=2&amp;auto=0&amp;width=320&amp;height=66&quot; width=&quot;340&quot; height=&quot;86&quot; allownetworking=&quot;all&quot;&gt;

&lt;hr&gt;
&lt;h2 id=&quot;Day-1&quot;&gt;&lt;a href=&quot;#Day-1&quot; class=&quot;headerlink&quot; title=&quot;Day -1&quot;&gt;&lt;/a&gt;Day -1&lt;/h2&gt;&lt;p&gt;下午回到学校，看到了一个已经退役的高二学长出现在了机房里。然后机房里的气氛就变得浪了起来&lt;del&gt;虽然我本来就很浪&lt;em&gt;(:з」∠)&lt;/em&gt;&lt;/del&gt;&lt;br&gt;听说他们已经凑好了省选时dota五人黑的队伍，想去围观然后意识到我的电脑上已经什么都没有了。。难道省选的时候我只能默默地刷唐顿了吗。。&lt;em&gt;(:з」∠)&lt;/em&gt;&lt;br&gt;占了一晚上网速下完了全集唐顿感觉爽爽哒。。幸好我回寝室之前打开来看了一下，妈的下载的又是生肉。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;Day-0&quot;&gt;&lt;a href=&quot;#Day-0&quot; class=&quot;headerlink&quot; title=&quot;Day 0&quot;&gt;&lt;/a&gt;Day 0&lt;/h2&gt;&lt;p&gt;上午浪啊浪啊。码完了第一道非旋转Treap，然后并不敢调，肉眼调试&lt;del&gt;（发呆）&lt;/del&gt;着，就到了中午了。&lt;br&gt;下午一点半就到学军了，感觉去年好像并没有这么快，是我的错觉吗。&lt;br&gt;这次的宾馆竟然在浙外学校里面！里面！！！走进学校的时候我还以为要住学生宿舍了，又要过上没电没网的生活了。。&lt;em&gt;(:з」∠)&lt;/em&gt;妈的吓死了&lt;br&gt;晚上还没浪起来就开始头痛了，莫名其妙的就痛了。上次冬令营的时候也一样。难道杭州也会水土不服吗&lt;em&gt;(:з」∠)&lt;/em&gt;。对我的适应能力无语了。先去睡了一觉，醒来的时候已经十一点了。中间好像错过了很多事情&lt;del&gt;(比如AK爷吃完了所有的KFC)&lt;/del&gt;。&lt;br&gt;浪着浪着就一点多了。感觉第一天就这样不是很好。于是就睡了。~~后来得知原来还有没睡的&lt;a href=&quot;http://blog-stalker.apphb.com/&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;@大圣&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;Day-1-1&quot;&gt;&lt;a href=&quot;#Day-1-1&quot; class=&quot;headerlink&quot; title=&quot;Day 1&quot;&gt;&lt;/a&gt;Day 1&lt;/h2&gt;&lt;p&gt;不到五点就醒来了，果然是我昨天睡太多了吗。去吃早饭的时候发现东西都还没有，随便吃了一点粥面包什么的就算了。&lt;br&gt;上午洲爷来讲数论，感觉很可听的样子。事实上洲爷讲得也很好，一直到九点半的时候都可以听懂的样子。然后莫名其妙被一道题卡主。看懂之后发现断线太久好像连不回去了。。&lt;em&gt;(:з」∠)&lt;/em&gt;。省选讲课就是如此凶残。&lt;br&gt;然而好像也就洲爷的讲课比较凶残。下午的动态规划和树分治都是从基础开始讲起的，最后也没有特别难。让人感觉这不像是省选讲课。（去年来的时候好像是全程睡觉的节奏呀，为什么今年画风变得这么突然）&lt;br&gt;晚上本来想好要写完博客的。然后看到&lt;a href=&quot;http://blog-stalker.apphb.com/&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;大圣&lt;/a&gt;和AKY在看动漫，我也忍不住去看了一会儿唐顿。就一直看到了十一点多。&lt;em&gt;(:з」∠)&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;Day-2&quot;&gt;&lt;a href=&quot;#Day-2&quot; class=&quot;headerlink&quot; title=&quot;Day 2&quot;&gt;&lt;/a&gt;Day 2&lt;/h2&gt;&lt;p&gt;吃早饭的时候听说今天要讲量子计算机，感觉好厉害&lt;del&gt;（好怕怕）&lt;/del&gt;。然而事实是上午一直在讲计算机整数和浮点运算&lt;del&gt;(初赛基础知识)&lt;/del&gt;。上到一半的时候很多神犇都退场了。&lt;br&gt;&lt;img src=&quot;\img\QQ截图20160325141941.png&quot; alt=&quot;&quot;&gt;这种事以前真的发生过吗。。&lt;br&gt;感觉有一种不好的预感。果真下午的时候神犇们又都没有出现。。&lt;em&gt;(:з」∠)&lt;/em&gt;。期待已久的量子计算机也出现了。然而我只听了十分钟就弃疗了。智商问题并没有办法。。&lt;em&gt;(:з」∠)&lt;/em&gt;&lt;br&gt;晚上看片推白2吃披萨，颓废的人生。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;Day-3&quot;&gt;&lt;a href=&quot;#Day-3&quot; class=&quot;headerlink&quot; title=&quot;Day 3&quot;&gt;&lt;/a&gt;Day 3&lt;/h2&gt;&lt;p&gt;比赛日，太悲伤就不说了。我还是去考虑退役的事情吧。、&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;$${\mathcal {FIN}}$$&lt;/p&gt;
</content>
    
    <summary type="html">
    
      &lt;p&gt;时间过得好快啊，马上我就要以高一选手的身份参加省选了&lt;br&gt;
    
    </summary>
    
      <category term="杂文" scheme="http://yoursite.com/categories/%E6%9D%82%E6%96%87/"/>
    
    
      <category term="杂文" scheme="http://yoursite.com/tags/%E6%9D%82%E6%96%87/"/>
    
      <category term="游记" scheme="http://yoursite.com/tags/%E6%B8%B8%E8%AE%B0/"/>
    
  </entry>
  
  <entry>
    <title>闲来无事学数据结构——非旋转Treap</title>
    <link href="http://yoursite.com/2016/03/20/%E9%97%B2%E6%9D%A5%E6%97%A0%E4%BA%8B%E5%AD%A6%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E2%80%94%E2%80%94%E9%9D%9E%E6%97%8B%E8%BD%ACTreap/"/>
    <id>http://yoursite.com/2016/03/20/闲来无事学数据结构——非旋转Treap/</id>
    <published>2016-03-20T03:12:28.000Z</published>
    <updated>2016-03-31T10:36:50.000Z</updated>
    
    <content type="html">&lt;p&gt;星期六的模拟赛里的在线段树上打可持久化Treap的标记感觉好神的样子，就想去学一学。然后Memphis的blog一直崩一直崩woc，要么刷不出图片要么刷不出代码，is-programmer服务器真是妈的智障。&lt;br&gt;&lt;a id=&quot;more&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;embed src=&quot;http://music.163.com/style/swf/widget.swf?sid=28762977&amp;type=2&amp;auto=0&amp;width=320&amp;height=66&quot; width=&quot;340&quot; height=&quot;86&quot; allownetworking=&quot;all&quot;&gt;&lt;br&gt;好吧让我先来口胡一下Treap是什么&lt;del&gt;(然而我并不会Treap233,从来都是写Spaly的233)&lt;/del&gt;,顾名思义Treap就是tree+heap.所以Treap就是拥有堆性质的二叉树.对于Treap里的每一个节点拥有两个值,fix和key.对于fix满足堆性质,在任意一颗子树中,根节点的fix为最小值.对于key,满足中序遍历有序.&lt;br&gt;对于插入删除节点的操作可以用旋转来维护Treap的性质，至于怎么旋转嘛。。我不知道，应该和Splay差不多的吧。&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;好上面的都不是重点，并没有什么用处&lt;del&gt;(其实只是我编不下去了)&lt;/del&gt;&lt;br&gt;旋转Treap相较与Splay优点是常数小，但是，好像并不能方便地实现区间的操作。&lt;del&gt;(所以还是Splay大法好啊233)&lt;/del&gt;&lt;/p&gt;
&lt;p&gt;所以需要一种可以支持区间操作的Treap，于是非旋转Treap就出现了。&lt;br&gt;非旋转Treap可以做什么：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Build建树&lt;/li&gt;
&lt;li&gt;Split分裂&lt;/li&gt;
&lt;li&gt;Merge合并&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;好像没什么用啊。&lt;br&gt;但是通过分裂合并就可以提取出一段区间，然后就可以进行区间操作，下传标记等一系列操作。&lt;/p&gt;
&lt;hr&gt;
&lt;h4 id=&quot;具体操作的分析&quot;&gt;&lt;a href=&quot;#具体操作的分析&quot; class=&quot;headerlink&quot; title=&quot;具体操作的分析&quot;&gt;&lt;/a&gt;具体操作的分析&lt;/h4&gt;&lt;h3 id=&quot;Build&quot;&gt;&lt;a href=&quot;#Build&quot; class=&quot;headerlink&quot; title=&quot;Build&quot;&gt;&lt;/a&gt;Build&lt;/h3&gt;&lt;p&gt;Treap可以实现O(N)建树，具体方法就是用栈维护树右边的一条链，然后每次在树右下角加一个点，维护Treap的性质。&lt;br&gt;如果栈顶的元素fix值大于插入点的fix，就将栈顶元素弹出。&lt;br&gt;直到站栈中元素fix满足递增，将弹出的点接在新插入点的左儿子。&lt;br&gt;复杂度分析：因为每一个点只被弹出一次，所以复杂度为O(N)的。&lt;/p&gt;
&lt;figure class=&quot;highlight c++&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;11&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;12&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;13&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;14&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;15&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;16&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;17&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;18&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;function&quot;&gt;node *&lt;span class=&quot;title&quot;&gt;Build&lt;/span&gt;&lt;span class=&quot;params&quot;&gt;()&lt;/span&gt;&lt;/span&gt;&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;static&lt;/span&gt; node *stk[N],*x,*last = null;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; top = &lt;span class=&quot;number&quot;&gt;0&lt;/span&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;for&lt;/span&gt; (&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; i=&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;;i&amp;lt;=n;i++)&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;		tot++;x = Nd+tot;x-&amp;gt;val = i;last = null;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;		&lt;span class=&quot;keyword&quot;&gt;while&lt;/span&gt; (top &amp;amp;&amp;amp; stk[top]-&amp;gt;fix&amp;gt;x-&amp;gt;fix) &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;			stk[top]-&amp;gt;Update();&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;			last = stk[top];&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;			stk[top--] = null;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;		&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;		&lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt; (top) stk[top]-&amp;gt;R = x;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;		x-&amp;gt;L = last;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;		stk[++top] = x;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;//		print(stk[1]);puts(&quot;&quot;);&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;while&lt;/span&gt; (top) stk[top--]-&amp;gt;Update();&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt; stk[&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;];&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;h3 id=&quot;Split&quot;&gt;&lt;a href=&quot;#Split&quot; class=&quot;headerlink&quot; title=&quot;Split&quot;&gt;&lt;/a&gt;Split&lt;/h3&gt;&lt;p&gt;将一颗Treap按照第K位分裂成两半。&lt;br&gt;就像找第K位一样递归下去，返回的时候合并一下就好了。&lt;br&gt;复杂度分析：因为Treap期望的树高为Log的，所以Split一次的复杂度为O(LogN)&lt;/p&gt;
&lt;figure class=&quot;highlight c++&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;11&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;12&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;13&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;14&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;15&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;16&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;17&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;18&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;19&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;function&quot;&gt;Droot &lt;span class=&quot;title&quot;&gt;Split&lt;/span&gt;&lt;span class=&quot;params&quot;&gt;(node *x,&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; k)&lt;/span&gt; &lt;/span&gt;&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt; (x==null) &lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt; Droot(null,null);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	Droot y;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	x-&amp;gt;Down();&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt; (x-&amp;gt;L-&amp;gt;S&amp;gt;=k) &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;		y = Split(x-&amp;gt;L,k);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;		x-&amp;gt;L = y.second;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;		x-&amp;gt;Update();&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;		y.second = x;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;else&lt;/span&gt; &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;		y = Split(x-&amp;gt;R,k-x-&amp;gt;L-&amp;gt;S&lt;span class=&quot;number&quot;&gt;-1&lt;/span&gt;);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;		x-&amp;gt;R = y.first;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;		x-&amp;gt;Update();&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;		y.first = x;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt; y;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;为了可以看清楚没有缩行，其实代码是很短的。&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;h3 id=&quot;Merge&quot;&gt;&lt;a href=&quot;#Merge&quot; class=&quot;headerlink&quot; title=&quot;Merge&quot;&gt;&lt;/a&gt;Merge&lt;/h3&gt;&lt;p&gt;将两颗相对有序的Treap合并，注意是相对有序，即第一棵Treap的右下角的值要小于第二棵Treap的左下角值。如果不是相对有序的Treap只能通过启发式合并。&lt;br&gt;合并的时候因为要考虑fix值满足堆性质，可以像可并堆一样地合并，比较根节点的fix，然后递归合并儿子。不过因为要满足Treap的性质，不能交换左右儿子。&lt;/p&gt;
&lt;figure class=&quot;highlight c++&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;11&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;12&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;13&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;14&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;15&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;16&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;17&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;function&quot;&gt;node *&lt;span class=&quot;title&quot;&gt;Merge&lt;/span&gt;&lt;span class=&quot;params&quot;&gt;(node *A,node *B)&lt;/span&gt;&lt;/span&gt;&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt; (A==null &amp;amp;&amp;amp; B==null) &lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt; null;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt; (A==null) &lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt; B;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt; (B==null) &lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt; A;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt; (A-&amp;gt;fix&amp;lt;B-&amp;gt;fix)&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;		A-&amp;gt;Down();&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;		A-&amp;gt;R = Merge(A-&amp;gt;R,B);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;		A-&amp;gt;Update();&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;		&lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt; A;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;else&lt;/span&gt; &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;		B-&amp;gt;Down();&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;		B-&amp;gt;L = Merge(A,B-&amp;gt;L);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;		B-&amp;gt;Update();&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;		&lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt; B;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;p&gt;有了这些操作就可以很方便的实现大部分区间操作和删除插入操作。&lt;/p&gt;
&lt;p&gt;我们发现这些操作都是从上向下的，所以不需要记父亲。于是，Treap就可以实现可持久化了。&lt;br&gt;至于怎么实现。我并不知道。学习ing&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;最后贴一道&lt;a href=&quot;http://www.lydsy.com/JudgeOnline/problem.php?id=3223&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;BZOJ3223&lt;/a&gt;的代码，区间翻转.&lt;/p&gt;
&lt;figure class=&quot;highlight c++&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;11&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;12&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;13&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;14&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;15&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;16&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;17&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;18&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;19&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;20&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;21&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;22&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;23&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;24&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;25&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;26&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;27&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;28&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;29&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;30&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;31&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;32&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;33&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;34&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;35&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;36&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;37&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;38&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;39&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;40&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;41&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;42&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;43&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;44&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;45&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;46&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;47&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;48&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;49&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;50&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;51&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;52&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;53&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;54&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;55&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;56&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;57&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;58&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;59&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;60&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;61&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;meta&quot;&gt;#&lt;span class=&quot;meta-keyword&quot;&gt;include&lt;/span&gt; &lt;span class=&quot;meta-string&quot;&gt;&amp;lt;cstdio&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;meta&quot;&gt;#&lt;span class=&quot;meta-keyword&quot;&gt;include&lt;/span&gt; &lt;span class=&quot;meta-string&quot;&gt;&amp;lt;cstring&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;meta&quot;&gt;#&lt;span class=&quot;meta-keyword&quot;&gt;include&lt;/span&gt; &lt;span class=&quot;meta-string&quot;&gt;&amp;lt;algorithm&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; N = &lt;span class=&quot;number&quot;&gt;100010&lt;/span&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;using&lt;/span&gt; &lt;span class=&quot;keyword&quot;&gt;namespace&lt;/span&gt; &lt;span class=&quot;built_in&quot;&gt;std&lt;/span&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;function&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;title&quot;&gt;read&lt;/span&gt;&lt;span class=&quot;params&quot;&gt;()&lt;/span&gt;&lt;/span&gt;&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; x = &lt;span class=&quot;number&quot;&gt;0&lt;/span&gt;,f = &lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;,c = getchar();&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;while&lt;/span&gt; (c&amp;lt;&lt;span class=&quot;string&quot;&gt;&#39;0&#39;&lt;/span&gt; || c&amp;gt;&lt;span class=&quot;string&quot;&gt;&#39;9&#39;&lt;/span&gt;) &amp;#123;&lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt; (c==&lt;span class=&quot;string&quot;&gt;&#39;-&#39;&lt;/span&gt;) f = &lt;span class=&quot;number&quot;&gt;-1&lt;/span&gt;;c = getchar();&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;while&lt;/span&gt; (c&amp;gt;=&lt;span class=&quot;string&quot;&gt;&#39;0&#39;&lt;/span&gt; &amp;amp;&amp;amp; c&amp;lt;=&lt;span class=&quot;string&quot;&gt;&#39;9&#39;&lt;/span&gt;) x = x*&lt;span class=&quot;number&quot;&gt;10&lt;/span&gt;+c-&lt;span class=&quot;string&quot;&gt;&#39;0&#39;&lt;/span&gt;,c = getchar();&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt; x*f;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; n,m,l,r,tot;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;struct&lt;/span&gt; node *null,*rt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;struct&lt;/span&gt; node&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	node *L,*R;&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; S,fix,val,rev;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;function&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;title&quot;&gt;Update&lt;/span&gt;&lt;span class=&quot;params&quot;&gt;()&lt;/span&gt;&lt;/span&gt;&amp;#123;&lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt; (&lt;span class=&quot;keyword&quot;&gt;this&lt;/span&gt;==null) &lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt;;S = L-&amp;gt;S+R-&amp;gt;S+&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;function&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;title&quot;&gt;Setrev&lt;/span&gt;&lt;span class=&quot;params&quot;&gt;()&lt;/span&gt;&lt;/span&gt;&amp;#123;&lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt; (&lt;span class=&quot;keyword&quot;&gt;this&lt;/span&gt;==null) &lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt;;rev^=&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;;swap(L,R);&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;function&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;title&quot;&gt;Down&lt;/span&gt;&lt;span class=&quot;params&quot;&gt;()&lt;/span&gt;&lt;/span&gt;&amp;#123;&lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt; (&lt;span class=&quot;keyword&quot;&gt;this&lt;/span&gt;==null) &lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt;;&lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt; (rev)&amp;#123;rev = &lt;span class=&quot;number&quot;&gt;0&lt;/span&gt;;L-&amp;gt;Setrev();R-&amp;gt;Setrev();&amp;#125;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125; Nd[N];&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;typedef&lt;/span&gt; pair&amp;lt;node*,node*&amp;gt; Droot;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;function&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;title&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;params&quot;&gt;(node *x)&lt;/span&gt;&lt;/span&gt;&amp;#123;&lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt; (x==null) &lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt;;x-&amp;gt;Down();print(x-&amp;gt;L);&lt;span class=&quot;built_in&quot;&gt;printf&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&quot;%d &quot;&lt;/span&gt;,x-&amp;gt;val);print(x-&amp;gt;R);&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;function&quot;&gt;node *&lt;span class=&quot;title&quot;&gt;Build&lt;/span&gt;&lt;span class=&quot;params&quot;&gt;()&lt;/span&gt;&lt;/span&gt;&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;static&lt;/span&gt; node *stk[N],*x,*last = null;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; top = &lt;span class=&quot;number&quot;&gt;0&lt;/span&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;for&lt;/span&gt; (&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; i=&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;;i&amp;lt;=n;i++)&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;		tot++;x = Nd+tot;x-&amp;gt;val = i;last = null;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;		&lt;span class=&quot;keyword&quot;&gt;while&lt;/span&gt; (top &amp;amp;&amp;amp; stk[top]-&amp;gt;fix&amp;gt;x-&amp;gt;fix) &amp;#123;stk[top]-&amp;gt;Update();last = stk[top];stk[top--] = null;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;		&lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt; (top) stk[top]-&amp;gt;R = x;x-&amp;gt;L = last;stk[++top] = x;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;while&lt;/span&gt; (top) stk[top--]-&amp;gt;Update();&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt; stk[&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;];&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;function&quot;&gt;node *&lt;span class=&quot;title&quot;&gt;Merge&lt;/span&gt;&lt;span class=&quot;params&quot;&gt;(node *A,node *B)&lt;/span&gt;&lt;/span&gt;&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt; (A==null &amp;amp;&amp;amp; B==null) &lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt; null;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt; (A==null) &lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt; B;&lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt; (B==null) &lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt; A;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt; (A-&amp;gt;fix&amp;lt;B-&amp;gt;fix)&amp;#123;A-&amp;gt;Down();A-&amp;gt;R = Merge(A-&amp;gt;R,B);A-&amp;gt;Update();&lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt; A;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;else&lt;/span&gt; &amp;#123;B-&amp;gt;Down();B-&amp;gt;L = Merge(A,B-&amp;gt;L);B-&amp;gt;Update();&lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt; B;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;function&quot;&gt;Droot &lt;span class=&quot;title&quot;&gt;Split&lt;/span&gt;&lt;span class=&quot;params&quot;&gt;(node *x,&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; k)&lt;/span&gt; &lt;/span&gt;&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt; (x==null) &lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt; Droot(null,null);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	Droot y;x-&amp;gt;Down();&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt; (x-&amp;gt;L-&amp;gt;S&amp;gt;=k) &amp;#123;y = Split(x-&amp;gt;L,k);x-&amp;gt;L = y.second;x-&amp;gt;Update();y.second = x;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;else&lt;/span&gt; &amp;#123;y = Split(x-&amp;gt;R,k-x-&amp;gt;L-&amp;gt;S&lt;span class=&quot;number&quot;&gt;-1&lt;/span&gt;);x-&amp;gt;R = y.first;x-&amp;gt;Update();y.first = x;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt; y;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;function&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;title&quot;&gt;Reverse&lt;/span&gt;&lt;span class=&quot;params&quot;&gt;(&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; l,&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; r)&lt;/span&gt;&lt;/span&gt;&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt; (l==&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt; &amp;amp;&amp;amp; r==n) &amp;#123;rt-&amp;gt;Setrev();&lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt;;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt; (l==&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;) &amp;#123;Droot x = Split(rt,r);x.first-&amp;gt;Setrev();rt = Merge(x.first,x.second);&lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt;;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt; (r==n) &amp;#123;Droot x = Split(rt,l&lt;span class=&quot;number&quot;&gt;-1&lt;/span&gt;);x.second-&amp;gt;Setrev();rt = Merge(x.first,x.second);&lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt;;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	Droot x = Split(rt,l&lt;span class=&quot;number&quot;&gt;-1&lt;/span&gt;);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	Droot y = Split(x.second,r-(l&lt;span class=&quot;number&quot;&gt;-1&lt;/span&gt;));&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	y.first-&amp;gt;Setrev();&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	rt = Merge(Merge(x.first,y.first),y.second);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;function&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;title&quot;&gt;main&lt;/span&gt;&lt;span class=&quot;params&quot;&gt;()&lt;/span&gt;&lt;/span&gt;&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	n = read();m = read();null = Nd;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;for&lt;/span&gt; (&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; i=&lt;span class=&quot;number&quot;&gt;0&lt;/span&gt;;i&amp;lt;=n;i++) Nd[i] = (node)&amp;#123;null,null,&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;,rand(),&lt;span class=&quot;number&quot;&gt;0&lt;/span&gt;&amp;#125;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	null-&amp;gt;S = &lt;span class=&quot;number&quot;&gt;0&lt;/span&gt;;rt = Build();&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;for&lt;/span&gt; (&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; i=&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;;i&amp;lt;=m;i++) &amp;#123;l = read();r = read();Reverse(l,r);&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	print(rt);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;p&gt;代码长度和Splay差不了多少，至于常数嘛。。这道题上好像也看不出来什么。差了200ms也算还能够接受。&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;有错误请指出$$\mathcal {FIN}$$&lt;/p&gt;
</content>
    
    <summary type="html">
    
      &lt;p&gt;星期六的模拟赛里的在线段树上打可持久化Treap的标记感觉好神的样子，就想去学一学。然后Memphis的blog一直崩一直崩woc，要么刷不出图片要么刷不出代码，is-programmer服务器真是妈的智障。&lt;br&gt;
    
    </summary>
    
      <category term="笔记" scheme="http://yoursite.com/categories/%E7%AC%94%E8%AE%B0/"/>
    
    
      <category term="笔记" scheme="http://yoursite.com/tags/%E7%AC%94%E8%AE%B0/"/>
    
      <category term="数据结构" scheme="http://yoursite.com/tags/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/"/>
    
      <category term="平衡树" scheme="http://yoursite.com/tags/%E5%B9%B3%E8%A1%A1%E6%A0%91/"/>
    
  </entry>
  
  <entry>
    <title>数论入门知识整理</title>
    <link href="http://yoursite.com/2016/03/18/%E6%95%B0%E8%AE%BA%E5%85%A5%E9%97%A8%E7%9F%A5%E8%AF%86%E6%95%B4%E7%90%86/"/>
    <id>http://yoursite.com/2016/03/18/数论入门知识整理/</id>
    <published>2016-03-18T06:44:34.000Z</published>
    <updated>2016-04-04T11:36:50.578Z</updated>
    
    <content type="html">&lt;p&gt;整理一下初等数论的基础知识。。&lt;br&gt;&lt;a id=&quot;more&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;embed src=&quot;http://music.163.com/style/swf/widget.swf?sid=35270645&amp;type=2&amp;auto=0&amp;width=320&amp;height=66&quot; width=&quot;340&quot; height=&quot;86&quot; allownetworking=&quot;all&quot;&gt;

&lt;p&gt;今天听&lt;a href=&quot;http://dream-for-me.blog.163.com/&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;狄拉克(贱贱)神犇&lt;/a&gt;给初三讲课。见证了我旁边的初三爷从茫然到一脸懵逼到崩溃的全过程，据他讲述，这是他至今为止唯一一次完全没有听懂的讲课。&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;span id=&quot;menu&quot;&gt;好这些都不是重点&lt;span&gt;&lt;br&gt;让我们来理一下重点是什么:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#jump_niyuan&quot;&gt;逆元&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#jump_exgcd&quot;&gt;扩展欧几里得&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#jump_oula&quot;&gt;欧拉筛法&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#jump_crt&quot;&gt;中国剩余定理&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#jump_zuheshu&quot;&gt;组合数&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#jump_lucas&quot;&gt;Lucas定理&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;&lt;/p&gt;&lt;h3 id=&quot;jump_niyuan&quot;&gt;逆元&lt;/h3&gt;关于逆元是什么,讲课的时候我给刚才那位当时还是处在茫然状态的初三爷讲了一下,然后结果是他没有听懂.讲道理逆元有这么难吗!!&lt;br&gt;对于$a\cdot b\equiv1(mod\ P)$我们就称b为a在模P域下的逆元,记a的逆元为$a^{-1}$(逆元要在模域下才有意义!!)&lt;br&gt;逆元有什么用呢？对于在模域下的除法$\frac{a}{b}\equiv a\cdot b^{-1}(mod\ P)$&lt;br&gt;怎么求逆元？&lt;br&gt;首先对于在模P域下的a,存在逆元的条件是$gcd(a,P)=1$&lt;br&gt;当a存在逆元时根据欧拉定理可得$a^{-1}\equiv a^{\phi(P)-1}(mod\ P)$&lt;br&gt;然后使用快速幂就可以在log的时间内求出单个元素的逆元了&lt;br&gt;如何快速求1~n所有数的逆元(这里的条件是P为素数)?&lt;br&gt;设$P\div a=q…r$即$P=qx+r$&lt;br&gt;然后可以将其放到模域下&lt;br&gt;\begin{align}&lt;br&gt;P &amp;amp; = qx+r \\&lt;br&gt;0 &amp;amp; \equiv qx+r (mod\ P) \\&lt;br&gt;-r &amp;amp; \equiv qx(mod\ P) \\&lt;br&gt;-rq^{-1} &amp;amp; \equiv x(mod\ P) \\&lt;br&gt;x^{-1} &amp;amp; \equiv -qr^{-1}(mod\ P) \\&lt;br&gt;x^{-1} &amp;amp; \equiv -\lfloor\frac{P}{x}\rfloor\cdot (P\ mod\ x)^{-1}(mod\ P)&lt;br&gt;\end{align}&lt;br&gt;然后就可以O(n)递推了&lt;br&gt;&lt;a href=&quot;#menu&quot;&gt;Back to menu&lt;/a&gt;&lt;p&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;/p&gt;&lt;h3 id=&quot;jump_exgcd&quot;&gt;扩展欧几里得&lt;/h3&gt;第一个问题。。欧几里得算法是什么..其实就是辗转相除求GCD。。&lt;br&gt;那么扩展欧几里得是什么呢？&lt;br&gt;扩展欧几里得用来解决一类$a\cdot x+b\cdot y=c$的问题，可以求x的最小正整数解。当这个方程有解的时候，我们可以得知$gcd(a,b)|a$,$gcd(a,b)|b$,所以$gcd(a,b)|a\cdot x,gcd(a,b)|b\cdot y$，所以$gcd(a,b)|c$.然后可以把原方程化为$a\cdot x+b\cdot y=gcd(a,b)$求出解以后再乘上一个$c/gcd(a,b)$就可以了&lt;br&gt;对于怎么求解这个方程呢？&lt;br&gt;设$A=b,B=a\%b$&lt;br&gt;将原方程化为$A\cdot x_0+B\cdot y_0=gcd(a,b)$,也就是$b\cdot x_0+(a\%b)\cdot y_0=gcd(a,b)$&lt;br&gt;假设我们已经求出了这个方程，那么我们怎么推得原来方程的解呢?&lt;br&gt;\begin{align}&lt;br&gt;b\cdot x_0+(a\%b)\cdot y_0 &amp;amp; = gcd(a,b) \\&lt;br&gt;b\cdot x_0+(a-\lfloor\frac{a}{b}\rfloor\cdot b)\cdot y_0 &amp;amp; = gcd(a,b) \\&lt;br&gt;b\cdot x_0+a\cdot y_0-b\cdot\lfloor\frac{a}{b}\rfloor\cdot y_0 &amp;amp; = gcd(a,b) \\&lt;br&gt;a\cdot y_0+b\cdot(x_0-\lfloor\frac{a}{b}\rfloor\cdot y_0) &amp;amp; = gcd(a,b)&lt;br&gt;\end{align}然后我们就可以知道$x=y_0,y = x_0-\lfloor\frac{a}{b}\rfloor\cdot y_0$。&lt;br&gt;然后我们只要对原方程每次这样递归下去，然后就可以求出原方程的解了。&lt;p&gt;&lt;/p&gt;
&lt;p&gt;代码也很简单&lt;br&gt;&lt;figure class=&quot;highlight c++&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;function&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;title&quot;&gt;Exgcd&lt;/span&gt;&lt;span class=&quot;params&quot;&gt;(&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; a,&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; b,&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; &amp;amp;x,&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; &amp;amp;y)&lt;/span&gt;&lt;/span&gt;&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt; (b==&lt;span class=&quot;number&quot;&gt;0&lt;/span&gt;) &amp;#123;x = &lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;;y = &lt;span class=&quot;number&quot;&gt;0&lt;/span&gt;;&lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt;;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	Exgcd(b,a%b,x,y);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; tmp = x;x = y;y = tmp-(a/b)*y;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;#menu&quot;&gt;Back to menu&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;/p&gt;&lt;h3 id=&quot;jump_oula&quot;&gt;欧拉筛法&lt;/h3&gt;对于筛法我最先知道的是NlogN的倍增筛质数，原来感觉这么一个东西应该就够了。有些题目只能放O(N)过，觉得这个东西越来越没用&lt;del&gt;确实没用&lt;/del&gt;。&lt;br&gt;欧拉筛法是什么呢？&lt;br&gt;欧拉筛法可以用来O(n)的时间里筛大部分（还是全部？并不清楚）积性函数。&lt;br&gt;什么是积性函数？&lt;br&gt;积性函数：任取p，q且$gcd(p,q)=1$，若$f(xy)=f(x)f(y)$，则f是一个积性函数&lt;br&gt;完全积性函数：任取p,q，若$f(pq)=f(p)f(q)$，则f是一个完全积性函数&lt;br&gt;欧拉筛法怎么做呢？&lt;br&gt;从2~n枚举一个数i，然后枚举小于i的质数j。如果j不是i的因子，那么j就是i*j的最小质因子，然后可以计算出f(i*j)的值。当j|i时，j是i的最小质因子，对于之后的所有质数k，i*k的最小质因子都不是k，而是j，所以直接跳出循环。这样我们可以发现每一个数都只被它的最小质因子筛到一次，所以整个算法的复杂度是O(n)的。&lt;p&gt;&lt;/p&gt;
&lt;p&gt;欧拉筛素数代码&lt;br&gt;&lt;figure class=&quot;highlight c++&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;9&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;function&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;title&quot;&gt;Getprime&lt;/span&gt;&lt;span class=&quot;params&quot;&gt;()&lt;/span&gt;&lt;/span&gt;&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;for&lt;/span&gt; (&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; i=&lt;span class=&quot;number&quot;&gt;2&lt;/span&gt;;i&amp;lt;=n;i++)&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;		&lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt; (!vis[i]) prime[++sum] = i;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;		&lt;span class=&quot;keyword&quot;&gt;for&lt;/span&gt; (&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; j=&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;;j&amp;lt;=sum &amp;amp;&amp;amp; i*prime[j]&amp;lt;=n;j++)&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;			vis[i*prime[j]] = j;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;			&lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt; (i%prime[j]==&lt;span class=&quot;number&quot;&gt;0&lt;/span&gt;) &lt;span class=&quot;keyword&quot;&gt;break&lt;/span&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;		&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;#menu&quot;&gt;Back to menu&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;/p&gt;&lt;h3 id=&quot;jump_crt&quot;&gt;中国剩余定理(CRT)&lt;/h3&gt;中国剩余定理，用来解决一类一元线性同余方程组&lt;br&gt;一元线性同余方程组问题最早可见于中国南北朝时期（公元5世纪）的数学著作《孙子算经》卷下第二十六题，叫做“物不知数”问题，原文如下：&lt;br&gt;有物不知其数，三三数之剩二，五五数之剩三，七七数之剩二。问物几何？&lt;br&gt;即，一个整数除以三余二，除以五余三，除以七余二，求这个整数。《孙子算经》中首次提到了同余方程组问题，以及以上具体问题的解法，因此在中文数学文献中也会将中国剩余定理称为孙子定理。&lt;br&gt;宋朝数学家秦九韶于1247年《数书九章》卷一、二《大衍类》对“物不知数”问题做出了完整系统的解答。明朝数学家程大位将解法编成易于上口的《孙子歌诀》：三人同行七十希，五树梅花廿一支，七子团圆正半月，除百零五使得知这个歌诀给出了模数为3、5、7时候的同余方程的秦九韶解法。意思是：将除以3得到的余数乘以70，将除以5得到的余数乘以21，将除以7得到的余数乘以15，全部加起来后除以105，得到的余数就是答案。比如说在以上的物不知数问题里面，按歌诀求出的结果就是23.（以上摘自某谋财害命网站）&lt;br&gt;然后把上面乱七八糟的东西整理一下就是求满足&lt;br&gt;\begin{align}&lt;br&gt;x &amp;amp; \equiv a_1(mod\ b_1) \\&lt;br&gt;x &amp;amp; \equiv a_2(mod\ b_2) \\&lt;br&gt;&amp;amp; . \\&lt;br&gt;&amp;amp; . \\&lt;br&gt;x &amp;amp; \equiv a_n(mod\ b_n)&lt;br&gt;\end{align}的最小x的值&lt;br&gt;这个方程是一定存在解的吗？&lt;br&gt;如果$a_1\ mod\ gcd(b_1,b_2)\not=a_2\ mod \ gcd(b_1,b_2)$,那么原方程组没有解&lt;br&gt;对于有解的方程&lt;br&gt;我们设$$M=\prod_{i=1}^{n} b_i$$$$D_i=\frac{M}{b_i}$$对于每一个方程，求出$$D_ix\equiv 1 (mod\ b_i)$$我们用求逆元的方法解出x，并把$D_i\cdot x$记为$X_i$&lt;br&gt;那么$X_i\cdot a_i$对其他所有b模的结果都为0，且对于模$b_i$的结果为$a_i$&lt;br&gt;那么$(\Sigma_{i=1}^{n} X_i\cdot A_i)mod M$就是答案&lt;br&gt;&lt;a href=&quot;#menu&quot;&gt;Back to menu&lt;/a&gt;&lt;p&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;/p&gt;&lt;h3 id=&quot;jump_zuheshu&quot;&gt;组合数&lt;/h3&gt;一些比较常见的性质&lt;br&gt;$$A_{n}^{m}=C_{n}^{m}\cdot m!$$$$C_{n}^{m}=C_{n}^{n-m}$$$$C_{n}^{m}=C_{n-1}^{m}+C_{n-1}^{m-1}$$$$\sum_{i=0}^{n} C_{n}^{i}=2^n$$恩其他的应该没有什么好写的&lt;br&gt;&lt;a href=&quot;#menu&quot;&gt;Back to menu&lt;/a&gt;&lt;p&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;/p&gt;&lt;h3 id=&quot;jump_lucas&quot;&gt;Lucas定理，组合数取模&lt;/h3&gt;lucas定理用来计算$C_{n}^{m}\ mod \ P$的问题，其中P为质数，如果P不是质数就要用CRT进行合并。$$Lucas:C_{m}^{n} \equiv C_{m\ mod\ P}^{n\ mod\ P}\cdot C_{m/P}^{n/P}\ mod\ P$$&lt;p&gt;&lt;/p&gt;
&lt;figure class=&quot;highlight&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;11&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;12&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;13&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;14&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;15&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;16&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;17&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;18&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;19&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;20&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;21&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;22&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;23&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;24&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;25&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;26&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;27&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;28&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;29&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;#include &amp;lt;cstring&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;#include &amp;lt;cstdio&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;using namespace std;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;typedef long long LL;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;LL n,m,p;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;LL ksm(LL a,LL k)&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    LL res = 1;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    for (;k;k&amp;gt;&amp;gt;=1,a=a*a%p) if (k&amp;amp;1) res = res*a%p;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    return res;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;LL C(LL n,LL m)&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    if(m&amp;gt;n)return 0;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    LL ans=1;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    for(int i=1;i&amp;lt;=m;i++)&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        LL a=(n+i-m)%p;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        LL b=i%p;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;        ans=ans*(a*ksm(b,p-2)%p)%p;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    return ans;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;LL Lucas(LL n,LL m)&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    if(m==0)return 1;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    return C(n%p,m%p)*Lucas(n/p,m/p)%p;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;int main()&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    scanf(&quot;%d&quot;,&amp;amp;T);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    scanf(&quot;%lld%lld%lld&quot;,&amp;amp;n,&amp;amp;m,&amp;amp;p);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    printf(&quot;%lld\n&quot;,Lucas(n,m));&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;p&gt;&lt;a href=&quot;#menu&quot;&gt;Back to menu&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;有错误请指出$$\mathcal{FIN.}$$&lt;/p&gt;
</content>
    
    <summary type="html">
    
      &lt;p&gt;整理一下初等数论的基础知识。。&lt;br&gt;
    
    </summary>
    
      <category term="笔记" scheme="http://yoursite.com/categories/%E7%AC%94%E8%AE%B0/"/>
    
    
      <category term="笔记" scheme="http://yoursite.com/tags/%E7%AC%94%E8%AE%B0/"/>
    
      <category term="数论" scheme="http://yoursite.com/tags/%E6%95%B0%E8%AE%BA/"/>
    
  </entry>
  
  <entry>
    <title>用CDQ分治维护凸壳</title>
    <link href="http://yoursite.com/2016/03/18/%E7%94%A8CDQ%E5%88%86%E6%B2%BB%E7%BB%B4%E6%8A%A4%E5%87%B8%E5%A3%B3/"/>
    <id>http://yoursite.com/2016/03/18/用CDQ分治维护凸壳/</id>
    <published>2016-03-17T23:03:43.000Z</published>
    <updated>2016-03-31T10:36:40.000Z</updated>
    
    <content type="html">&lt;p&gt;为什么会想到写这么一篇文章呢。。。&lt;br&gt;&lt;del&gt;我怎么知道为什么!!&lt;/del&gt;&lt;br&gt;&lt;a id=&quot;more&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;embed src=&quot;http://music.163.com/style/swf/widget.swf?sid=600799&amp;type=2&amp;auto=0&amp;width=320&amp;height=66&quot; width=&quot;340&quot; height=&quot;86&quot; allownetworking=&quot;all&quot;&gt;&lt;br&gt;先从昨天模拟赛的题目开始吧&lt;br&gt;为什么现在的模拟赛里竟然会有ACM World Final的原题，这题以前在讲CDQ分治的时候在课件上看到过。。&lt;br&gt;然后我当时没有好好看。。&lt;em&gt;(:з」∠)&lt;/em&gt;。。&lt;br&gt;导致我看到题面的时候的反应就是：&lt;br&gt;哇原题!&lt;br&gt;哇槽被我弃了的原题&lt;em&gt;(:з」∠)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;于是考场上的我只能自己YY了…&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;##Machine Works&lt;br&gt;你是任意性复杂机器公司(Arbitrarily Complex Machines, ACM)的经理,公司使用更加先进的机械设备生产先进的机器。原来的那一台生产机器已经坏了,所以你要去为公司买一台新的生产机器。你的任务是在转型期内尽可能得到更大的收益。在这段时间内,你要买卖机器,并且当机器被 ACM公司拥有的时候,操控这些机器以获取利润。因为空间的限制,ACM 公司在任何时候都只能最多拥有一台机器。在转型期内,有若干台可能卖出的机器。作为先进机器的专家,对于每台机器 M i ,你已经知道了其价格 P i 和可以买入的日期 D i 。注意,如果不在第 D i 天买入机器 M i ,那么别的人也会买走这一台机器,也就是说,以后你将没有机会购买这台机器了。如果 ACM 的钱低于一台机器的价格,那么你显然不可能买到这一台机器。如果你在第 D i 天买入了机器 M i ,那么 ACM 公司可以从第 D i + 1 天开始使用这一台机器。每使用这台机器一天,就可以为公司创造出 G i 美元的收益。你可以决定要在买入之后的某一天,以一定的折扣价卖出这一台机器。收购市场对于每一台机器,都有一个折扣价 R i。你不能在卖出的那一天使用机器,但是你可以在卖出的那一天再买入一台新的。在转型期结束后,ACM 公司会卖掉当前所拥有的机器。你的任务就是最大化转型期间ACM 公司可以得到的收入。&lt;br&gt;【输入格式】&lt;br&gt;输入包含若干组测试用例。每一组测试用例的第一行有 3 个正整数 N,C 和 D。N 是将会卖出的机器的台数(N ≤ 10 5 ),C 是在转型期开始时公司拥有的美元数量(C ≤ 10 9 ),D 是转型期持续的天数(D ≤ 10 9 )。之后的 N 行每一行描述了一台机器的情况。每一行有 4 个正整数 D i , P i , R i 和 G i ,分别表示这台机器卖出的时间,购买这台机器需要的美元数量,卖出这台机器的折扣价和使用这&lt;br&gt;台机器可以得到的利润。这些数字满足 1 ≤ D i ≤ D,1 ≤ R i &amp;lt; P i ≤ 10 9 且 1 ≤ G i ≤ 10 9 。最后一组测试用例后面的一行由 3 个 0 组成,表示输入数据结束。&lt;br&gt;【输出格式】&lt;br&gt;对于每一组测试用例,输出测试用例的编号,之后给出 ACM 公司在第 D + 1 天结束后可以得到的最大数量的美元。请依照下面给出的样例输出。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;看到这道题目,很容易的想到了一个O(N^2)的DP,现将所有的机器按照买入时间排序,f[i]表示到第d[i]天时最大的收益,然后可以得到一个显然的方程$$f[i] = max (f[i-1],f[j]-p[j]+r[j]+(d[i]-d[j]-1)*g[j])(f[j]\geq p[j])$$看着这个东西好想可以斜率优化的样子..然后我就开始乱搞这个方程,对与从j和k两个位置的转移,j比k优的条件是$$f[j]-p[j]+r[j]+(d[i]-d[j]-1)*g[j]&amp;gt;=f[k]-p[k]+r[k]+(d[i]-d[k]-1)*g[k]$$这个式子太长了,我们发现其中的一部分只和jk自己有关,设$A[j] = f[j]-p[j]+r[j]-d[j]*g[j]-d[j]$,然后原式就可以化简为$$A[j]+d[i]*g[j]&amp;gt;=A[k]+d[i]*g[k]$$移项后得到$$d[i]&amp;lt;\frac{A[j]-A[k]}{g[j]-g[k]}$$推出来以后感觉很高兴啊,好像直接按照d排序以后斜率优化就好了..&lt;br&gt;然后开始码,码完以后一测样例过了好开心..&lt;br&gt;然后和暴力开始拍…几乎就是秒出错..&lt;em&gt;(:з」∠)&lt;/em&gt;&lt;br&gt;调了一下数据以后发现…我忽略了g是不单调的..所以除过去以后符号可能会变..然后整个人就哔了狗了…&lt;/p&gt;
&lt;p&gt;然后开始想怎么把这个正确性搞对呢…&lt;br&gt;突然发现!!!&lt;br&gt;这不就是用CDQ吗..&lt;br&gt;将原序列按时间分成两半,然后考虑前半段对后半段的影响的时候,可以把前半段按照g单调排序,然后就按照斜率优化的方法O(N)扫一遍,总的复杂度是O(NlogN)的..&lt;/p&gt;
&lt;figure class=&quot;highlight&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;11&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;12&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;13&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;14&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;15&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;16&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;17&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;18&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;19&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;20&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;21&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;22&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;23&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;24&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;25&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;26&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;27&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;28&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;29&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;30&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;31&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;32&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;33&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;34&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;35&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;36&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;37&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;38&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;39&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;40&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;41&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;42&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;43&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;44&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;45&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;46&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;47&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;48&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;49&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;50&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;51&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;52&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;#include &amp;lt;cstdio&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;#include &amp;lt;cmath&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;#include &amp;lt;cstring&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;#include &amp;lt;algorithm&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;#define ll long long&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;const ll N = 100100;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;using namespace std;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;ll read()&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	ll x = 0,f = 1,c = getchar();&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	while (c&amp;lt;&#39;0&#39; || c&amp;gt;&#39;9&#39;) &amp;#123;if (c==&#39;-&#39;) f = -1;c = getchar();&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	while (c&amp;gt;=&#39;0&#39; &amp;amp;&amp;amp; c&amp;lt;=&#39;9&#39;) x = x*10+c-&#39;0&#39;,c = getchar();&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	return x*f;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;struct data&amp;#123;ll d,p,r,g;&amp;#125; a[N];&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;struct node&amp;#123;ll g,A;&amp;#125; q[N],x[N];&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;ll n,c,d,f[N],sum,t,h,Cas,m;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;bool cmp(const data &amp;amp;a,const data &amp;amp;b)&amp;#123;return a.d&amp;lt;b.d;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;bool cmp1(const node &amp;amp;a,const node &amp;amp;b)&amp;#123;if (a.g==b.g) return a.A&amp;lt;b.A;return a.g&amp;lt;b.g;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;double Slp(node j,node k) &amp;#123;return (double)(j.A-k.A)/(k.g-j.g);&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;node operator - (const node &amp;amp;a,const node &amp;amp;b) &amp;#123; return (node)&amp;#123;a.g-b.g,a.A-b.A&amp;#125;;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;double Cross(const node &amp;amp;a,const node &amp;amp;b) &amp;#123; return 1.0*a.g*b.A-1.0*a.A*b.g;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;ll work(int i ,node p) &amp;#123;return p.A+p.g*a[i].d;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;void solve(ll l ,ll r)&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	if(l==r)&amp;#123;f[l] = max(f[l-1] , f[l]);return ;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	int mid = (l+r)/2;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	solve(l, mid);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	sum = t = 0;h = 1;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	for(int i=l;i&amp;lt;=mid;i++) if(f[i]&amp;gt;=a[i].p) q[++sum] = (node)&amp;#123;a[i].g,f[i]-a[i].p+a[i].r-(a[i].d+1)*a[i].g&amp;#125;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	sort(q+1,q+1+sum,cmp1);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	for(int i=1;i&amp;lt;=sum;i++)&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;		while(t&amp;gt;1 &amp;amp;&amp;amp; Cross(x[t]-x[t-1],q[i]-x[t])&amp;gt;=0) t--;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;		x[++t] = q[i];&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	for(int i=mid+1;i&amp;lt;=r;i++)&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;		while(h&amp;lt;t &amp;amp;&amp;amp; work(i,x[h+1])&amp;gt;=work(i,x[h])) h++;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;		if (h&amp;lt;=t) f[i] = max(f[i],work(i,x[h]));&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	solve(mid+1,r);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;int main() &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	freopen(&quot;works.in&quot;,&quot;r&quot;,stdin);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	freopen(&quot;works.out&quot;,&quot;w&quot;,stdout);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	while (~scanf(&quot;%d%d%d&quot;,&amp;amp;n,&amp;amp;c,&amp;amp;d)) &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;		if (n+c+d==0) return 0;Cas++;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;		for (int i=1;i&amp;lt;=n;i++) a[i].d = read(),a[i].p = read(),a[i].r = read(),a[i].g = read();&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;		for (int i=1;i&amp;lt;=n+1;i++) f[i] = 0;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;		f[0] = c;a[++n].d = d+1;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;		sort(a+1,a+1+n,cmp);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;		solve(1,n);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;		printf(&quot;Case %d: %lld\n&quot;,Cas,f[n]);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;p&gt;打完以后就开始了漫长的调试之路…&lt;br&gt;让我来想一下当时发生了什么:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;sort的时候莫名其妙的RE了..后来发现是一个计算函数的锅…只要这个函数被调用..然后下一次排序就会RE..然而这是什么鬼一样的姿势啊..&lt;em&gt;(:з」∠)&lt;/em&gt;..,到现在还是不知道到底为什么..&lt;br&gt;在更新后一半答案的时候非常霸气地把mid+1打成了1…&lt;em&gt;(:з」∠)&lt;/em&gt;..哇槽什么鬼&lt;br&gt;中间TM还炸了longlong..&lt;em&gt;(:з」∠)&lt;/em&gt;…&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;感觉很高兴啊,然后发现…华丽丽地卡了常数..&lt;em&gt;(:з」∠)&lt;/em&gt;..(不过BZOJ上是很很轻松就过了的)&lt;br&gt;想想拿几分也就够了…然后没有去管他…&lt;br&gt;然而…最后FST了…被系统杀了…自信用%d读longlong..&lt;em&gt;(:з」∠)&lt;/em&gt;…我是不是第一个用Ubuntu然后被Ubuntu系统杀的..&lt;em&gt;(:з」∠)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;直到讲课前我还一直以为CDQ是标算..毕竟如果直接用平衡树动态维护凸壳的常数和CDQ也差不了多少…&lt;/p&gt;
&lt;p&gt;然后讲课的时候说,直接斜率优化然后在栈里面二分就好了…&lt;br&gt;诶什么情况..为什么可以斜率优化…&lt;/p&gt;
&lt;p&gt;然后我又想了一下题面…发现最优策略里面g一定是递增的…&lt;em&gt;(:з」∠)&lt;/em&gt;&lt;br&gt;哇槽这么显然的性质我竟然现在才发现.&lt;em&gt;(:з」∠)&lt;/em&gt;..&lt;br&gt;然后根据这个性质可以直接按照g排序..然后维护一个斜率的单调栈,每次在栈里面二分,然后..这样也是log的..但是这个常数..&lt;em&gt;(:з」∠)&lt;/em&gt;不说了..&lt;em&gt;(:з」∠)&lt;/em&gt;&lt;br&gt;果真智商被虐的好惨&lt;/p&gt;
&lt;figure class=&quot;highlight c++&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;11&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;12&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;13&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;14&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;15&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;16&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;17&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;18&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;19&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;20&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;21&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;22&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;23&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;24&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;25&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;26&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;27&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;28&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;29&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;30&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;31&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;32&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;33&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;34&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;35&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;36&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;37&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;38&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;39&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;40&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;41&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;42&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;43&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;44&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;45&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;46&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;47&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;48&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;49&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;50&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;51&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;52&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;53&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;54&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;55&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;56&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;57&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;meta&quot;&gt;#&lt;span class=&quot;meta-keyword&quot;&gt;include&lt;/span&gt; &lt;span class=&quot;meta-string&quot;&gt;&amp;lt;cstdio&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;meta&quot;&gt;#&lt;span class=&quot;meta-keyword&quot;&gt;include&lt;/span&gt; &lt;span class=&quot;meta-string&quot;&gt;&amp;lt;cstring&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;meta&quot;&gt;#&lt;span class=&quot;meta-keyword&quot;&gt;include&lt;/span&gt; &lt;span class=&quot;meta-string&quot;&gt;&amp;lt;algorithm&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;meta&quot;&gt;#&lt;span class=&quot;meta-keyword&quot;&gt;define&lt;/span&gt; ll long long&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;const&lt;/span&gt; ll N = &lt;span class=&quot;number&quot;&gt;100010&lt;/span&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;using&lt;/span&gt; &lt;span class=&quot;keyword&quot;&gt;namespace&lt;/span&gt; &lt;span class=&quot;built_in&quot;&gt;std&lt;/span&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;struct&lt;/span&gt; data&amp;#123;ll d,p,r,g;&amp;#125; a[N];&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;ll split[N],n,c,d,f[N],ans,top,Cas;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;pair &amp;lt;ll,ll&amp;gt; stk[N];&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;function&quot;&gt;ll &lt;span class=&quot;title&quot;&gt;read&lt;/span&gt;&lt;span class=&quot;params&quot;&gt;()&lt;/span&gt;&lt;/span&gt;&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	ll x = &lt;span class=&quot;number&quot;&gt;0&lt;/span&gt;,f = &lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;,c = getchar();&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;while&lt;/span&gt; (c&amp;lt;&lt;span class=&quot;string&quot;&gt;&#39;0&#39;&lt;/span&gt; || c&amp;gt;&lt;span class=&quot;string&quot;&gt;&#39;9&#39;&lt;/span&gt;) &amp;#123;&lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt; (c==&lt;span class=&quot;string&quot;&gt;&#39;-&#39;&lt;/span&gt;) f = &lt;span class=&quot;number&quot;&gt;-1&lt;/span&gt;;c = getchar();&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;while&lt;/span&gt; (c&amp;gt;=&lt;span class=&quot;string&quot;&gt;&#39;0&#39;&lt;/span&gt; &amp;amp;&amp;amp; c&amp;lt;=&lt;span class=&quot;string&quot;&gt;&#39;9&#39;&lt;/span&gt;) x = x*&lt;span class=&quot;number&quot;&gt;10&lt;/span&gt;+c-&lt;span class=&quot;string&quot;&gt;&#39;0&#39;&lt;/span&gt;,c = getchar();&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt; x*f;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;function&quot;&gt;ll &lt;span class=&quot;title&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;params&quot;&gt;(ll x)&lt;/span&gt; &lt;/span&gt;&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt; (!top) &lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;number&quot;&gt;-1&lt;/span&gt;ll&amp;lt;&amp;lt;&lt;span class=&quot;number&quot;&gt;60&lt;/span&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	ll l = &lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;,r = top&lt;span class=&quot;number&quot;&gt;-1&lt;/span&gt;,res = &lt;span class=&quot;number&quot;&gt;0&lt;/span&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt; (x&amp;lt;=split[l]) &lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt; stk[l].first*x+stk[l].second;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt; (x&amp;gt;=split[r]) &lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt; stk[r+&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;].first*x+stk[r+&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;].second;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;while&lt;/span&gt; (l+&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;&amp;lt;r)&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;		ll mid = (l+r)&amp;gt;&amp;gt;&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;		&lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt; (split[mid]&amp;lt;x) l = mid;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;		&lt;span class=&quot;keyword&quot;&gt;else&lt;/span&gt; r = mid;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt; stk[r].first*x+stk[r].second;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;function&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;bool&lt;/span&gt; &lt;span class=&quot;title&quot;&gt;cmp&lt;/span&gt;&lt;span class=&quot;params&quot;&gt;(data a,data b)&lt;/span&gt;&lt;/span&gt;&amp;#123;&lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt; a.g&amp;lt;b.g;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;function&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;double&lt;/span&gt; &lt;span class=&quot;title&quot;&gt;Cross&lt;/span&gt;&lt;span class=&quot;params&quot;&gt;(&lt;span class=&quot;keyword&quot;&gt;double&lt;/span&gt; k1,&lt;span class=&quot;keyword&quot;&gt;double&lt;/span&gt; b1,&lt;span class=&quot;keyword&quot;&gt;double&lt;/span&gt; k2,&lt;span class=&quot;keyword&quot;&gt;double&lt;/span&gt; b2)&lt;/span&gt; &lt;/span&gt;&amp;#123;&lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt; (b2-b1)/(k1-k2);&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;function&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;title&quot;&gt;Add&lt;/span&gt;&lt;span class=&quot;params&quot;&gt;(ll k,ll b)&lt;/span&gt;&lt;/span&gt;&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt; (top &amp;amp;&amp;amp; k==stk[top].first) &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;		&lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt; (b&amp;lt;=stk[top].second) &lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;		top--;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;while&lt;/span&gt; (top&amp;gt;&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt; &amp;amp;&amp;amp; Cross(stk[top&lt;span class=&quot;number&quot;&gt;-1&lt;/span&gt;].first,stk[top&lt;span class=&quot;number&quot;&gt;-1&lt;/span&gt;].second,k,b)&amp;lt;split[top&lt;span class=&quot;number&quot;&gt;-1&lt;/span&gt;]) top--;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt; (top) split[top] = Cross(stk[top].first,stk[top].second,k,b);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	stk[++top] = make_pair(k,b);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;function&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;title&quot;&gt;main&lt;/span&gt;&lt;span class=&quot;params&quot;&gt;()&lt;/span&gt;&lt;/span&gt;&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	freopen(&lt;span class=&quot;string&quot;&gt;&quot;works.in&quot;&lt;/span&gt;,&lt;span class=&quot;string&quot;&gt;&quot;r&quot;&lt;/span&gt;,&lt;span class=&quot;built_in&quot;&gt;stdin&lt;/span&gt;);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	freopen(&lt;span class=&quot;string&quot;&gt;&quot;works.out&quot;&lt;/span&gt;,&lt;span class=&quot;string&quot;&gt;&quot;w&quot;&lt;/span&gt;,&lt;span class=&quot;built_in&quot;&gt;stdout&lt;/span&gt;);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;for&lt;/span&gt; (;;) &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;		n = read();c = read();d = read();&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;		&lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt; (n+c+d==&lt;span class=&quot;number&quot;&gt;0&lt;/span&gt;) &lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;number&quot;&gt;0&lt;/span&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;		&lt;span class=&quot;keyword&quot;&gt;for&lt;/span&gt; (ll i=&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;;i&amp;lt;=n;i++) a[i].d = read(),a[i].p = read(),a[i].r = read(),a[i].g = read();&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;		ll ans = c;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;		sort(a+&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;,a+&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;+n,cmp);top = &lt;span class=&quot;number&quot;&gt;0&lt;/span&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;		&lt;span class=&quot;keyword&quot;&gt;for&lt;/span&gt; (ll i=&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;;i&amp;lt;=n;i++) &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;			f[i] = max(get(a[i].d),c)-a[i].p;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;			&lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt; (f[i]&amp;gt;=&lt;span class=&quot;number&quot;&gt;0&lt;/span&gt;) &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;				Add(a[i].g,f[i]+a[i].r-(a[i].d+&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;)*a[i].g);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;				ans = max(ans,f[i]+(d-a[i].d)*a[i].g+a[i].r);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;			&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;		&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;		&lt;span class=&quot;built_in&quot;&gt;printf&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&quot;Case %lld: %lld\n&quot;&lt;/span&gt;,++Cas,ans);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;hr&gt;
&lt;p&gt;下午的时候去做了一下货币交换..感觉差不多的题目就写在一起了..&lt;/p&gt;
&lt;h3 id=&quot;1492-NOI2007-货币兑换Cash&quot;&gt;&lt;a href=&quot;#1492-NOI2007-货币兑换Cash&quot; class=&quot;headerlink&quot; title=&quot;1492: [NOI2007]货币兑换Cash&quot;&gt;&lt;/a&gt;1492: [NOI2007]货币兑换Cash&lt;/h3&gt;&lt;p&gt;&lt;a href=&quot;http://www.lydsy.com/JudgeOnline/problem.php?id=1492&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;点击这里去虐题&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;这道题是和上面一题一起出现在课件里的…&lt;br&gt;我们先考虑N^2的DP..讲道理这个dp好想并不是很好想….&lt;br&gt;显然的我们可以得到一个性质,每一次兑换货币的时候一定是全部兑换的,不会出现题面中的一部分的情况,所以我们只要知道了其中一种金券的数量就可以计算出另一种金券的数量.设f[i]表示第i天可以获得的最大价值,然后可以得到一个DP方程$$f[i] = max(f[i-1],\frac {f[j]*rate[j]*a[i]+f[j]*b[i]}{rate[j]*a[j]+b[j]})$$,其中$\frac{f[j]*rate[j]}{rate[j]*a[j]+b[j]}$表示第j天最多可以有多少A金券,我们设他为X[j],同样的$Y[j]=\frac{f[j]*rate[j]}{rate[j]*a[j]+b[j]}$,然后我们对上面的方程进行化简.对于两种转移j比k优的条件是$$f[j]*rate[j]*a[i]+f[j]*b[i]&amp;gt;f[k]*rate[k]*a[i]+f[k]*b[i]$$移项后得到$$\frac{f[j]-f[k]}{rate[j]*f[j]-rate[k]*f[k]}&amp;gt;-\frac{a[i]}{b[i]}$$然后就和上一题类似,按照$-\frac{a[i]}{b[i]}$排序,然后用CDQ分治维护凸壳..&lt;br&gt;不过这道题和上一道题有一点区别是,因为是根据$-\frac{a[i]}{b[i]}$排序的所以时间关系是乱的,分治的时候还是要按照时间分治,然后分别保证两端里要单调&lt;/p&gt;
&lt;figure class=&quot;highlight c++&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;11&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;12&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;13&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;14&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;15&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;16&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;17&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;18&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;19&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;20&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;21&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;22&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;23&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;24&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;25&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;26&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;27&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;28&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;29&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;30&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;31&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;32&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;33&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;34&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;35&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;36&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;37&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;38&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;39&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;40&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;41&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;42&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;43&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;44&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;45&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;46&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;47&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;48&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;49&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;50&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;51&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;52&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;53&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;54&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;55&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;56&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;57&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;58&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;59&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;60&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;61&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;62&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;63&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;64&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;meta&quot;&gt;#&lt;span class=&quot;meta-keyword&quot;&gt;include&lt;/span&gt;&lt;span class=&quot;meta-string&quot;&gt;&amp;lt;cstdio&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;meta&quot;&gt;#&lt;span class=&quot;meta-keyword&quot;&gt;include&lt;/span&gt;&lt;span class=&quot;meta-string&quot;&gt;&amp;lt;algorithm&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;meta&quot;&gt;#&lt;span class=&quot;meta-keyword&quot;&gt;include&lt;/span&gt;&lt;span class=&quot;meta-string&quot;&gt;&amp;lt;cmath&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;meta&quot;&gt;#&lt;span class=&quot;meta-keyword&quot;&gt;include&lt;/span&gt;&lt;span class=&quot;meta-string&quot;&gt;&amp;lt;cstring&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;meta&quot;&gt;#&lt;span class=&quot;meta-keyword&quot;&gt;define&lt;/span&gt; N 120000&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;meta&quot;&gt;#&lt;span class=&quot;meta-keyword&quot;&gt;define&lt;/span&gt; eps 1e-9&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;meta&quot;&gt;#&lt;span class=&quot;meta-keyword&quot;&gt;define&lt;/span&gt; inf 1e9&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;using&lt;/span&gt; &lt;span class=&quot;keyword&quot;&gt;namespace&lt;/span&gt; &lt;span class=&quot;built_in&quot;&gt;std&lt;/span&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;struct&lt;/span&gt; query&amp;#123;&lt;span class=&quot;keyword&quot;&gt;double&lt;/span&gt; q,a,b,rate,k;&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; pos;&amp;#125;q[N],nq[N];&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;function&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;double&lt;/span&gt; &lt;span class=&quot;title&quot;&gt;fabs&lt;/span&gt;&lt;span class=&quot;params&quot;&gt;(&lt;span class=&quot;keyword&quot;&gt;double&lt;/span&gt; x)&lt;/span&gt;&lt;/span&gt;&amp;#123;&lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt; (x&amp;gt;&lt;span class=&quot;number&quot;&gt;0&lt;/span&gt;)?x:-x;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;struct&lt;/span&gt; point&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;double&lt;/span&gt; x,y;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;friend&lt;/span&gt; &lt;span class=&quot;keyword&quot;&gt;bool&lt;/span&gt; &lt;span class=&quot;keyword&quot;&gt;operator&lt;/span&gt; &amp;lt;(&lt;span class=&quot;keyword&quot;&gt;const&lt;/span&gt; point &amp;amp;a,&lt;span class=&quot;keyword&quot;&gt;const&lt;/span&gt; point &amp;amp;b) &amp;#123;	&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;		&lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt; (a.x&amp;lt;b.x+eps)||(&lt;span class=&quot;built_in&quot;&gt;fabs&lt;/span&gt;(a.x-b.x)&amp;lt;=eps&amp;amp;&amp;amp;a.y&amp;lt;b.y+eps);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;p[N],np[N];&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; st[N]; &lt;span class=&quot;keyword&quot;&gt;double&lt;/span&gt; f[N]; &lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; n,m;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;function&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;double&lt;/span&gt; &lt;span class=&quot;title&quot;&gt;getk&lt;/span&gt;&lt;span class=&quot;params&quot;&gt;(&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; i,&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; j)&lt;/span&gt;&lt;/span&gt;&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt; (i==&lt;span class=&quot;number&quot;&gt;0&lt;/span&gt;) &lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt; -inf;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt; (j==&lt;span class=&quot;number&quot;&gt;0&lt;/span&gt;) &lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt; inf;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt; (&lt;span class=&quot;built_in&quot;&gt;fabs&lt;/span&gt;(p[i].x-p[j].x)&amp;lt;=eps) &lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt; -inf;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt; (p[i].y-p[j].y)/(p[i].x-p[j].x);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;function&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;title&quot;&gt;solve&lt;/span&gt;&lt;span class=&quot;params&quot;&gt;(&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; l,&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; r)&lt;/span&gt;&lt;/span&gt;&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt; (l==r)&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;		f[l]=max(f[l&lt;span class=&quot;number&quot;&gt;-1&lt;/span&gt;],f[l]);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;		p[l].y=f[l]/(q[l].a*q[l].rate+q[l].b);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;		p[l].x=p[l].y*q[l].rate;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;		&lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt; ;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; mid=(l+r)&amp;gt;&amp;gt;&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;,l1=l,l2=mid+&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;for&lt;/span&gt; (&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; i=l;i&amp;lt;=r;i++)&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;		&lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt; (q[i].pos&amp;lt;=mid) nq[l1++]=q[i];&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;		&lt;span class=&quot;keyword&quot;&gt;else&lt;/span&gt; nq[l2++]=q[i];&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;for&lt;/span&gt; (&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; i=l;i&amp;lt;=r;i++) q[i]=nq[i];&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	solve(l,mid);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; top=&lt;span class=&quot;number&quot;&gt;0&lt;/span&gt;,j = &lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;for&lt;/span&gt; (&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; i=l;i&amp;lt;=mid;i++)&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;		&lt;span class=&quot;keyword&quot;&gt;while&lt;/span&gt; (top&amp;gt;=&lt;span class=&quot;number&quot;&gt;2&lt;/span&gt;&amp;amp;&amp;amp;getk(i,st[top])+eps&amp;gt;getk(st[top],st[top&lt;span class=&quot;number&quot;&gt;-1&lt;/span&gt;])) top--;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;		st[++top]=i;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;for&lt;/span&gt; (&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; i=r;i&amp;gt;=mid+&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;;i--)&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;		&lt;span class=&quot;keyword&quot;&gt;while&lt;/span&gt; (j&amp;lt;top&amp;amp;&amp;amp;q[i].k&amp;lt;getk(st[j],st[j+&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;])+eps) j++;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;		f[q[i].pos]=max(f[q[i].pos],p[st[j]].x*q[i].a+p[st[j]].y*q[i].b);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	solve(mid+&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;,r);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	l1=l,l2=mid+&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;for&lt;/span&gt; (&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; i=l;i&amp;lt;=r;i++)&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;		&lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt; ((p[l1]&amp;lt;p[l2]||l2&amp;gt;r)&amp;amp;&amp;amp;l1&amp;lt;=mid) np[i]=p[l1++];&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;		&lt;span class=&quot;keyword&quot;&gt;else&lt;/span&gt; np[i]=p[l2++];&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;for&lt;/span&gt; (&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; i=l;i&amp;lt;=r;i++) p[i]=np[i];&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;function&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;bool&lt;/span&gt; &lt;span class=&quot;title&quot;&gt;cmp&lt;/span&gt;&lt;span class=&quot;params&quot;&gt;(query a,query b)&lt;/span&gt;&lt;/span&gt;&amp;#123;&lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt; a.k&amp;lt;b.k;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;function&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;title&quot;&gt;main&lt;/span&gt;&lt;span class=&quot;params&quot;&gt;()&lt;/span&gt;&lt;/span&gt;&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;built_in&quot;&gt;scanf&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&quot;%d%lf&quot;&lt;/span&gt;,&amp;amp;n,&amp;amp;f[&lt;span class=&quot;number&quot;&gt;0&lt;/span&gt;]);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;for&lt;/span&gt; (&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; i=&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;;i&amp;lt;=n;i++) &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;		&lt;span class=&quot;built_in&quot;&gt;scanf&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&quot;%lf%lf%lf&quot;&lt;/span&gt;,&amp;amp;q[i].a,&amp;amp;q[i].b,&amp;amp;q[i].rate);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;		q[i].k=-q[i].a/q[i].b;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;		q[i].pos=i;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	sort(q+&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;,q+n+&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;,cmp);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	solve(&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;,n);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;built_in&quot;&gt;printf&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&quot;%.3lf\n&quot;&lt;/span&gt;,f[n]);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;hr&gt;
&lt;p&gt;有错误请指出$$\mathcal {FIN}$$&lt;/p&gt;
</content>
    
    <summary type="html">
    
      &lt;p&gt;为什么会想到写这么一篇文章呢。。。&lt;br&gt;&lt;del&gt;我怎么知道为什么!!&lt;/del&gt;&lt;br&gt;
    
    </summary>
    
      <category term="笔记" scheme="http://yoursite.com/categories/%E7%AC%94%E8%AE%B0/"/>
    
    
      <category term="笔记" scheme="http://yoursite.com/tags/%E7%AC%94%E8%AE%B0/"/>
    
      <category term="题解" scheme="http://yoursite.com/tags/%E9%A2%98%E8%A7%A3/"/>
    
      <category term="CDQ" scheme="http://yoursite.com/tags/CDQ/"/>
    
  </entry>
  
  <entry>
    <title>From 温暖的二月 to 寒冷的三月</title>
    <link href="http://yoursite.com/2016/03/15/From-%E6%B8%A9%E6%9A%96%E7%9A%84%E4%BA%8C%E6%9C%88-to-%E5%AF%92%E5%86%B7%E7%9A%84%E4%B8%89%E6%9C%88/"/>
    <id>http://yoursite.com/2016/03/15/From-温暖的二月-to-寒冷的三月/</id>
    <published>2016-03-14T23:40:34.000Z</published>
    <updated>2016-03-20T03:24:28.000Z</updated>
    
    <content type="html">&lt;p&gt;其实这个标题和内容并没有任何关系，我只是不知到应该取一个什么样子的题目而已。&lt;/p&gt;
&lt;a id=&quot;more&quot;&gt;&lt;/a&gt;
&lt;embed src=&quot;http://music.163.com/style/swf/widget.swf?sid=32364950&amp;type=2&amp;auto=0&amp;width=320&amp;height=66&quot; width=&quot;340&quot; height=&quot;86&quot; allownetworking=&quot;all&quot;&gt;

&lt;p&gt;然而今年的天气我真的忍不住要吐槽一下，尼玛这是一个星期体验四季啊，上上星期一的时候风和日丽，气温一度飙升到30来度，让人感觉夏天都要到了。然后第二天气温瞬间下降，三天后回到零度。&lt;br&gt;&lt;del&gt;这感觉就是刚准备好过暑假然后寒假到了。。&lt;/del&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;好像有点偏题了，诶我这篇博文主题是什么来着&lt;em&gt;(:з」∠)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;好吧既然是$From$二月，那先回忆一下我二月底到三月初都干了些什么逗比的事情。。。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;在笔记本上装了Ubuntu，然后就入坑了，开始乱搞我的系统，感觉我已经深深爱上了Ubuntu，要不是这里装不上hexo我才不回windows呢。。&lt;/li&gt;
&lt;li&gt;学习了一下gdb调试，感觉用gdb调代码还是比较舒服的，至少不!会!!崩!!!&lt;/li&gt;
&lt;li&gt;看了一下vim编辑器，这个好像是装逼专用的 &lt;del&gt;好吧都是装逼用的&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;最近入坑用github提供的支持搭了一个静态博客,不要问我为什么不是动态博客，我太傻了，并不能搞懂数据库什么高端的东西。。&lt;/li&gt;
&lt;li&gt;为了搭博客看了看html语言和js什么的。。&lt;/li&gt;
&lt;li&gt;学了用来写文章的MarkDown,感觉MarkDown真的好厉害，语法简单还支持一堆奇怪的东西&lt;/li&gt;
&lt;li&gt;刷水题刷水题刷水题&lt;/li&gt;
&lt;li&gt;好像别的奇怪的事情就没了吧&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;感觉我好像干了好多无聊的事情。。&lt;em&gt;(:з」∠)&lt;/em&gt;&lt;br&gt;一直从二月浪到现在也是爽爽哒。。然而再这么下去人生就没有希望了吧。。&lt;em&gt;(:з」∠)&lt;/em&gt;马上也要回去文化课的深渊了&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;简单整理一下吧，在今年省选二试结束前要学完的东西&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;字符串相关的东西（后缀自动机。。反正还有一堆东西）&lt;/li&gt;
&lt;li&gt;一堆和数学有关的东西&lt;ul&gt;
&lt;li&gt;FFT&lt;/li&gt;
&lt;li&gt;高斯消元，拉格朗日插值&lt;/li&gt;
&lt;li&gt;数论函数，生成函数（原来的皮毛也应该忘的差不多了吧）&lt;/li&gt;
&lt;li&gt;线性代数&lt;/li&gt;
&lt;li&gt;单纯形&lt;/li&gt;
&lt;li&gt;微积分。。。感觉是学不会的&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;数据结构一块&lt;ul&gt;
&lt;li&gt;KD$-$tree&lt;/li&gt;
&lt;li&gt;主席树好像忘得差不多了吧&lt;/li&gt;
&lt;li&gt;替罪羊树和SBT有时间去学一下&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;置换群&lt;/li&gt;
&lt;li&gt;然后再去看看一些国家队论文，补一下冬令营的课件什么的&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;还有好多东西不会啊，不能再颓下去了呀&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;三月已经过半了，停课的时间也越来越少了&lt;br&gt;文化课的寒风和$OI$的暴雪夹杂在一起会发生什么呢&lt;br&gt;不要让自己失望啊&lt;/p&gt;
&lt;h4 id=&quot;有你们的陪伴和-Aimer-的歌声我不会输&quot;&gt;&lt;a href=&quot;#有你们的陪伴和-Aimer-的歌声我不会输&quot; class=&quot;headerlink&quot; title=&quot;有你们的陪伴和$Aimer$的歌声我不会输&quot;&gt;&lt;/a&gt;&lt;strong&gt;有你们的陪伴和$Aimer$的歌声我不会输&lt;/strong&gt;&lt;/h4&gt;</content>
    
    <summary type="html">
    
      &lt;p&gt;其实这个标题和内容并没有任何关系，我只是不知到应该取一个什么样子的题目而已。&lt;/p&gt;
    
    </summary>
    
      <category term="杂文" scheme="http://yoursite.com/categories/%E6%9D%82%E6%96%87/"/>
    
    
      <category term="杂文" scheme="http://yoursite.com/tags/%E6%9D%82%E6%96%87/"/>
    
      <category term="总结规划" scheme="http://yoursite.com/tags/%E6%80%BB%E7%BB%93%E8%A7%84%E5%88%92/"/>
    
      <category term="不定时发癫" scheme="http://yoursite.com/tags/%E4%B8%8D%E5%AE%9A%E6%97%B6%E5%8F%91%E7%99%AB/"/>
    
  </entry>
  
  <entry>
    <title>教练，我要刷水题</title>
    <link href="http://yoursite.com/2016/03/15/%E6%95%99%E7%BB%83%EF%BC%8C%E6%88%91%E8%A6%81%E5%88%B7%E6%B0%B4%E9%A2%98/"/>
    <id>http://yoursite.com/2016/03/15/教练，我要刷水题/</id>
    <published>2016-03-14T23:10:40.000Z</published>
    <updated>2016-04-04T11:36:58.065Z</updated>
    
    <content type="html">&lt;p&gt;听说HAOI有洪水，像我这种蒟蒻最喜欢了，于是最近就开始刷HAOI了。。。&lt;/p&gt;
&lt;a id=&quot;more&quot;&gt;&lt;/a&gt;
&lt;h2 id=&quot;&quot;&gt;&lt;a href=&quot;#&quot; class=&quot;headerlink&quot; title=&quot;&quot;&gt;&lt;/a&gt;&lt;embed src=&quot;http://music.163.com/style/swf/widget.swf?sid=405998839&amp;type=2&amp;auto=0&amp;width=320&amp;height=66&quot; width=&quot;340&quot; height=&quot;86&quot; allownetworking=&quot;all&quot;&gt;&lt;/h2&gt;&lt;h3 id=&quot;BZOJ1044-木棍分割&quot;&gt;&lt;a href=&quot;#BZOJ1044-木棍分割&quot; class=&quot;headerlink&quot; title=&quot;BZOJ1044 木棍分割&quot;&gt;&lt;/a&gt;BZOJ1044 木棍分割&lt;/h3&gt;&lt;p&gt;&lt;a href=&quot;http://www.lydsy.com/JudgeOnline/problem.php?id=1044&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;点这里去虐题&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;妈的用MarkDown贴题面真TM蛋碎&lt;br&gt;据说支持内嵌html然后我把html贴上去之前的内容就华丽丽地消失了&lt;em&gt;(:з」∠)&lt;/em&gt;&lt;br&gt;或者说是我这个编辑器的锅吗，我还是选择稳妥的不贴题面了&lt;br&gt;好,停止吐槽&lt;/p&gt;
&lt;p&gt;说起来这道题原来是我给初三讲课里面的题目&lt;br&gt;原来一直懒得去做，现在趁着刷水一起做了&lt;/p&gt;
&lt;p&gt;对于第一问，感觉应该可以算是很经典的问题了，二分长度，然后贪心验证就好了&lt;br&gt;然后对于第二问，我们可以很容易地想到一个O(NM)复杂的Dp，用f[i][j]表示前j个木棍分成i段的方案数，然后就可以得到 $$f[i][j]=\sum^{k&amp;lt;j}_{k=0} f[i-1][k] (sum[j]-sum[k]&amp;lt;=len)$$ 我们可以显然的发现，这个是会华丽丽地T掉的。但是我们可以发现对与递增的j，k的位置也是递增的，所以我们可以使用队列优化DP。&lt;br&gt;然后因为空间问题，还要对第一维滚存&lt;br&gt;不过具体的复杂度我并不会证，可能还是不对的。但是至少还是过去了。。&lt;em&gt;(:з」∠)&lt;/em&gt;&lt;br&gt;&lt;del&gt;今天晚上听见初三爷在纠结滚存怎么滚，感觉我的作业是不是太凶残了&lt;/del&gt;&lt;/p&gt;
&lt;figure class=&quot;highlight c++&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;11&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;12&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;13&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;14&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;15&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;16&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;17&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;18&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;19&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;20&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;21&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;22&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;23&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;24&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;25&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;26&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;27&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;28&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;29&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;30&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;31&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;32&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;33&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;34&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;35&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;36&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;37&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;38&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;39&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;40&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;41&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;42&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;43&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;44&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;45&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;meta&quot;&gt;#&lt;span class=&quot;meta-keyword&quot;&gt;include&lt;/span&gt; &lt;span class=&quot;meta-string&quot;&gt;&amp;lt;cstdio&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;meta&quot;&gt;#&lt;span class=&quot;meta-keyword&quot;&gt;include&lt;/span&gt; &lt;span class=&quot;meta-string&quot;&gt;&amp;lt;cstring&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;meta&quot;&gt;#&lt;span class=&quot;meta-keyword&quot;&gt;include&lt;/span&gt; &lt;span class=&quot;meta-string&quot;&gt;&amp;lt;algorithm&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; mod = &lt;span class=&quot;number&quot;&gt;10007&lt;/span&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; N = &lt;span class=&quot;number&quot;&gt;500010&lt;/span&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;using&lt;/span&gt; &lt;span class=&quot;keyword&quot;&gt;namespace&lt;/span&gt; &lt;span class=&quot;built_in&quot;&gt;std&lt;/span&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; a[N],f[&lt;span class=&quot;number&quot;&gt;2&lt;/span&gt;][N],sum[N],q[N],tot,n,ans2,m;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;function&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;title&quot;&gt;read&lt;/span&gt;&lt;span class=&quot;params&quot;&gt;()&lt;/span&gt;&lt;/span&gt;&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; x = &lt;span class=&quot;number&quot;&gt;0&lt;/span&gt;,f = &lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;,c = getchar();&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;while&lt;/span&gt; (c&amp;lt;&lt;span class=&quot;string&quot;&gt;&#39;0&#39;&lt;/span&gt; || c&amp;gt;&lt;span class=&quot;string&quot;&gt;&#39;9&#39;&lt;/span&gt;) &amp;#123;&lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt; (c==&lt;span class=&quot;string&quot;&gt;&#39;-&#39;&lt;/span&gt;) f = &lt;span class=&quot;number&quot;&gt;-1&lt;/span&gt;;c = getchar();&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;while&lt;/span&gt; (c&amp;gt;=&lt;span class=&quot;string&quot;&gt;&#39;0&#39;&lt;/span&gt; &amp;amp;&amp;amp; c&amp;lt;=&lt;span class=&quot;string&quot;&gt;&#39;9&#39;&lt;/span&gt;) x = x*&lt;span class=&quot;number&quot;&gt;10&lt;/span&gt;+c-&lt;span class=&quot;string&quot;&gt;&#39;0&#39;&lt;/span&gt;,c = getchar();&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt; x*f;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;function&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;title&quot;&gt;Judge&lt;/span&gt;&lt;span class=&quot;params&quot;&gt;(&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; x)&lt;/span&gt;&lt;/span&gt;&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; res = &lt;span class=&quot;number&quot;&gt;0&lt;/span&gt;,s = &lt;span class=&quot;number&quot;&gt;0&lt;/span&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;for&lt;/span&gt; (&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; i=&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;;i&amp;lt;=n;i++) &amp;#123;s+=a[i];&lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt; (s&amp;gt;x) &amp;#123;res++;s = a[i];&amp;#125;&lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt; (res&amp;gt;m) &lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;number&quot;&gt;0&lt;/span&gt;;&lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt; (a[i]&amp;gt;x) &lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;number&quot;&gt;0&lt;/span&gt;;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;function&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;title&quot;&gt;main&lt;/span&gt;&lt;span class=&quot;params&quot;&gt;()&lt;/span&gt;&lt;/span&gt;&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	n = read();m = read();&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;for&lt;/span&gt; (&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; i=&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;;i&amp;lt;=n;i++) &amp;#123;a[i] = read();sum[i] = sum[i&lt;span class=&quot;number&quot;&gt;-1&lt;/span&gt;]+a[i];&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; l = &lt;span class=&quot;number&quot;&gt;0&lt;/span&gt;,r = sum[n],Ans = &lt;span class=&quot;number&quot;&gt;0&lt;/span&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;while&lt;/span&gt; (l&amp;lt;=r) &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;		&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; mid = (l+r)&amp;gt;&amp;gt;&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;		&lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt; (Judge(mid)) &amp;#123;Ans = mid;r = mid&lt;span class=&quot;number&quot;&gt;-1&lt;/span&gt;;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;		&lt;span class=&quot;keyword&quot;&gt;else&lt;/span&gt; l = mid+&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;built_in&quot;&gt;printf&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&quot;%d &quot;&lt;/span&gt;,Ans);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	f[&lt;span class=&quot;number&quot;&gt;0&lt;/span&gt;][&lt;span class=&quot;number&quot;&gt;0&lt;/span&gt;] = &lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;for&lt;/span&gt; (&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; i=&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;;i&amp;lt;=m;i++) &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;		&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; pre = i&amp;amp;&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;,cur = pre^&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;		&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; l = &lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;,r = &lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;;q[&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;] = &lt;span class=&quot;number&quot;&gt;0&lt;/span&gt;;tot = f[cur][&lt;span class=&quot;number&quot;&gt;0&lt;/span&gt;];&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;		&lt;span class=&quot;keyword&quot;&gt;for&lt;/span&gt; (&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; j=&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;;j&amp;lt;=n;j++) &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;			&lt;span class=&quot;keyword&quot;&gt;while&lt;/span&gt; (l&amp;lt;=r &amp;amp;&amp;amp; sum[j]-sum[q[l]]&amp;gt;Ans) tot = (tot-f[cur][q[l++]]+mod)%mod;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;			f[pre][j] = tot;q[++r] = j;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;			tot = (tot+f[cur][j])%mod;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;		&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;		&lt;span class=&quot;keyword&quot;&gt;for&lt;/span&gt; (&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; j=n&lt;span class=&quot;number&quot;&gt;-1&lt;/span&gt;;j;j--) &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;			&lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt; (sum[n]-sum[j]&amp;gt;Ans) &lt;span class=&quot;keyword&quot;&gt;break&lt;/span&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;			ans2 = (ans2+f[pre][j])%mod;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;		&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;		&lt;span class=&quot;built_in&quot;&gt;memset&lt;/span&gt;(f[cur],&lt;span class=&quot;number&quot;&gt;0&lt;/span&gt;,&lt;span class=&quot;keyword&quot;&gt;sizeof&lt;/span&gt;(f[cur]));&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;built_in&quot;&gt;printf&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&quot;%d\n&quot;&lt;/span&gt;,ans2);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;hr&gt;
&lt;h3 id=&quot;BZOJ1043-下落的圆盘&quot;&gt;&lt;a href=&quot;#BZOJ1043-下落的圆盘&quot; class=&quot;headerlink&quot; title=&quot;BZOJ1043 下落的圆盘&quot;&gt;&lt;/a&gt;BZOJ1043 下落的圆盘&lt;/h3&gt;&lt;p&gt;&lt;a href=&quot;http://www.lydsy.com/JudgeOnline/problem.php?id=1043&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;点击这里去虐题&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;一道计算几何的题目&lt;br&gt;上次做计算几何是什么时候来着&lt;em&gt;(:з」∠)&lt;/em&gt;应该已经是好几个月以前的事情了吧。。&lt;br&gt;我们观察数据范围可以知道&lt;/p&gt;
&lt;h5 id=&quot;这是一个很裸很裸的暴力&quot;&gt;&lt;a href=&quot;#这是一个很裸很裸的暴力&quot; class=&quot;headerlink&quot; title=&quot;这是一个很裸很裸的暴力&quot;&gt;&lt;/a&gt;&lt;strong&gt;这是一个很裸很裸的暴力&lt;/strong&gt;&lt;/h5&gt;&lt;p&gt;因为n只有1000所以直接$N^2$，对每一个圆盘暴力枚举每一个在它上方的圆盘，然后求出被遮盖的弧长&lt;br&gt;&lt;img src=&quot;/img/20160315_1.png&quot; alt=&quot;2016031_1.png&quot;&gt;&lt;br&gt;对于两个相交的圆，我们可以知道他们的半径和圆心之间的距离。然后就可以很轻易的使用反三角函数求出图中的$\angle EAC$。然后再求出直线$AC$的极角，就可以表示出被遮盖的位置。因为这样求出来的弧度可能是负数，所以需要把它转换到$[0,2\pi]$的范围内。然后就简单地统计一下就好了。&lt;br&gt;复杂度: $O(N^2)$&lt;/p&gt;
&lt;figure class=&quot;highlight cpp&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;11&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;12&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;13&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;14&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;15&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;16&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;17&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;18&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;19&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;20&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;21&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;22&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;23&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;24&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;25&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;26&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;27&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;28&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;29&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;30&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;31&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;32&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;33&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;34&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;35&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;36&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;37&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;38&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;39&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;40&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;41&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;42&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;43&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;44&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;45&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;meta&quot;&gt;#&lt;span class=&quot;meta-keyword&quot;&gt;include&lt;/span&gt; &lt;span class=&quot;meta-string&quot;&gt;&amp;lt;cmath&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;meta&quot;&gt;#&lt;span class=&quot;meta-keyword&quot;&gt;include&lt;/span&gt; &lt;span class=&quot;meta-string&quot;&gt;&amp;lt;cstdio&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;meta&quot;&gt;#&lt;span class=&quot;meta-keyword&quot;&gt;include&lt;/span&gt; &lt;span class=&quot;meta-string&quot;&gt;&amp;lt;cstring&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;meta&quot;&gt;#&lt;span class=&quot;meta-keyword&quot;&gt;include&lt;/span&gt; &lt;span class=&quot;meta-string&quot;&gt;&amp;lt;algorithm&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; N = &lt;span class=&quot;number&quot;&gt;1010&lt;/span&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;using&lt;/span&gt; &lt;span class=&quot;keyword&quot;&gt;namespace&lt;/span&gt; &lt;span class=&quot;built_in&quot;&gt;std&lt;/span&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;double&lt;/span&gt; r[N],x[N],y[N],ans,pi;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; n,top;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;struct&lt;/span&gt; Line &amp;#123;&lt;span class=&quot;keyword&quot;&gt;double&lt;/span&gt; l,r;&amp;#125; q[N];&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;function&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;bool&lt;/span&gt; &lt;span class=&quot;title&quot;&gt;cmp&lt;/span&gt;&lt;span class=&quot;params&quot;&gt;(Line a,Line b)&lt;/span&gt;&lt;/span&gt;&amp;#123;&lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt; a.l&amp;lt;b.l;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;function&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;double&lt;/span&gt; &lt;span class=&quot;title&quot;&gt;dis&lt;/span&gt;&lt;span class=&quot;params&quot;&gt;(&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; a,&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; b)&lt;/span&gt;&lt;/span&gt;&amp;#123;&lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;built_in&quot;&gt;sqrt&lt;/span&gt;((x[a]-x[b])*(x[a]-x[b])+(y[a]-y[b])*(y[a]-y[b]));&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;function&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;title&quot;&gt;Cover&lt;/span&gt;&lt;span class=&quot;params&quot;&gt;(&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; a,&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; b)&lt;/span&gt; &lt;/span&gt;&amp;#123;&lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt; (r[a]&amp;gt;=r[b]+dis(a,b)) &lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;;&lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;number&quot;&gt;0&lt;/span&gt;;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;function&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;title&quot;&gt;Work&lt;/span&gt;&lt;span class=&quot;params&quot;&gt;(&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; a,&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; b)&lt;/span&gt;&lt;/span&gt;&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;double&lt;/span&gt; d = dis(a,b);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;double&lt;/span&gt; t = (r[a]*r[a]-r[b]*r[b]+d*d)/(&lt;span class=&quot;number&quot;&gt;2&lt;/span&gt;*d);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;double&lt;/span&gt; st = &lt;span class=&quot;built_in&quot;&gt;atan2&lt;/span&gt;((x[a]-x[b]),(y[a]-y[b]));&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;double&lt;/span&gt; l = &lt;span class=&quot;built_in&quot;&gt;acos&lt;/span&gt;(t/r[a]);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	q[++top] = (Line)&amp;#123;st-l,st+l&amp;#125;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;function&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;double&lt;/span&gt; &lt;span class=&quot;title&quot;&gt;calc&lt;/span&gt;&lt;span class=&quot;params&quot;&gt;(&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; x)&lt;/span&gt;&lt;/span&gt;&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;for&lt;/span&gt; (&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; i=x+&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;;i&amp;lt;=n;i++) &lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt; (Cover(i,x)) &lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;number&quot;&gt;0&lt;/span&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	top = &lt;span class=&quot;number&quot;&gt;0&lt;/span&gt;;&lt;span class=&quot;keyword&quot;&gt;double&lt;/span&gt; tmp = &lt;span class=&quot;number&quot;&gt;0&lt;/span&gt;,now = &lt;span class=&quot;number&quot;&gt;0&lt;/span&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;for&lt;/span&gt; (&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; i=x+&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;;i&amp;lt;=n;i++)&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;		&lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt; (!Cover(x,i) &amp;amp;&amp;amp; r[i]+r[x]&amp;gt;dis(i,x)) Work(x,i);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;for&lt;/span&gt; (&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; i=&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;;i&amp;lt;=top;i++) &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;		&lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt; (q[i].l&amp;lt;&lt;span class=&quot;number&quot;&gt;0&lt;/span&gt;) q[i].l+=&lt;span class=&quot;number&quot;&gt;2&lt;/span&gt;*pi;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;		&lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt; (q[i].r&amp;lt;&lt;span class=&quot;number&quot;&gt;0&lt;/span&gt;) q[i].r+=&lt;span class=&quot;number&quot;&gt;2&lt;/span&gt;*pi;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;		&lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt; (q[i].l&amp;gt;q[i].r) &amp;#123;q[++top] = (Line)&amp;#123;&lt;span class=&quot;number&quot;&gt;0&lt;/span&gt;,q[i].r&amp;#125;;q[i].r = &lt;span class=&quot;number&quot;&gt;2&lt;/span&gt;*pi;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	sort(q+&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;,q+&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;+top,cmp);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;for&lt;/span&gt; (&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; i=&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;;i&amp;lt;=top;i++) &lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;		&lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt; (q[i].l&amp;gt;now) &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;			tmp+=q[i].l-now;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;			now = q[i].r;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;		&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;		&lt;span class=&quot;keyword&quot;&gt;else&lt;/span&gt; now = max(now,q[i].r);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	tmp+=&lt;span class=&quot;number&quot;&gt;2&lt;/span&gt;*pi-now;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt; r[x]*tmp;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;function&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;title&quot;&gt;main&lt;/span&gt;&lt;span class=&quot;params&quot;&gt;()&lt;/span&gt;&lt;/span&gt;&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;built_in&quot;&gt;scanf&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&quot;%d&quot;&lt;/span&gt;,&amp;amp;n);pi = &lt;span class=&quot;built_in&quot;&gt;acos&lt;/span&gt;(&lt;span class=&quot;number&quot;&gt;-1&lt;/span&gt;);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;for&lt;/span&gt; (&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; i=&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;;i&amp;lt;=n;i++) &lt;span class=&quot;built_in&quot;&gt;scanf&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&quot;%lf%lf%lf&quot;&lt;/span&gt;,&amp;amp;r[i],&amp;amp;x[i],&amp;amp;y[i]);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;for&lt;/span&gt; (&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; i=&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;;i&amp;lt;=n;i++) ans+=calc(i);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;built_in&quot;&gt;printf&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&quot;%.3lf\n&quot;&lt;/span&gt;,ans);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;hr&gt;
&lt;h3 id=&quot;BZOJ1049-数字序列&quot;&gt;&lt;a href=&quot;#BZOJ1049-数字序列&quot; class=&quot;headerlink&quot; title=&quot;BZOJ1049 数字序列&quot;&gt;&lt;/a&gt;BZOJ1049 数字序列&lt;/h3&gt;&lt;p&gt;&lt;a href=&quot;http://www.lydsy.com/JudgeOnline/problem.php?id=1049&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;点击这里去虐题&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;感觉有点厉害的一道题，诶其实只是我弱&lt;em&gt;(:з」∠)&lt;/em&gt;&lt;br&gt;对于第一问，要求最小化改变的数量，可以转化成最大化不变的数量。然后我们考虑对与这个进行DP，设f[i]表示i位置不变的最大不变数量，然后可以得到一个的DP方程$$f[i] = Max f[j]+1 (a[i]-a[j]&amp;gt;=i-j)$$后面的限制条件是因为要满足递增。&lt;br&gt;然后我们将a[i]-a[j]&amp;gt;=i-j移项得到a[i]-i&amp;gt;=a[j]-j可以发现原问题就转化为了对a[i]-i数组求最长不下降子序列。直接写一个$O(N\log_2N)$的模板上去就好了&lt;/p&gt;
&lt;p&gt;然后对与第二问。。&lt;br&gt;在满足第一问的前提下的最小改变量，考虑那一些位置可以转移到i，然后就会得到一个DP方程$$g[i] = Min g[j]+w[i][j] (f[j]+1=f[i]) $$其中w[i][j]表示把i到j这一段改成符合条件的最小代价。&lt;br&gt;然后对此有一个性质，w[i][j]的方案一定会以某一个k分界，使得[j,k]之间的均为b[j],[k+1,i]之间的均为b[i]，证明嘛。。。&lt;/p&gt;
&lt;h5 id=&quot;我不会！别问我！！&quot;&gt;&lt;a href=&quot;#我不会！别问我！！&quot; class=&quot;headerlink&quot; title=&quot;我不会！别问我！！&quot;&gt;&lt;/a&gt;&lt;strong&gt;我不会！别问我！！&lt;/strong&gt;&lt;/h5&gt;&lt;p&gt;还是直接贴神犇的证明吧&lt;br&gt;&lt;img src=&quot;/img/20160315_2.png&quot; alt=&quot;20150315_2.png&quot;&gt;&lt;/p&gt;
&lt;figure class=&quot;highlight cpp&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;11&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;12&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;13&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;14&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;15&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;16&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;17&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;18&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;19&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;20&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;21&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;22&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;23&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;24&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;25&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;26&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;27&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;28&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;29&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;30&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;31&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;32&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;33&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;34&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;35&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;36&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;37&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;38&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;39&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;40&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;41&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;42&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;43&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;44&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;45&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;46&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;47&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;48&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;49&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;50&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;51&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;52&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;53&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;54&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;55&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;56&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;meta&quot;&gt;#&lt;span class=&quot;meta-keyword&quot;&gt;include&lt;/span&gt; &lt;span class=&quot;meta-string&quot;&gt;&amp;lt;cstdio&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;meta&quot;&gt;#&lt;span class=&quot;meta-keyword&quot;&gt;include&lt;/span&gt; &lt;span class=&quot;meta-string&quot;&gt;&amp;lt;cstring&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;meta&quot;&gt;#&lt;span class=&quot;meta-keyword&quot;&gt;include&lt;/span&gt; &lt;span class=&quot;meta-string&quot;&gt;&amp;lt;algorithm&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; N = &lt;span class=&quot;number&quot;&gt;40000&lt;/span&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;using&lt;/span&gt; &lt;span class=&quot;keyword&quot;&gt;namespace&lt;/span&gt; &lt;span class=&quot;built_in&quot;&gt;std&lt;/span&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;long&lt;/span&gt; &lt;span class=&quot;keyword&quot;&gt;long&lt;/span&gt; g[N],s1[N],s2[N];&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; f[N],Min[N],head[N],a[N],n,cnt,L;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;function&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;title&quot;&gt;read&lt;/span&gt;&lt;span class=&quot;params&quot;&gt;()&lt;/span&gt;&lt;/span&gt;&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; x = &lt;span class=&quot;number&quot;&gt;0&lt;/span&gt;,f = &lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;,c = getchar();&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;while&lt;/span&gt; (c&amp;lt;&lt;span class=&quot;string&quot;&gt;&#39;0&#39;&lt;/span&gt; || c&amp;gt;&lt;span class=&quot;string&quot;&gt;&#39;9&#39;&lt;/span&gt;) &amp;#123;&lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt; (c==&lt;span class=&quot;string&quot;&gt;&#39;-&#39;&lt;/span&gt;) f = &lt;span class=&quot;number&quot;&gt;-1&lt;/span&gt;;c = getchar();&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;while&lt;/span&gt; (c&amp;gt;=&lt;span class=&quot;string&quot;&gt;&#39;0&#39;&lt;/span&gt; &amp;amp;&amp;amp; c&amp;lt;=&lt;span class=&quot;string&quot;&gt;&#39;9&#39;&lt;/span&gt;) x = x*&lt;span class=&quot;number&quot;&gt;10&lt;/span&gt;+c-&lt;span class=&quot;string&quot;&gt;&#39;0&#39;&lt;/span&gt;,c = getchar();&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt; x*f;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;struct&lt;/span&gt; data&amp;#123;&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; x,y,next;&amp;#125; e[N];&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;function&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;title&quot;&gt;Insert&lt;/span&gt;&lt;span class=&quot;params&quot;&gt;(&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; x,&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; y)&lt;/span&gt;&lt;/span&gt;&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	e[++cnt].x = x;e[cnt].y = y;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	e[cnt].next = head[x];head[x] = cnt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;function&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;title&quot;&gt;find&lt;/span&gt;&lt;span class=&quot;params&quot;&gt;(&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; x)&lt;/span&gt;&lt;/span&gt;&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; l = &lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;,r = L,res = &lt;span class=&quot;number&quot;&gt;0&lt;/span&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;while&lt;/span&gt; (l&amp;lt;=r) &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;		&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; mid = (l+r)&amp;gt;&amp;gt;&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;		&lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt; (Min[mid]&amp;lt;=x) &amp;#123;res = mid;l = mid+&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;		&lt;span class=&quot;keyword&quot;&gt;else&lt;/span&gt; r = mid&lt;span class=&quot;number&quot;&gt;-1&lt;/span&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;return&lt;/span&gt; res;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;function&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;title&quot;&gt;solve1&lt;/span&gt;&lt;span class=&quot;params&quot;&gt;()&lt;/span&gt;&lt;/span&gt;&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;built_in&quot;&gt;memset&lt;/span&gt;(Min,&lt;span class=&quot;number&quot;&gt;127&lt;/span&gt;,&lt;span class=&quot;keyword&quot;&gt;sizeof&lt;/span&gt;(Min)); Min[&lt;span class=&quot;number&quot;&gt;0&lt;/span&gt;] = &lt;span class=&quot;number&quot;&gt;-1&lt;/span&gt;&amp;lt;&amp;lt;&lt;span class=&quot;number&quot;&gt;30&lt;/span&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;for&lt;/span&gt; (&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; i=&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;;i&amp;lt;=n;i++) &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;		&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; t = find(a[i]);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;		f[i] = t+&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;; L = max(t+&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;,L);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;		Min[t+&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;] = min(Min[t+&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;],a[i]);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;function&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;title&quot;&gt;solve2&lt;/span&gt;&lt;span class=&quot;params&quot;&gt;()&lt;/span&gt; &lt;/span&gt;&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;for&lt;/span&gt; (&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; i=n;i&amp;gt;=&lt;span class=&quot;number&quot;&gt;0&lt;/span&gt;;i--) &amp;#123;Insert(f[i],i);g[i] = &lt;span class=&quot;number&quot;&gt;1l&lt;/span&gt;l&amp;lt;&amp;lt;&lt;span class=&quot;number&quot;&gt;60&lt;/span&gt;;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	g[&lt;span class=&quot;number&quot;&gt;0&lt;/span&gt;] = &lt;span class=&quot;number&quot;&gt;0&lt;/span&gt;;a[&lt;span class=&quot;number&quot;&gt;0&lt;/span&gt;] = &lt;span class=&quot;number&quot;&gt;-1&lt;/span&gt;&amp;lt;&amp;lt;&lt;span class=&quot;number&quot;&gt;30&lt;/span&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;for&lt;/span&gt; (&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; x=&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;;x&amp;lt;=n;x++)&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;		&lt;span class=&quot;keyword&quot;&gt;for&lt;/span&gt; (&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; i=head[f[x]&lt;span class=&quot;number&quot;&gt;-1&lt;/span&gt;];i;i=e[i].next)&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;			&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; p = e[i].y;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;			&lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt; (p&amp;gt;x) &lt;span class=&quot;keyword&quot;&gt;break&lt;/span&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;			&lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt; (a[p]&amp;gt;a[x]) &lt;span class=&quot;keyword&quot;&gt;continue&lt;/span&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;			&lt;span class=&quot;keyword&quot;&gt;for&lt;/span&gt; (&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; j=p;j&amp;lt;=x;j++) s1[j] = &lt;span class=&quot;built_in&quot;&gt;abs&lt;/span&gt;(a[p]-a[j]),s2[j] = &lt;span class=&quot;built_in&quot;&gt;abs&lt;/span&gt;(a[j]-a[x]);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;			&lt;span class=&quot;keyword&quot;&gt;for&lt;/span&gt; (&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; j=p+&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;;j&amp;lt;=x;j++) s1[j]+=s1[j&lt;span class=&quot;number&quot;&gt;-1&lt;/span&gt;],s2[j]+=s2[j&lt;span class=&quot;number&quot;&gt;-1&lt;/span&gt;];&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;			&lt;span class=&quot;keyword&quot;&gt;for&lt;/span&gt; (&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; j=p;j&amp;lt;x;j++) g[x] = min(g[x],g[p]+s1[j]+s2[x]-s2[j]-s1[p]);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;		&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;function&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;title&quot;&gt;main&lt;/span&gt;&lt;span class=&quot;params&quot;&gt;()&lt;/span&gt;&lt;/span&gt;&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	n = read();&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;keyword&quot;&gt;for&lt;/span&gt; (&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; i=&lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;;i&amp;lt;=n;i++) a[i] = read()-i;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	a[++n] = &lt;span class=&quot;number&quot;&gt;1&lt;/span&gt;&amp;lt;&amp;lt;&lt;span class=&quot;number&quot;&gt;30&lt;/span&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	solve1();&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	solve2();&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;built_in&quot;&gt;printf&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&quot;%d\n%lld\n&quot;&lt;/span&gt;,n-f[n],g[n]);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;hr&gt;
&lt;p&gt;有错误请指出$$\mathcal {FIN}$$&lt;/p&gt;
</content>
    
    <summary type="html">
    
      &lt;p&gt;听说HAOI有洪水，像我这种蒟蒻最喜欢了，于是最近就开始刷HAOI了。。。&lt;/p&gt;
    
    </summary>
    
      <category term="题解" scheme="http://yoursite.com/categories/%E9%A2%98%E8%A7%A3/"/>
    
    
      <category term="题解" scheme="http://yoursite.com/tags/%E9%A2%98%E8%A7%A3/"/>
    
      <category term="HAOI" scheme="http://yoursite.com/tags/HAOI/"/>
    
      <category term="BZOJ" scheme="http://yoursite.com/tags/BZOJ/"/>
    
  </entry>
  
  <entry>
    <title>Hello World</title>
    <link href="http://yoursite.com/2016/03/14/hello-world/"/>
    <id>http://yoursite.com/2016/03/14/hello-world/</id>
    <published>2016-03-14T14:43:50.295Z</published>
    <updated>2016-03-20T03:24:55.678Z</updated>
    
    <content type="html">&lt;p&gt;额，第一篇博文写一些什么东西好呢。。。。&lt;/p&gt;
&lt;a id=&quot;more&quot;&gt;&lt;/a&gt;
&lt;p&gt;&lt;iframe frameborder=&quot;no&quot; border=&quot;0&quot; marginwidth=&quot;0&quot; marginheight=&quot;0&quot; width=&quot;330&quot; height=&quot;86&quot; src=&quot;http://music.163.com/outchain/player?type=2&amp;id=31311449&amp;auto=0&amp;height=66&quot;&gt;&lt;/iframe&gt;&lt;br&gt;好像并不知道。。&lt;em&gt;(:з」∠)&lt;/em&gt;&lt;br&gt;但是既然都自动生成了Hello World了就要写一点的吧。&lt;/p&gt;
&lt;figure class=&quot;highlight c++&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;meta&quot;&gt;#&lt;span class=&quot;meta-keyword&quot;&gt;include&lt;/span&gt; &lt;span class=&quot;meta-string&quot;&gt;&amp;lt;cstdio&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;using&lt;/span&gt; &lt;span class=&quot;keyword&quot;&gt;namespace&lt;/span&gt; &lt;span class=&quot;built_in&quot;&gt;std&lt;/span&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;function&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;title&quot;&gt;main&lt;/span&gt;&lt;span class=&quot;params&quot;&gt;()&lt;/span&gt;&lt;/span&gt;&amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;built_in&quot;&gt;printf&lt;/span&gt;(&lt;span class=&quot;string&quot;&gt;&quot;Hello World\n&quot;&lt;/span&gt;);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;p&gt;好就这样吧。&lt;br&gt;感觉有点草率。。&lt;del&gt;不过我就是懒癌你管我&lt;/del&gt;&lt;br&gt;原来blog上的文章也不想转过来了&lt;br&gt;&lt;a href=&quot;http://wyxoi.is-programmer.com&quot; target=&quot;_blank&quot; rel=&quot;external&quot;&gt;点这里回原站&lt;/a&gt;&lt;/p&gt;
</content>
    
    <summary type="html">
    
      &lt;p&gt;额，第一篇博文写一些什么东西好呢。。。。&lt;/p&gt;
    
    </summary>
    
      <category term="Hello World" scheme="http://yoursite.com/categories/Hello-World/"/>
    
    
      <category term="杂文" scheme="http://yoursite.com/tags/%E6%9D%82%E6%96%87/"/>
    
      <category term="Hello World" scheme="http://yoursite.com/tags/Hello-World/"/>
    
  </entry>
  
</feed>
