题目地址:
http://acm.hdu.edu.cn/showproblem.php?pid=5726
题目概述:
给出n个数以及q个询问,每个询问有两个数l,r,求[l,r]区间的gcd以及区间gcd等于这个gcd的所有方案数。
大致思路:
乍一看线段树,但是这个题询问太多了,所以我们使用ST表来做这个题目。
区间max,min,gcd,lcm都可以用ST表来做,ST表在O(nlogn)的预处理之后,对每个询问的时间是O(1)的。
而对于方案数,根据gcd不增的性质,我们可以枚举左端点,二分右端点,预处理所有的gcd对应的方案数。
复杂度分析:
ST表的处理是O(nlogn),方案数的预处理也是O(nlogn),而对于每个询问复杂度是O(1)。总的时间复杂度为O(T*nlogn)。
代码:
#include #include #include #include #include #include #include