Advertisement
Guest User

Untitled

a guest
May 21st, 2019
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.25 KB | None | 0 0
  1. #include <iostream>
  2. #include <cmath>
  3. #include <ios>
  4. #include <vector>
  5. #include <fstream>
  6. #pragma GCC optimize("Ofast")
  7. #pragma GCC optimize("no-stack-protector")
  8. #pragma GCC optimize("unroll-loops")
  9. #pragma GCC target("sse,sse2,sse3,ssse3,popcnt,abm,mmx,tune=native")
  10.  
  11. using namespace std;
  12.  
  13.  
  14.  
  15.  
  16. int main() {
  17.     fstream str("output.txt",ios_base::in|ios_base::out|ios_base::trunc);
  18.     int n, m, s, c;
  19.     cin >> n;
  20.     s = sqrt(n) + 1;
  21.     vector<size_t> buckets(s + 1);
  22.     vector<size_t> data;
  23.     data.reserve(n);
  24.     vector<size_t> out_buck(n);
  25.     size_t x;
  26.     for (size_t i = 0; i < n; ++i) {
  27.         cin >> x;
  28.         data.push_back(x);
  29.     }
  30.     cin >> m;
  31.     size_t sqrt_i, value;
  32.     for (size_t j = 0; j < m; ++j) {
  33.         cin >> c;
  34.         if (c == 2) {
  35.             size_t l, r, d;
  36.             cin >> l >> r >> d;
  37.             --l; --r;
  38.             size_t beg = l / s + 1, end = r / s + 1, beg_buck = (l/s + 1) * s,
  39.         end_buck = r/s * s;
  40.             if (beg != end) {
  41.                 for (size_t i = l; i < beg_buck; ++i) {
  42.                     out_buck[i] += d;
  43.                 }
  44.  
  45.                 for (size_t i = r; i >= end_buck; --i) {
  46.                     out_buck[i] += d;
  47.                 }
  48.  
  49.                 for (size_t i = beg; i < end - 1; ++i) {
  50.                     buckets[i] += d;
  51.                 }
  52.  
  53.             } else {
  54.                 for (size_t i = l; i < r + 1; ++i) {
  55.                     out_buck[i] += d;
  56.                 }
  57.             }
  58.         } else {
  59.             size_t i;
  60.             cin >> i;
  61.             sqrt_i = size_t(sqrt(i)) + 1;
  62.             value = data[i - 1];
  63.             for (size_t d = 1; d < sqrt_i; ++d) {
  64.                 if (i % d == 0) {
  65.                     if  ((i / d) == d) {
  66.                         value += out_buck[d - 1] +
  67.                                  buckets[(d - 1) / s];
  68.                     } else if ((i / d) != d) {
  69.                         value += out_buck[d - 1] +
  70.                                  buckets[(d - 1) / s] +
  71.                                  buckets[(i / d - 1) / s] +
  72.                                  out_buck[i / d - 1];
  73.                     }
  74.                 }
  75.             }
  76.             str << value << endl;
  77.         }
  78.     }
  79.     return 0;
  80. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement