Dang_Quan_10_Tin

Modulas

Jul 23rd, 2021
1,197
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.91 KB | None | 0 0
  1.  
  2. #include <bits/stdc++.h>
  3.  
  4. using namespace std;
  5. using ll = long long;
  6. using ld = long double;
  7. using ull = unsigned long long;
  8.  
  9. constexpr bool typetest = 0;
  10. constexpr int N = 3e5 + 5;
  11.  
  12. struct FenwickTree
  13. {
  14.     ll a[N];
  15.     void Update(int p, ll v)
  16.     {
  17.         for (; p < N; p += p & -p)
  18.             a[p] += v;
  19.     }
  20.     ll Get(int p)
  21.     {
  22.         ll ans(0);
  23.         for (; p > 0; p -= p & -p)
  24.             ans += a[p];
  25.         return ans;
  26.     }
  27.     ll Get(int l, int r)
  28.     {
  29.         return Get(r) - Get(l - 1);
  30.     }
  31. } f, g, h, k;
  32.  
  33. int n;
  34. ll a[N];
  35.  
  36. void Read()
  37. {
  38.     cin >> n;
  39.     for (int i = 1; i <= n; ++i)
  40.         cin >> a[i];
  41. }
  42.  
  43. void Buffalo()
  44. {
  45.     ll ans(0);
  46.     for (int i = 1; i <= n; ++i)
  47.     {
  48.         for (int j = 1; j < i; ++j)
  49.             ans += a[i] % a[j] + a[j] % a[i];
  50.         cout << ans << " ";
  51.     }
  52.     cout << "\n";
  53. }
  54.  
  55. void Solve()
  56. {
  57.     // /Buffalo();
  58.     ll ans(0);
  59.     for (int i = 1; i <= n; ++i)
  60.     {
  61.         ans += (h.Get(a[i] + 1, N - 1) * a[i]) + (f.Get(a[i]) * a[i] - g.Get(a[i]) + k.Get(1, a[i] - 1));
  62.  
  63.         for (int j = a[i]; j < N; j += a[i])
  64.         {
  65.             ans += k.Get(j + 1, min((ll)N - 1, j + a[i] - 1)) - h.Get(j + 1, min((ll)N - 1, j + a[i] - 1)) * j;
  66.             //if (j <= 20)
  67.             //    cout << j << ": " << k.Get(j + 1, j + a[i] - 1) << " " << h.Get(j + 1, j + a[i] - 1) * j << "\n";
  68.             g.Update(j + 1, j);
  69.             g.Update(j + a[i], -j);
  70.             f.Update(j + 1, 1);
  71.             f.Update(j + a[i], -1);
  72.         }
  73.         h.Update(a[i], 1);
  74.         k.Update(a[i], a[i]);
  75.  
  76.         cout << ans << " ";
  77.         //cout << "\n";
  78.     }
  79. }
  80.  
  81. int32_t main()
  82. {
  83.     ios::sync_with_stdio(0);
  84.     cin.tie(0);
  85.     cout.tie(0);
  86.     int t(1);
  87.     if (typetest)
  88.         cin >> t;
  89.     for (int _ = 1; _ <= t; ++_)
  90.     {
  91.         //cout << "Case #" << _ << "\n";
  92.         Read();
  93.         Solve();
  94.     }
  95. }
Advertisement
Add Comment
Please, Sign In to add comment