D_L3

Untitled

Jan 21st, 2024
125
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.24 KB | None | 0 0
  1. #include <cmath>
  2. #include <cstdio>
  3. #include <vector>
  4. #include <iostream>
  5. #include <algorithm>
  6. #include <unordered_map>
  7.  
  8. using namespace std;
  9.  
  10. int main() {
  11. size_t n, q, a;
  12. cin >> n >> q;
  13.  
  14. unordered_map<int, vector<int>> divisors;
  15.  
  16. vector<int> answers(q);
  17.  
  18. for (size_t i = 0; i < n; i++) {
  19. cin >> a;
  20. int s = sqrt(a);
  21.  
  22. for (size_t j = 1; j <= s; j++)
  23. {
  24. if (a % j == 0)
  25. {
  26. divisors[j].push_back(i);
  27. if (j * j != a)
  28. divisors[a / j].push_back(i);
  29. }
  30. }
  31.  
  32. for (size_t j = a * 2; j <= 200000; j += a) {
  33. divisors[j].push_back(i);
  34. }
  35. }
  36.  
  37. for (size_t i = 0; i < q; i++) {
  38. size_t l, r, d;
  39. cin >> l >> r >> d;
  40.  
  41. size_t right = upper_bound(divisors[d].begin(), divisors[d].end(), r - 1) - divisors[d].begin();
  42. if (l == 1)
  43. answers[i] = right;
  44. else {
  45. size_t left = lower_bound(divisors[d].begin(), divisors[d].end(), l - 1) - divisors[d].begin();
  46. answers[i] = right - left;
  47. }
  48. }
  49.  
  50. for (int answer : answers) {
  51. cout << answer << " ";
  52. }
  53.  
  54. return 0;
  55. }
  56.  
Advertisement
Add Comment
Please, Sign In to add comment