Submission #1309789

#TimeUsernameProblemLanguageResultExecution timeMemory
1309789empyr1nAddk (eJOI21_addk)C++20
0 / 100
31 ms1972 KiB
#pragma GCC optimize("Ofast") #pragma GCC optimize("unroll-loops") #include <bits/stdc++.h> #define ll long long #define pb push_back #define el '\n' using namespace std; struct Fenwick { ll n; vector <ll> F; Fenwick (ll _n) { n = _n; F.assign(n + 1, 0); } void upd (ll i, ll val) { for (; i <= n; i += i & -i) F[i] += val; } ll get (ll i) { ll res = 0; for (; i > 0; i -= i & -i) res += F[i]; return res; } ll sum (ll l, ll r) { if (l > r) return 0; return get(r) - get(l - 1); } }; int main () { ios_base::sync_with_stdio(false); cin.tie(nullptr); ll n, k; cin >> n >> k; Fenwick sum(n), sumi(n); vector <ll> a(n + 1); for (ll i = 1; i <= n; i++) { cin >> a[i]; sum.upd(i, a[i]); sumi.upd(i, a[i] * i); } ll q; cin >> q; while (q--) { int type; cin >> type; if (type == 1) { vector <ll> b(k), val(k); for (ll i = 0; i < k; i++) { cin >> b[i]; val[i] = a[b[i]]; } for (ll i = 0; i < k; i++) { ll r = val[(i + 1) % k] - val[i]; if (r) { sum.upd(b[i], r); sumi.upd(b[i], r * b[i]); a[b[i]] = val[(i + 1) % k]; } } } else { ll l, r, m; cin >> l >> r >> m; ll ans = 0; if (l <= l + m - 2) ans += sumi.sum(l, l + m - 2) - (l - 1) * sum.sum(l, l + m - 2); if (l + m - 1 <= r - m + 1) ans += m * sum.sum(l + m - 1, r - m + 1); if (r - m + 2 <= r) ans += (r + 1) * sum.sum(r - m + 2, r) - sumi.sum(r - m + 2, r); cout << ans << el; } } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...