大约是翻译了一下官方题解?

@Description@

对于一个整数序列 \(P=(P_{1},\dots,P_{m})\),定义 \(f(P)\) 为一个序列 \(Q\) 满足:

  • \(Q_{i}=P_{i}+P_{i+1}\),其中 \(i\in[1,m)\);
  • \(f(P)=(P_{1},Q_{1},\dots,P_{m-1},Q_{m-1},P_{m})\)。

给出正整数 \(a,b,N\),其中 \(a,b\leqslant N\),令序列 \(A=(a,b)\),令序列 \(B\) 为一下操作的结果:

  • 做 \(N\) 次令 \(A=f(A)\).
  • 删除 \(A\) 中大于 \(B\) 的数。

求 \(B_{l,\dots r}\)。

@Solution@

◆ The Coefficient Sequence

构造最终的 \(A\) 序列的过程是这样的:

\[a,b \\
a,a+b,b \\
a,2a+b,a+b,a+2b,b \\
a,3a+b,2a+b,3a+2b,a+b,2a+3b,a+2b,a+3b,b \\
\dots
\]

可以发现有对称性。此时我们先不关心 \(a,b\) 以及 \(N\) 的大小,反之,我们来观察其序列系数,也就是把每个元素看成 \(xa+yb\),其系数的 \((x,y)\),上例的序列系数即

\[(1,0),(0,1) \\
(1,0),(1,1),(0,1) \\
(1,0),(2,1),(1,1),(1,2),(0,1) \\
(1,0),(3,1),(2,1),(3,2),(1,1),(2,3),(1,2),(1,3),(0,1) \\
\dots
\]

以下我们称其为 Coefficient Sequence

◆ The properties of the Coefficient Sequence

现在我们来观察 Coefficient Sequence 的性质。

Observation 1:在 Coefficient Sequence 中相邻的两个二元组 \((x_{S},y_{S}),(x_{T},y_{T})\),都有: \(x_{S}y_{T}-x_{T}y_{S}=1\)。

使用数学归纳法(induction)即证。

Observation 2:对于两个 两个二元组 \((x_{S},y_{S}),(x_{T},y_{T})\),如果他们满足 \(x_{S}y_{T}-x_{T}y_{S}=1\),那么它们在 Coefficient Sequence 中相邻,即 Observation 1 是充要条件

不会证,大概意会一下吧。

Observation 3:对于一个二元组 \((x,y)\),如果 \(\gcd(x,y)=1\),那么 \((x,y)\) 会出现在 Coefficient Sequence 中。

比较显然,以至于官方题解没有给出证明。

Observation 4:在任意时刻,所有在 Coefficient Sequence 中的 \((x,y)\) 总是呈从左到右的关于值 \(\frac{y}{x}\) 递增(令 \(\frac{x}{0}=\infty\))。

◆ The sequence \(B\) in other words

现在描述序列 \(B\) 变得更加容易,现在我们这样描述它:

对于所有二元组 \((x,y)\) 满足 \(x,y,s.t.x,y\in\mathbb{N},\gcd(x,y)=1,ax+by\leqslant N\),我们对其按 \(\frac{y}{x}\) 排序后形成一个二元组序列 \(\{(x_{i},y_{i})\}\),则 \(B_{i}=ax_{i}+by_{i}\)。

◆ Computing \(B_{n}\)

现在我们来考虑原问题的简化版,我们来计算 \(B_{n}\)。让我们把这个描述成一个计数问题(通过二分 \(\frac{y}{x}\)):

给定正整数 \(a,b,N\),以及一个有理数 \(c\)(二分的值),求二元组 \((x,y)\neq(0,0)\) 的数量,其中 \((x,y)\) 满足

  • \(ax+by\leqslant N\);
  • \(\gcd(x,y)=1\);
  • \(\frac{y}{x}\leqslant c\)。

我们令 \(F(N)\) 为以上问题的答案,同时令 \(G(N)\) 为去掉 \(\gcd(x,y)=1\) 限制的答案。\(G(N)\) 的式子可以很方便的写出来: \(G(N)=\sum_{y=1}^{N}\max\{\lfloor\frac{N-by}{a}\rfloor-\lfloor\frac{y}{c}\rfloor+1,0\}\),同时我们还可以写出 \(G(N)=\sum_{d=1}^{N}F(\lfloor\frac{N}{d}\rfloor)\)。那么再根据 Möbius inversion formula,我们可以表示出 \(F(N)=\sum_{d=1}^{N}\mu(d)G(\lfloor\frac{N}{d}\rfloor)\)。于是计算该问题答案的复杂度就是 \(\mathcal{O}(N)\)。

但是此时我们知道了 \(B_{n}\) 的 \(\frac{y_{n}}{x_{n}}\),怎么知道 \((x_{n},y_{n})\) 呢?我们可以再做一个二分。观察出这样一个规律:若令 \(l=(1,0),r=(0,1)\),那么中间位置就是 \(l+r\)。于是我们可以再次做一个二分,利用 \(\frac{y}{x}\) 单调来做 check。

顺带一提,这个还可以使用 类欧几里得 来计算。

◆ Computing \(B_{l,\dots,r}\)

可以发现这个东西可以知二求一,于是求出 \(B_{l},B_{l+1}\) 就行了。当然也可以求出 \(B_{l},B_{r}\) 然后做二分搜索。

Solution -「ARC 123F」Insert Addition的更多相关文章

  1. Solution -「ARC 104E」Random LIS

    \(\mathcal{Description}\)   Link.   给定整数序列 \(\{a_n\}\),对于整数序列 \(\{b_n\}\),\(b_i\) 在 \([1,a_i]\) 中等概率 ...

  2. Solution -「ARC 126E」Infinite Operations

    \(\mathcal{Description}\)   Link.   给定序列 \(\{a_n\}\),定义一次操作为: 选择 \(a_i<a_j\),以及一个 \(x\in\mathbb R ...

  3. Solution -「ARC 101D」「AT4353」Robots and Exits

    \(\mathcal{Description}\)   Link.   有 \(n\) 个小球,坐标为 \(x_{1..n}\):还有 \(m\) 个洞,坐标为 \(y_{1..m}\),保证上述坐标 ...

  4. Solution -「ARC 110D」Binomial Coefficient is Fun

    \(\mathcal{Description}\)   Link.   给定非负整数序列 \(\{a_n\}\),设 \(\{b_n\}\) 是一个非负整数序列且 \(\sum_{i=1}^nb_i\ ...

  5. Solution -「ARC 124E」Pass to Next

    \(\mathcal{Description}\)   Link.   有 \(n\) 个人站成一个环,初始时第 \(i\) 个人手里有 \(a_i\) 个球.第 \(i\) 个人可以将自己手中任意数 ...

  6. Solution -「ARC 126F」Affine Sort

    \(\mathcal{Description}\)   Link.   给定 \(\{x_n\}\),令 \[f(k)=\left|\{(a,b,c)\mid a,b\in[0,c),c\in[1,k ...

  7. Solution -「ARC 125F」Tree Degree Subset Sum

    \(\mathcal{Description}\)   Link.   给定含有 \(n\) 个结点的树,求非负整数对 \((x,y)\) 的数量,满足存在 \(\exist S\subseteq V ...

  8. Solution -「ARC 125E」Snack

    \(\mathcal{Description}\)   Link.   把 \(n\) 种零食分给 \(m\) 个人,第 \(i\) 种零食有 \(a_i\) 个:第 \(i\) 个人得到同种零食数量 ...

  9. Solution -「ARC 058C」「AT 1975」Iroha and Haiku

    \(\mathcal{Description}\)   Link.   称一个正整数序列为"俳(pái)句",当且仅当序列中存在连续一段和为 \(x\),紧接着连续一段和为 \(y ...

  10. Solution -「ARC 101E」「AT 4352」Ribbons on Tree

    \(\mathcal{Description}\)   Link.   给定一棵 \(n\) 个点的树,其中 \(2|n\),你需要把这些点两两配对,并把每对点间的路径染色.求使得所有边被染色的方案数 ...

随机推荐

  1. SPI通信协议

    1. SPI 通信协议简介 SPI 协议是由摩托罗拉公司提出的通讯协议(Serial Peripheral Interface),即串行外围设 备接口,是一种高速全双工的通信总线.它被广泛地使用在 A ...

  2. NLM 公布了一个新的重新设计的 PubMed 数据库

    经常使用 PubMed 的童鞋可能已经发现,美国国家医学图书馆(NLM)在今年 10 月份左右发布了一个新的重新设计的版本以取代 PubMed 数据库的现有版本,新版本现在已经上线,可以通过下面的链接 ...

  3. R 数据可视化 : 热图

    本文作者蒋刘一琦,自嘲是一个有艺术追求的生信狗,毕业于浙江大学生物信息学专业,目前在复旦大学就读研究生,研究方向为宏基因组. 在生物信息领域我们常常使用 R 语言对数据可视化.在对数据可视化的时候,我 ...

  4. 掌握Python文件操作:从基础到高阶的全方位探索

    在本篇博客中,我们将全面.深入地探讨Python中的文件操作.文件操作在Python编程中是不可或缺的一部分,它包含了打开.读取.写入和关闭文件等各种操作.我们将从基础的文件操作讲解到高级的文件处理技 ...

  5. zabbix 监控nginx

    nginx内置了一个status状态的功能,通过配置可以看到nginx的运行情况,status显示的内容包括当前连接数,处于活动状态的连接数,已经处理的请求数等等,可以利用这个功能编写zabbix监控 ...

  6. @SuppressWarnings注解的使用

    Java编译器在编译代码时,会产生一些安全警告信息.如果被@SuppressWarnings注解标记的元素,就可以告诉编译器抑制指定的警告. 先看看@SuppressWarnings注解在Java S ...

  7. 快速取模算法(Barrett Reduction)

    原理:取模运算低效的原因本质是除法运算的低效.如果能将除法变成其它运算就可以加速.具体地,将除以任意数转化成"乘一个数.除以一个 \(2^k\) "(取 \(2^{62}\) 即可 ...

  8. C++面试八股文:std::vector了解吗?

    某日二师兄参加XXX科技公司的C++工程师开发岗位第23面: 面试官:vector了解吗? 二师兄:嗯,用过. 面试官:那你知道vector底层是如何实现的吗? 二师兄:vector底层使用动态数组来 ...

  9. JAVA代码下载TXT文件(本地和服务器上的代码都可以)

    // 读取服务器文件内容(TXT文件测试可以) public static List<String> showTxt(String filePath) throws IOException ...

  10. 【xx-job】 定时任务调度

    XXL-JOB XXL-JOB是一个分布式任务调度平台,其核心设计目标是开发迅速.学习简单.轻量级.易扩展. 现已开放源代码并接入多家公司线上产品线,开箱即用. 一.任务调度中心 1.1 下载XXL- ...