Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <cmath>
- #include <cstdio>
- #include <vector>
- #include <iostream>
- #include <algorithm>
- #include <unordered_map>
- using namespace std;
- int main() {
- size_t n, q, a;
- cin >> n >> q;
- unordered_map<int, vector<int>> divisors;
- vector<int> answers(q);
- for (size_t i = 0; i < n; i++) {
- cin >> a;
- int s = sqrt(a);
- for (size_t j = 1; j <= s; j++)
- {
- if (a % j == 0)
- {
- divisors[j].push_back(i);
- if (j * j != a)
- divisors[a / j].push_back(i);
- }
- }
- for (size_t j = a * 2; j <= 200000; j += a) {
- divisors[j].push_back(i);
- }
- }
- for (size_t i = 0; i < q; i++) {
- size_t l, r, d;
- cin >> l >> r >> d;
- size_t right = upper_bound(divisors[d].begin(), divisors[d].end(), r - 1) - divisors[d].begin();
- if (l == 1)
- answers[i] = right;
- else {
- size_t left = lower_bound(divisors[d].begin(), divisors[d].end(), l - 1) - divisors[d].begin();
- answers[i] = right - left;
- }
- }
- for (int answer : answers) {
- cout << answer << " ";
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment