Codeforces CF1516D Cut

题目大意

给出一个长度为 n n n 的序列 a a a,以及 q q q 次询问
每次询问给出 l , r l,r l,r,问最少需要把区间 [ l , r ] [l,r] [l,r] 划分成多少段,满足每段内元素的 LCM 等于元素的乘积


这数据范围,这询问方式,一看就是DS题

首先,我们考虑 LCM 的性质。如果一段区间内的数的 LCM 等于所有元素之积,那么这个区间中的数一定两两互质。

我们设 n x t i nxt_i nxti 表示 i i i 后面第一个与 a i a_i ai 互质的数的位置
同时,记 f i f_i fi 为以 i i i 为左端点时,满足区间内数两两互质的最远右端点 + 1 +1 +1,也就是下一个互质区间的左端点

我们考虑从后往前计算 n x t i nxt_i nxti
对于每个质数 p k p_k pk,我们维护 c k c_k ck 表示 p k p_k pk 的倍数出现的最近位置
那么, n x t i nxt_i nx

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值