Submission #1298241

#TimeUsernameProblemLanguageResultExecution timeMemory
1298241reginoxAddk (eJOI21_addk)C++20
100 / 100
205 ms6408 KiB
#include <bits/stdc++.h> #define ll long long #define ld long double #define all(v) begin(v), end(v) #define pi pair<int, int> #define vi vector<int> using namespace std; const int N = 1e5+3; int n, k, a[N]; ll seg[N<<2], add[N<<2]; void down(int id, int l, int r){ int mid = (l+r)/2; seg[id*2] += add[id] * (mid-l+1); seg[id*2+1] += add[id] * (r - mid); add[id*2] += add[id]; add[id*2+1] += add[id]; add[id] = 0; return ; } void upd(int id, int l, int r, int u, int v, ll w){ if(v < l || r < u) return ; if(u <= l && r <= v){ seg[id] += w * (r-l+1); add[id] += w; return ; } down(id, l, r); int mid = (l+r)/2; upd(id*2, l, mid, u, v, w); upd(id*2+1, mid+1, r, u, v, w); seg[id] = seg[id*2] + seg[id*2+1]; } ll get(int id, int l, int r, int u, int v){ if(v < l || r < u) return 0; if(u <= l && r <= v) return seg[id]; down(id, l, r); int mid = (l+r)/2; return get(id*2, l, mid, u, v) + get(id*2+1, mid+1, r, u, v); } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cin >> n >> k; for(int i = 1; i <= n; i++) cin >> a[i]; int q; cin >> q; vector<int> v(k); ll z = 0; for(int i = 1; i <= n; i++){ z += a[i]; upd(1, 1, n, i, i, z); } while(q--){ int t; cin >> t; if(t == 1){ for(auto &x:v) cin >> x; int fi = a[v[0]]; for(int i = 0; i < k; i++){ int &cur = a[v[i]]; if(i == k - 1){ upd(1, 1, n, v[i], n, fi - cur); cur = fi; } else{ upd(1, 1, n, v[i], n, a[v[i+1]] - a[v[i]]); a[v[i]] = a[v[i+1]]; } } // for(int i = 1; i <= n; i++) cout << a[i] << " "; // cout << "\n"; // for(int i = 1; i <= n; i++) cout << get(1, 1, n, i, i) << " "; // cout << "\n"; } else{ int l, r, m; cin >> l >> r >> m; // cout << l+m-1 << " " << r << " " << l-1 << " " << r-m << "\n"; // cout << get(1, 1, n, l+m-1, r) << "\n"; // cout << get(1, 1, n, max(1, l-1), r-m) << "\n"; cout << get(1, 1, n, l+m-1, r) - get(1, 1, n, max(1, l-1), r-m) << "\n"; } } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...