Submission #1280611

#TimeUsernameProblemLanguageResultExecution timeMemory
1280611daniyar228Addk (eJOI21_addk)C++20
0 / 100
2095 ms1672 KiB
#include <bits/stdc++.h>
using namespace std;
using i64 = long long;
using pii = pair<i64, i64>;
#pragma GCC optimize("Ofast")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,avx2,mmx,fma,avx,tune=native")
const int N = 200'000, inf = 1'000'000'000;
const i64 infl = 1'000'000'000'000'000'000;
#define ff first
#define ss second
#define pb push_back
#define ins insert
#define sz(x) (int)(x).size()
#define all(x) x.begin(), x.end()
#define rall(x) x.rbegin(), x.rend()
#define NO cout << "NO\n"
#define YES cout << "YES\n"
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
int __tc = 1;
int n, k, q;
int a[N+5], d[15];
i64 t[N*4+5];
void build(int v, int l, int r) {
    if (l == r) {
        t[v] = a[l];
        return;
    }
    int mid = l + (r - l) / 2;
    build(v + v, l, mid);
    build(v + v + 1, mid + 1, r);
    t[v] = t[v + v] + t[v + v + 1];
}
void upd(int v, int l, int r, int pos, int x) {
    if (l == r) {
        t[v] = a[l];
        return;
    }
    int mid = l + (r - l) / 2;
    if (pos <= mid) upd(v + v, l, mid, pos, x);
    else upd(v + v + 1, mid + 1, r, pos, x);
    t[v] = t[v + v] + t[v + v + 1];
}
i64 get(int v, int l, int r, int tl, int tr) {
    if (l > tr || r < tl) return 0;
    if (tl <= l && r <= tr) return t[v];
    int mid = l + (r - l) / 2;
    return get(v + v, l, mid, tl, tr) + get(v + v + 1, mid + 1, r, tl, tr);
}
void solve() {
    cin >> n >> k;
    for (int i = 1; i <= n; i++) cin >> a[i];
    build(1, 1, n);
    cin >> q;
    for (int i = 1; i <= q; i++) {
        int tp;
        cin >> tp;
        if (tp == 1) {
            for (int j = 1; j <= k; j++) {
                cin >> d[j];
            }
            if (k == 1) continue;
            int FF = a[d[1]];
            for (int j = 2; j <= k; j++) {
                a[d[j - 1]] = a[d[j]];
                upd(1, 1, n, d[j], a[d[j - 1]]);
            } upd(1, 1, n, k, FF);
        }
        if (tp == 2) {
            int l, r, m;
            cin >> l >> r >> m;
            i64 res = 0;
            for (int i = l; i + m - 1 <= r; i++) res += get(1, 1, n, i, i + m - 1);
            cout << res << '\n';
        }
    }
}
int main() {
    ios_base::sync_with_stdio(false); cin.tie(nullptr); 
    // cin >> __tc;
    for (int _tc = 1; _tc <= __tc; _tc++) {
        solve();
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...