제출 #632564

#제출 시각아이디문제언어결과실행 시간메모리
632564pragmatistAddk (eJOI21_addk)C++17
100 / 100
810 ms4268 KiB
#include<bits/stdc++.h> #define ll long long #define nl "\n" #define sz(v) (int)v.size() #define pb push_back #define x first #define y second using namespace std; using pii = pair<int, int>; const int N = (int)1e5 + 7; int n, k, q, b[N], a[N]; ll p[N], z[N]; set<int> c; void build() { for(int i = 1; i <= n; ++i) { a[i] = b[i]; p[i] = p[i - 1] + a[i]; z[i] = z[i - 1] + p[i]; } } ll get(int l) { ll ans = z[l]; for(auto i : c) { if(i > l) continue; int ch = l - i + 1; ans -= 1ll * ch * a[i]; ans += 1ll * ch * b[i]; } return ans; } signed main() { ios_base::sync_with_stdio(NULL); cin.tie(0); cout.tie(0); cin >> n >> k; for(int i = 1; i <= n; ++i) { cin >> a[i]; b[i] = a[i]; } build(); cin >> q; while(q--) { char tp; cin >> tp; if(tp == '1') { vector<int> v(k); for(auto &x : v) cin >> x; int o = b[v[0]]; for(int i = 0; i < k - 1; ++i) { b[v[i]] = b[v[i + 1]]; c.insert(v[i]); } c.insert(v.back()); b[v.back()] = o; if(1ll * sz(c) * sz(c) >= n) { build(); c.clear(); } } else { int l, r, m; cin >> l >> r >> m; ll ans = get(r) - get(l + m - 2); ans -= get(r - m) - (l - 2 < 0 ? 0 : get(l - 2)); cout << ans << nl; } } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...