제출 #632481

#제출 시각아이디문제언어결과실행 시간메모리
632481pragmatistKpart (eJOI21_kpart)C++17
0 / 100
1 ms340 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 #define int long long 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]; vector<pii> 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, x] : c) { if(i > l) continue; int ch = l - i + 1; ans -= 1ll * ch * a[i]; ans += 1ll * ch * x; } 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.pb({v[i], b[v[i]]}); } c.pb({v.back(), o}); 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...