Submission #1029768

# Submission time Handle Problem Language Result Execution time Memory
1029768 2024-07-21T09:54:08 Z armashka Addk (eJOI21_addk) C++17
56 / 100
173 ms 8788 KB
#include<bits/stdc++.h>

// #pragma GCC target("avx2")
// #pragma GCC optimize("Ofast")
// #pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")

using namespace std;

#define fast ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#define file(s) freopen(s".in", "r", stdin);freopen(s".out", "w", stdout);
#define all(v) v.begin(),v.end()
#define rall(v) v.rbegin(),v.rend()
#define pb push_back
#define pf push_front
#define ppb pop_back
#define ft first
#define sd second
#define ll long long
#define ull unsigned ll
#define pii pair<int,int>
#define pll pair<ll,ll>
const int N = 1e5 + 10;
const int M = 1e6 + 5;
const int B = 316;
const ll msize = 2;
const ll mod1 = 1e9 + 7;
const ll mod2 = 998244353;
const long double Phi = acos(-1);
const long long inf = 2e18;
const vector <pair<int, int>> dir = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}};

ll binmul(ll x, ll ti, ll m);
ll binpow(ll x, ll ti, ll m);

struct node {
    ll sum, pref, suf;
} t[N * 4];

ll n, k, a[N];

node merge(node a, node b) {
    return {
        a.sum + b.sum,
        a.pref + b.pref,
        a.suf + b.suf
    };
}

void upd(int pos, ll val, int v = 1, int tl = 1, int tr = n) {
    if (tl == tr) {
        t[v] = {val, val * tl, val * (n - tl + 1)};
        return;
    }
    int tm = (tl + tr) / 2;
    if (pos <= tm) upd(pos, val, v + v, tl, tm);
    else upd(pos, val, v + v + 1, tm + 1, tr);
    t[v] = merge(t[v + v], t[v + v + 1]);
}

node get(int l, int r, int v = 1, int tl = 1, int tr = n) {
    if (r < tl || tr < l) return {0, 0, 0};
    if (l <= tl && tr <= r) return t[v];
    int tm = (tl + tr) / 2;
    return merge(
        get(l, r, v + v, tl, tm),
        get(l, r, v + v + 1, tm + 1, tr)
    );
}

const void solve() {
    cin >> n >> k;
    for (int i = 1; i <= n; ++ i) {
        cin >> a[i];
        upd(i, a[i]);
    }

    int q; cin >> q;
    vector <int> v(k);
    for (int i = 1; i <= q; ++ i) {
        int tp;
        cin >> tp;
        if (tp == 1) {
            for (int i = 0; i < k; ++ i) {
                cin >> v[i];
            }
            int tmp = v[0], tmpVal = a[v[0]];
            for (int i = 0; i < k; ++ i) {
                if (i < k - 1) {
                    upd(v[i], a[v[i + 1]]);
                    a[v[i]] = a[v[i + 1]];
                    v[i] = v[i + 1];
                } else {
                    upd(v[i], a[tmp]);
                    v[i] = tmp;
                    a[v[i]] = tmpVal;
                }
            }
        } else {
            int l, r, m;
            cin >> l >> r >> m;

            m = min(m, (r - l + 1) - m + 1);

            int x = l + m - 1, y = r - m + 1;

            node sum1 = get(l, x), sum2 = get(y, r), sum3 = get(x + 1, y - 1);
            // cout << l << " - " << x << " - " << y << " - " << r << "\n";
            // cout << sum1.pref << " " << sum1.sum << "\n";
            // cout << sum2.suf << " " << sum2.sum << "\n";
            // cout << sum3.sum << "\n";

            cout << (sum1.pref - sum1.sum * (l - 1)) + (sum2.suf - sum2.sum * (n - r)) + (sum3.sum * m) << "\n";
        }
    }
}

int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);
    srand(time(NULL));

    // file("promote");

    // freopen("input.txt", "r", stdin);
    // freopen("output.txt", "w", stdout);

    int tt = 1;
    // cin >> tt;
    for (int i = 1; i <= tt; ++ i) {
        // cout << "Caso #" << i << "\n";
        solve();
    }

    #ifndef ONLINE_JUDGE
    cerr << "\n" << 1.0 * clock() / CLOCKS_PER_SEC << " s.\n";
    #endif

    return 0;
}


// Template functions
ll binmul(ll x, ll ti, ll m) { ll res = 0;while (ti){if(ti & 1)res += x;x += x;ti >>= 1; x %= m; res %= m;} return res;}
ll binpow(ll x, ll ti, ll m) { ll res = 1;while (ti){if(ti & 1)(res *= x)%=m;(x*=x)%=m;ti >>= 1; x %= m; res %= m;} return res;}
# Verdict Execution time Memory Grader output
1 Incorrect 1 ms 348 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 24 ms 2392 KB Output is correct
2 Correct 37 ms 2604 KB Output is correct
3 Correct 52 ms 4436 KB Output is correct
4 Correct 94 ms 8212 KB Output is correct
5 Correct 173 ms 8788 KB Output is correct
6 Correct 138 ms 8532 KB Output is correct
7 Correct 130 ms 8528 KB Output is correct
# Verdict Execution time Memory Grader output
1 Incorrect 79 ms 4264 KB Output isn't correct
2 Halted 0 ms 0 KB -