题目背景
众所周知,椰子是一种椰子,但这和题目好像没什么关系。
题目描述
给出一个长度为 n 的序列 a,我们保证 1∼n 中的每一个数都恰好在 a 中出现了一次,对于每一个 1≤i≤n,求出在序列中将值为 i 的数的值修改成 1 后,序列有多少种不同的区间 gcd 的值。
严格来说,记将值为 x 的数修改为 1 后的序列为 Ax。集合 Sx={i=lgcdr(Aix)∣1≤l≤r≤n},求出所有 ∣Si∣ 的值。
输入格式
第一行一个正整数 n,表示排列的长度。
接下来一行 n 个正整数,表示序列 a。
输出格式
一行一共 n 个整数,第 i 个数表示在把值为 i 的数改成 1 后,序列有多少种不同的区间 gcd 的值。
提示
样例解释 1
对于将 1 变成 1,有 {1,2,3} 共 3 种不同的区间 gcd 值,分别可以对应区间 [1,3],[3,3],[1,1]。
对于将 2 变成 1,有 {1,3} 共 2 种不同的区间 gcd 值,分别可以对应区间 [2,3],[1,1]。
对于将 3 变成 1,有 {1,2} 共 2 种不同的区间 gcd 值,分别可以对应区间 [1,2],[3,3]。
数据规模与约定
本题采用捆绑测试。
Subtask |
分数 |
数据范围 |
特殊性质 |
1 |
10 |
n≤20 |
无特殊限制 |
2 |
20 |
n≤200 |
3 |
30 |
n≤2000 |
4 |
20 |
无特殊限制 |
A |
5 |
无特殊限制 |
A:对于所有 1≤i≤n,有 ai=i。
对于所有的数据,2≤n≤5×105,我们保证 1∼n 中的每一个数都恰好在 a 中出现了一次。