Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cmath>
- #include <ios>
- #include <vector>
- #include <fstream>
- #pragma GCC optimize("Ofast")
- #pragma GCC optimize("no-stack-protector")
- #pragma GCC optimize("unroll-loops")
- #pragma GCC target("sse,sse2,sse3,ssse3,popcnt,abm,mmx,tune=native")
- using namespace std;
- int main() {
- fstream str("output.txt",ios_base::in|ios_base::out|ios_base::trunc);
- int n, m, s, c;
- cin >> n;
- s = sqrt(n) + 1;
- vector<size_t> buckets(s + 1);
- vector<size_t> data;
- data.reserve(n);
- vector<size_t> out_buck(n);
- size_t x;
- for (size_t i = 0; i < n; ++i) {
- cin >> x;
- data.push_back(x);
- }
- cin >> m;
- size_t sqrt_i, value;
- for (size_t j = 0; j < m; ++j) {
- cin >> c;
- if (c == 2) {
- size_t l, r, d;
- cin >> l >> r >> d;
- --l; --r;
- size_t beg = l / s + 1, end = r / s + 1, beg_buck = (l/s + 1) * s,
- end_buck = r/s * s;
- if (beg != end) {
- for (size_t i = l; i < beg_buck; ++i) {
- out_buck[i] += d;
- }
- for (size_t i = r; i >= end_buck; --i) {
- out_buck[i] += d;
- }
- for (size_t i = beg; i < end - 1; ++i) {
- buckets[i] += d;
- }
- } else {
- for (size_t i = l; i < r + 1; ++i) {
- out_buck[i] += d;
- }
- }
- } else {
- size_t i;
- cin >> i;
- sqrt_i = size_t(sqrt(i)) + 1;
- value = data[i - 1];
- for (size_t d = 1; d < sqrt_i; ++d) {
- if (i % d == 0) {
- if ((i / d) == d) {
- value += out_buck[d - 1] +
- buckets[(d - 1) / s];
- } else if ((i / d) != d) {
- value += out_buck[d - 1] +
- buckets[(d - 1) / s] +
- buckets[(i / d - 1) / s] +
- out_buck[i / d - 1];
- }
- }
- }
- str << value << endl;
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement