DuongNhi99

NATDIV (Segment Tree)

Mar 10th, 2022
741
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.67 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. const int N = 1e6 + 1;
  5.  
  6. long long a[N], b[N];
  7.  
  8. int main()
  9. {
  10.     //ios_base::sync_with_stdio(false);
  11.     //cin.tie(NULL); cout.tie(NULL);
  12.     //freopen("NATDIV.inp", "r", stdin);
  13.     //freopen("NATDIV.inp", "w", stdout);
  14.  
  15.     for (int i = 1; i*i <= N; ++i){
  16.         a[i*i] += i;
  17.         b[i*i] += 1;
  18.         for (int j = i + 1; i*j <= N; ++j){
  19.             a[i*j] += i + j;
  20.             b[i*j] += 2;
  21.         }
  22.     }
  23.  
  24.     for (int i = 2; i <= N; ++i){
  25.         a[i] += a[i - 1];
  26.         b[i] += b[i - 1];
  27.     }
  28.  
  29.     long long t; cin >> t;
  30.     while (t--)
  31.     {
  32.         int l, r; cin >> l >> r;
  33.         cout << b[r] - b[l - 1] << ' ' << a[r] - a[l - 1] << '\n';
  34.     }
  35.  
  36.     return 0;
  37. }
Advertisement
Add Comment
Please, Sign In to add comment