#4363. 最大值对最小值取模(Max Mod Min)

最大值对最小值取模(Max Mod Min)

题目描述

小高得到了一个长度为 NN 的正整数序列 A=(A1,A2,...,AN)A=(A_1,A_2,...,A_N)
他将重复执行以下操作,直到序列 AA 的长度变为 11

  • 设操作前 AA 的长度为 kk。选择整数 iijj,使得 $max({A_1,A_2,...,A_k})=A_i, min({A_1,A_2,...,A_k})=A_j$,且 iji≠j。然后将 AiA_i 替换为 (AimodAj)(A_i mod A_j)。如果此时 AiA_i 变为 00,则从 A 中删除 AiA_i

请计算小高将执行的操作次数。可以证明,无论如何选择操作中的 iijj,总操作次数都不会改变。

输入格式

输入从标准输入中给出,格式如下:
NN
A1A_1 A2A_2 ... ANA_N

输出格式

输出所求答案。

样例

3
2 3 6
3
6
1232 452 23491 34099 57341 21488
12

样例1解释

将执行3次操作,如下所示:

  1. 选择 i=3,j=1i=3,j=1。得到 A3=0A_3=0,并从 A 中删除 A3A_3。现在 A=(2,3)A=(2,3)

  2. 选择 i=2,j=1i=2,j=1。得到 A2=1A_2=1。现在 A=(2,1)A=(2,1)

  3. 选择 i=1,j=2i=1,j=2。得到 A1=0A_1=0,并从 A 中删除 A1A_1。现在 A=(1),由于 A 的长度变为 1,终止操作。

数据范围

2N2×1052 ≤ N ≤ 2 × 10^5
1Ai1091 ≤ A_i ≤ 10^9
所有输入均为整数。

来源

  • AtCoder ARC147A