Submission #1172774

#TimeUsernameProblemLanguageResultExecution timeMemory
1172774nagibatorAddk (eJOI21_addk)C++20
36 / 100
2095 ms2256 KiB
#include <bits/stdc++.h>
#define nn '\n'
#pragma GCC optimize("O3")
#define int long long
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,avx2,mmx,fma,avx,tune=native")
#define pb push_back
#define all(x) x.begin(), x.end()
#define sec second
#define vec std::vector
using namespace std;
const int N = 2e5 + 2;
const int inf = 1e15;
const int mod = 1e9 + 7;
int T = 1, a[N], t[4 * N], add[4 * N];
void push( int v, int tl, int tr )
{
	if( add[v] == 0 )
		return;
	t[v] += (tr - tl + 1) * add[v];
	if( tl < tr )
	{
		add[v + v] += add[v];
		add[v + v + 1] += add[v];
	}
	add[v] = 0;
}
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 l, int r, int x )
{
	push(v, tl, tr);
	if( tr < l || r < tl )
		return;
	if( l <= tl && tr <= r )
	{
		add[v] += x;
		push(v, tl, tr);
		return;
	}
	int mid = (tl + tr) / 2;
	upd(v + v, tl, mid, l, r, x);
	upd(v + v + 1, mid + 1, tr, l, r, x);
	t[v] = t[v + v] + t[v + v + 1];
}
int get( int v, int tl, int tr, int l, int r )
{
	push(v, tl, tr);
	if( tr < l || r < tl )
		return 0;
	if( l <= tl && tr <= r )
		return t[v];
	int mid = (tl + tr) / 2;
	int x = get(v + v, tl, mid, l, r);
	int y = get(v + v + 1, mid + 1, tr, l, r);
	return x + y;
}
vec<pair<int,int>> p;
signed main()
{
	ios_base::sync_with_stdio(0);
	cin.tie(0);
    int n, k;
    cin >> n >> k;
    vec<int> a(n);
    for (int i = 0; i < n; i++) {
        cin >> a[i];
    }

    int q;
    cin >> q;
    while (q--) {
        int type;
        cin >> type;
        if (type == 1) {
            vec<int> b(k);
            for (int i = 0; i < k; i++) {
                cin >> b[i];
            }
            int pos  = a[b[0]];
            for (int i = 0; i < k  - 1; i++) {
                a[b[i]] = a[b[i + 1]];
            }
            a[b[k - 1]] = pos;
        } else {
            int l ,r ,m;
            cin >> l >> r>> m;
            l--;r--;
           vector<int> pref(r - l + 2, 0);
            for (int i = 0; i <= r - l; ++i) {
                pref[i + 1] = pref[i] + a[l + i];
            }
            int sum = 0;
            for (int i = 0; i <= (r - l + 1) - m; ++i) {
                sum += pref[i + m] - pref[i];
            }
            cout << sum << nn;
        }
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...