Submission #1249035

#TimeUsernameProblemLanguageResultExecution timeMemory
1249035wedonttalkanymoreAddk (eJOI21_addk)C++20
100 / 100
201 ms27788 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; #define int long long #define pii pair<ll, ll> #define fi first #define se second const ll N = 2e5 + 5; int n, k, q, a[N]; struct ST { vector<pii> st; ST(int _n) { st.assign(4 * (_n + 1), {0, 0}); } void update(int i, int l, int r, int p, pii v) { if (l == r) { st[i] = v; return; } int m = (l + r) >> 1; if (p <= m) update(2 * i, l, m, p, v); else update(2 * i + 1, m + 1, r, p, v); st[i].fi = st[2 * i].fi + st[2 * i + 1].fi; st[i].se = st[2 * i].se + st[2 * i + 1].se; } pii get(int i, int l, int r, int u, int v) { if (u > r || v < l) return {0, 0}; if (u <= l && r <= v) return st[i]; int m = (l + r) >> 1; pii L = get(2 * i, l, m, u, v); pii R = get(2 * i + 1, m + 1, r, u, v); return {L.fi + R.fi, L.se + R.se}; } }; ST st1(N + 1); ST st2(N + 1); signed main() { ios::sync_with_stdio(false); cin.tie(0); cin >> n >> k; for (int i = 1; i <= n; i++) { cin >> a[i]; st1.update(1, 1, n, i, {a[i] * i, a[i] * (n - i + 1)}); st2.update(1, 1, n, i, {a[i], 0}); } cin >> q; while (q--) { int type; cin >> type; if (type == 1) { vector<int> pos(k + 1), val(k); for (int i = 1; i <= k; i++) cin >> pos[i]; for (int i = 2; i <= k; i++) val[i - 2] = a[pos[i]]; val[k - 1] = a[pos[1]]; for (int i = 0; i < k; i++) { int p = pos[i + 1], nv = val[i]; st1.update(1, 1, n, p, {nv * p, nv * (n - p + 1)}); st2.update(1, 1, n, p, {nv, 0}); a[p] = nv; } } else { int l, r, m; cin >> l >> r >> m; int ans = 0; if (l <= r) ans += st2.get(1, 1, n, l, r).fi * m; int b1 = l, e1 = l + m - 1; if (b1 <= e1) ans += st1.get(1, 1, n, b1, e1).fi - st2.get(1, 1, n, b1, e1).fi * e1; int b2 = r - m + 1, e2 = r; if (b2 <= e2) ans += st2.get(1, 1, n, b2, e2).fi * b2 - st1.get(1, 1, n, b2, e2).fi; cout << ans << '\n'; } } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...