【TsinsenA1339】JZPLCM(顾昱洲) 树状数组

试题来源

  2012中国国家集训队命题答辩

问题描述

  给定一长度为n的正整数序列a,有q次询问,每次询问一段区间内所有数的lcm(即最小公倍数)。由于答案可能很大,输出答案模1000000007。

输入格式

  第一行,两个整数,n, q,分别表示数列长度和询问个数。
  下面n行,每行一个整数,第i行的整数为ai。
  下面q行,每行两个整数l, r,表示询问下标i在[l, r]范围内的ai的lcm。

输出格式

  q行。对于每个询问,输出一行,表示对应的答案。

样例输入

3 3
123
234
345
1 2
2 3
1 3

样例输出

9594
26910
1103310

数据规模和约定

测试数据编号 规模和约定
1, 2 n, q<=1000
3, 4 n, q<=5000
5, 6 n, q<=20000
7, 8 n, q<=30000
9, 10 n, q<=40000
11, 12 n, q<=50000
13, 14 n, q<=80000
15, 16 n, q<=100000
17, 18, 19, 20 n, q<=100000 数列a中每个数能表示为不超过100的素数的积

对于所有测试点,数列a中每个数满足1<=ai<=1000000000。


求LCM会爆LL,所以可以考虑分解质因数然后求最大幂然后乘起来。

40分算法:

对于最后四个点:
考虑对每个素数的幂建一个ST表,则答案是每个素数的幂的区间最大值,乘起来就行了。复杂度 O(25nlogn+25q)

对于前四个点:
暴力分解质因数,求最大的幂。复杂度 O(nqlogn)

60分算法:

考虑离线莫队。发现每次区间转移相当于删除/加入log个质数,最后询问是询问每个质数的最大的幂,可以用平衡树来维护,复杂度

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值