首页 > 试题广场 >

数列互质

[编程题]数列互质
  • 热度指数:136 时间限制:C/C++ 6秒,其他语言12秒 空间限制:C/C++ 512M,其他语言1024M
  • 算法知识视频讲解
给出一个长度为 n 的数列 { a[1] , a[2] , a[3] , ... , a[n] },以及 m 组询问 ( l[i] , r[i] , k[i])。
求数列下标区间在 [ l[i] , r[i] ] 中有多少数在该区间中的出现次数与 k[i] 互质(最大公约数为1)。

输入描述:
第一行,两个正整数 n , m (1 ≤ n, m ≤ 50000)。
第二行,n 个正整数 a[i] (1 ≤ a[i] ≤ n)描述这个数列。
接下来 m 行,每行三个正整数 l[i] , r[i] , k[i] (1 ≤ l[i] ≤ r[i] ≤ n, 1 ≤ k[i] ≤ n),描述一次询问。


输出描述:
输出 m 行,即每次询问的答案。
示例1

输入

10 5
1 1 1 1 1 2 2 2 2 2
4 7 2
4 7 3
4 8 2
4 8 3
3 8 3

输出

0
2
1
1
0
头像 阿哲不是吧
发表于 2020-10-07 15:54:52
数列互质 题目描述 给出一个长度为 n 的数列 { a[1] , a[2] , a[3] , ... , a[n] },以及 m 组询问 ( l[i] ,r[i] , k[i])。 求数列下标区间在 [ l[i] , r[i] ] 中有多少数在该区间中的出现次数与 k[i]互质(最大公约数为1)。 展开全文
头像 ThinkofBlank
发表于 2020-05-06 20:19:39
该题之理论题解,代码打炸了(wa了),就不放了qwq后来debug出来了,统计排序后第一个询问的答案时,我把1写成i了qwq 首先,我们明显的,我们需要使用莫队算法来维护每个颜色的出现次数,设c[i]表示区间中i出现了多少次,同时我们再维护一个数组d[i]表示出现次数为i的有几个颜色。这两个数组在莫 展开全文
头像 lqh2022
发表于 2023-10-16 11:21:46
做法:莫队 + 根号分治 显然这题我们需要莫队来处理询问,我们用两个unordered_map<int, int> mp, cnt 来分别记录数字 的出现次数 和出现次数为 的数的个数 . 我们可以发现,出现次数如果很多,那么不同的数字就会很少;不同的数字很多,那么出现的次数就会 展开全文
头像 绝迹的星
发表于 2024-05-20 17:20:01
数列互质 莫队模版 使用哈希表维护区间中每个数的出现次数, 区间指针移动后遍历出现次数求互质个数 import java.io.*; import java.util.*; public class Main { static BufferedReader bf = new Buffe 展开全文

热门推荐

通过挑战的用户

数列互质