Submission #1280981

#TimeUsernameProblemLanguageResultExecution timeMemory
1280981bnijaamaaAddk (eJOI21_addk)C++20
100 / 100
1956 ms4744 KiB
#include <bits/stdc++.h>

#define nn '\n'
#define int long long
#define pb push_back
#define all(x) x.begin() + 1, x.end()
#define rall(x) x.rbegin(), x.rend()
#define vec std::vector
using namespace std;
const int N = 1e5 + 4;
int t[N * 4];
vec < int > a(N);
void build(int v, int tl, int tr) {
    if (tl == tr) {
        t[v] = a[tl];
        return;
    }
    int mid = (tl + tr) / 2;
    build(v + v, tl, mid);
    build(v + v + 1, mid + 1, tr);
    t[v] = t[v + v] + t[v + v + 1];
}
void upd(int v, int tl, int tr, int pos, int x) {
    if (tl == tr) {
        t[v] = x;
        return;
    }
    int mid = (tl + tr) / 2;
    if (pos <= mid) {
        upd(v + v, tl, mid, pos, x);
    } else {
        upd(v + v + 1, mid + 1, tr, pos, x);
    }
    t[v] = t[v + v] + t[v + v + 1];
}
int get(int v, int tl, int tr, int l, int r) {
    if (r < tl || l > tr) return 0;
    if (l <= tl && tr <= r) return t[v];
    int mid = (tl + tr) / 2;
    int l1 = get(v + v, tl, mid, l, r);
    int r1 = get(v + v + 1, mid + 1, tr, l, r);
    return l1 + r1;
}
//int main
signed main() {
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    int n, k;
    cin >> n >> k;
    for (int i = 1; i <= n; i++) cin >> a[i];
    build(1, 1, n);
    int q;
    cin >> q;
    while (q--) {
        int type;
        cin >> type;
        if (type == 1) {
            vector < int > ans( 1 + k);
            for (int i = 1; i <= k; ++i) {
                cin >> ans[i]; 
            }
            vector < int > temp(k + 1);
            for (int i = 1; i <= k; ++i) {
                temp[i] = a[ans[i]];
            }
            for (int i = 1; i <= k - 1; ++i) {
                a[ans[i]] = temp[i + 1];
                upd(1, 1, n, ans[i], a[ans[i]]);
            }
            a[ans[k]] = temp[1];
            upd(1, 1, n, ans[k], a[ans[k]]);
            //for(int i = 1 ; i <= n ; i++) cout << a[i] << ' ';
        } else {
            int l, r, m;
            cin >> l >> r >> m;
            int sum = get(1, 1, n, l, r) * m ;
            for(int i = 1 ; i <= m - 1 ; i++ , l++)
            {
                sum -= a[l] *(m - i);
            }
            for(int i = 1; i <= m - 1 && r >= r - m + 1 ; i++ , r--)
            {
                sum -= a[r] * (m - i);
            }
            cout << sum << nn ;
        }
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...