#include #include typedef struct SegmentTree { int size; int *tree; } SegmentTree; SegmentTree* createSegmentTree(int N) { SegmentTree *st = (SegmentTree *)malloc(sizeof(SegmentTree)); st->size = 2 * N; st->tree = (int *)malloc(st->size * sizeof(int)); for (int i = 0; i < st->size; i++) { st->tree[i] = 0; } return st; } void build(SegmentTree *st, int *a, int N) { for (int i = 0; i < N; i++) { st->tree[N + i] = a[i]; } for (int i = N - 1; i > 0; --i) { st->tree[i] = st->tree[i << 1] + st->tree[i << 1 | 1]; } } int query(SegmentTree *st, int l, int r, int k, int N) { int res = 0; for (l += N, r += N; l < r; l >>= 1, r >>= 1) { if (l & 1) res += (st->tree[l++] % k == 0); if (r & 1) res += (st->tree[--r] % k == 0); } return res; } int main(void) { int N, Q; scanf("%d %d", &N, &Q); int a[N], l[Q], r[Q], k[Q]; for (int p = 0; p < N; p++) { scanf("%d", &a[p]); } for (int q = 0; q < Q; q++) { scanf("%d %d %d", &l[q], &r[q], &k[q]); } SegmentTree *st = createSegmentTree(N); build(st, a, N); for (int i = 0; i < Q; i++) { int result = query(st, l[i] - 1, r[i], k[i], N); printf("%d\n", result); } free(st->tree); free(st); return 0; }