[DTOI 2023] C. 不见故人
题目背景
虽然 luanmenglei 已经是成熟的高中生了,但每次提起 luanmenglei 八年级的女朋友时,luanmenglei 都会沉浸在美好的回忆中,不可自拔。
题目描述
给定 $n, k$ 和序列 $\{a_n\}$,你同时有一个临时变量 $x$,你可以进行以下操作若干次(也可以是 $0$ 次),一次操作的流程是:
1. 选定一个区间 $[l,r]$,$\forall i\in[l,r]$,$x\leftarrow \gcd(a_l,a_{l+1},\cdots,a_r)$。
2. $\forall i\in[l,r]$,$a_i\leftarrow x$。
简而言之,你每次可以选定一个区间并将其中每个数变成这个区间的 $\gcd$。
一次操作的代价是 $r-l+1+k$,现在你希望把这个序列的每个数都变成相等的,求最小代价和。
----
如果您不了解 $\gcd$ 或者多元 $\gcd$ 的含义,可以参照如下定义:
- $\gcd(a_1,a_2,\dots, a_k)$ 表示 $a_1,a_2,\dots, a_k$ 的最大公约数,即最大的能同时整除 $a_1,a_2,\dots, a_k$ 的正整数。
输入输出格式
输入格式
第一行两个非负整数 $n,k$。
第二行 $n$ 个数,表示 $\{a_n\}$。
输出格式
一行一个数,表示答案。
输入输出样例
输入样例 #1
10 3
2 2 2 1 2 2 2 1 2 2
输出样例 #1
13
输入样例 #2
10 0
2 2 2 1 2 2 2 1 2 3
输出样例 #2
9
输入样例 #3
11 0
2 2 2 1 2 2 2 1 1 3 3
输出样例 #3
10
说明
#### 【样例 1 解释】
操作一次,选择区间 $[1,10]$。
#### 【样例 4】
见附加文件中的 `old/old4.in` 与 `old/old4.out`。
该样例满足测试点 $9\sim 12$ 的限制。
#### 【样例 5】
见附加文件中的 `old/old5.in` 与 `old/old5.out`。
该样例满足测试点 $13\sim 16$ 的限制。
#### 【数据范围与提示】
对于所有数据,保证 $1\leq n\leq 4\times 10^6$,$0\leq k\leq 10^9$,$1\leq a_i\leq 10^9$。
每个测试点的具体限制见下表:
| 测试点编号 | $n\leq$ | $k,a_i\leq$ | 特殊性质 |
| :----------: | :----------: | :----------: | :----------: |
| $1$ | $10^6$ | $10^9$ | 所有数都相等 |
| $2\sim 4$ | $4$ | $10^9$ | 无 |
| $5\sim 8$ | $100$ | $10^9$ | 无 |
| $9\sim 12$ | $1000$ | $10^9$ | 无 |
| $13\sim 16$ | $10^6$ | $10^9$ | 无 |
| $17\sim 20$ | $4\times 10^6$ | $10^9$ | 无 |
本题的读入量较大,请选择较快的读入方式,下面提供一种读入策略:
请在代码的开头加入此行:`std::ios::sync_with_stdio(false);std::cin.tie(0);`。
请注意,加入本行后 `cin/cout` 的效率将大幅提高,保证其能在 `250 ms` 内读入所有数据,**但使用后你仅能使用 `cin/cout` 流读入数据。**