#include <bits/stdc++.h>
#define ll long long
#define ss second
#define ff first
using namespace std;
#pragma GCC optimize("O3")
const ll N = 1e5 + 5;
pair<ll, ll> st[4 * N];
vector<ll>a;
void build(ll l, ll r, ll v){
    if(l == r){
        st[v] = {a[l], a[l] * (l + 1)};
        return ;
    }
    ll mid = (l + r) >> 1;
    build(l, mid, (v << 1)); build(mid + 1, r, (v << 1) + 1);
    st[v] = {st[(v << 1)].ff + st[(v << 1) + 1].ff, st[(v << 1)].ss + st[(v << 1) + 1].ss};
}
pair<ll, ll> get(ll l, ll r, ll ql, ll qr, ll v){
    if(r < ql or l > qr) return {0, 0};
    if(ql <= l and qr >= r) return st[v];
    ll mid = (l + r) >> 1;
    pair<ll, ll> p1 = get(l, mid, ql, qr, (v << 1));
    pair<ll, ll> p2 = get(mid + 1, r, ql, qr, (v << 1) + 1);
    return {p1.ff + p2.ff, p1.ss + p2.ss};
}
void upd(ll l, ll r, ll id, ll val, ll v){
    if(l == r){
        a[l] = val;
        st[v] = {a[l], a[l] * (l + 1)};
        return ;
    }
    ll mid = (l + r) >> 1;
    if(id <= mid) upd(l, mid, id, val, (v << 1));
    else upd(mid + 1, r, id, val, (v << 1) + 1);
    st[v] = {st[(v << 1)].ff + st[(v << 1) + 1].ff, st[(v << 1)].ss + st[(v << 1) + 1].ss};
}
void _(){
    ll n, kk; cin >> n >> kk;
    a.resize(n); for(ll &i : a) cin >> i;
    ll q; cin >> q; build(0, n - 1, 1);
    while(q--){
        ll t; cin >> t;
        if(t == 1){
            vector<ll>ids(kk + 1);
            for(ll i = 0; i < kk; i++) {cin >> ids[i]; --ids[i];}
            if(!kk) continue ;
            ids[kk] = ids[0]; ll st = a[ids[0]];
            for(ll i = 1; i <= kk; i++){
                upd(0, n - 1, ids[i - 1], a[ids[i]], 1);
            } upd(0, n - 1, ids[kk - 1], st, 1);
        }
        else{
            ll l, r, m; cin >> l >> r >> m;
            ll sz = r - l + 1, p1, mid, p2, k = min(m, sz - m + 1);
            auto pr1 = get(0, n - 1, 0, r - k, 1);
            auto pr2 = get(0, n - 1, 0, l + k - 3, 1);
            auto pr3 = get(0, n - 1, 0, l - 2, 1);
            auto pr4 = get(0, n - 1, 0, r - 1, 1);
            mid = k * (pr1.ff - pr2.ff);
            p1 = (pr2.ss - pr3.ss) - (pr2.ff - pr3.ff) * (l - 1); 
            p2 = (pr4.ff - pr1.ff) * k - ((pr4.ss - pr1.ss) - (pr4.ff - pr1.ff) * (r - k + 1));
            cout << p1 + mid + p2 << '\n';
        }
    }
}
signed main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0); cout.tie(0); _();
}
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... |