问题 5054 --小 C 的数(number)

5054: 小 C 的数(number)

题目描述

  小 C 非常喜欢数字。
这次,他得到了一个长度为 n 的正整数数列 A,第 i 项为 ai。
现在,小 C 想要找出来 A 中最长的子序列B = {b1, b2, · · · , bm},使得对于任意的二元组(i, j),bi 和 bj 满足倍数关系。
小 C 突然不会最长不下降子序列了,于是找到了你来帮他求出最长的子序列的长度。
子序列:对于长度为 n 的数列 A,对于 B = {b1, b2, · · · , bm},若 b1 = ap1, b2 = ap2, · · · , bm = apm,则必须要满足 1 ≤ p1 < p2 < · · · < pm ≤ n,这样的数列 B 称为 A 的子序列。其中子序
列 B 可以为空。
倍数关系:对于两个数 a, b,两者成倍数关系,即 a 能被 b 整除,或者 b 能被 a 整除,两者至少一种成立。

输入

共两行,第一行有一个正整数 n,表示数列 A 的长度;
第二行有 n 个正整数,第 i 个数表示 ai。

输出

仅一行一个数,表示子序列长度的最大值。

样例输入输出

输入#1 复制
5
1 2 3 8 16
输出#1 复制
4
输入#2 复制
10
1 4 6 3 9 11 16 24 42 36
输出#2 复制
4

提示

【样例 1 解释】
最长子序列为 {1, 2, 8, 16},长度为 4。
【样例 2 解释】
最长长度为 4,选取方案不唯一,其中一种最长的子序列为 {1, 6, 3, 24}。


对于所有数据:0 < N ≤ 3 × 10^6,0 < ai ≤ 10^7。
【提示】
如有需要,请使用scanf 读入以及减少使用STL,以降低程序本身带来的常数。

序号 标题 作者 发表时间 费用 订购数 操作