Submission #1309787

#TimeUsernameProblemLanguageResultExecution timeMemory
1309787empyr1nAddk (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 0ll;
        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;
            ans += sumi.sum(l, l + m - 2) - (l - 1) * sum.sum(l, l + m - 2);
            ans += m * sum.sum(l + m - 1, r - m + 1);
            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...