可以发现,对于某个 ,答案只可能是 的约数,设其为 。反过来想一下,若 能成为 个数的 ,则这 个数都是 的倍数。因此, 的约数 可以在原数组中挑出 个数,使 为 的充要条件为: 中含有 个 的倍数。
由于数据范围不大(),因此可以直接暴力处理出每个数的 约数 和 倍数数量(调和级数复杂度),然后对每个数的所有约数做判断,取满足条件的最大值作为答案即可。
复杂度
关于预处理 的约数,倍数的复杂度:
- 直接枚举某个数的所有约数,是 的。
- 在调和级数过程中构建倍数与约数之间关系,是 的。并且注意按顺序放入数的大小也是从小到大的,因此每个数构建出的约数表天然有序,不需要再重新排列。
code
值域树状数组维护前缀 + 离散化 + 离线查询
将所有 与 询问中的 离散化,并构建值域树状数组维护以每个数字结尾的子序列的最长严格上升子序列长度。
考虑前缀 时,可以直接得到以任意数 结尾的最长严格上升子序列长度为:
其中当前的树状数组维护了前缀 的所有信息。显然,每处理某个前缀 ,就可以得到以任意数 结尾的答案(上式)。因此不难想到将所有询问按前缀结尾升序排序,在 遍历序列过程中动态维护 在当前的前缀下 以任意数结尾的 最长严格上升子序列的长度。具体细节见代码。
code
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战