제출 #1280648

#제출 시각아이디문제언어결과실행 시간메모리
1280648kkkkkAddk (eJOI21_addk)C++20
0 / 100
74 ms4688 KiB
#include <bits/stdc++.h> #define int long long using namespace std; const int N = 1e5 + 11; const int inf = 1e18; int a[N], s[N * 4], rs[N * 4], p[N * 4]; void updp(int v, int tl, int tr, int pos, int x){ if(tl == tr){ p[v] = x; return; } int mid = (tl + tr) >> 1; if(pos <= mid) updp(v + v, tl, mid, pos, x); else updp(v + v + 1, mid + 1, tr, pos, x); p[v] = p[v + v] + p[v + v + 1]; } void upds(int v, int tl, int tr, int pos, int x){ if(tl == tr){ s[v] = x; return; } int mid = (tl + tr) >> 1; if(pos <= mid) upds(v + v, tl, mid, pos, x); else upds(v + v + 1, mid + 1, tr, pos, x); s[v] = s[v + v] + s[v + v + 1]; } void updrs(int v, int tl, int tr, int pos, int x){ if(tl == tr){ rs[v] = x; return; } int mid = (tl + tr) >> 1; if(pos <= mid) updrs(v + v, tl, mid, pos, x); else updrs(v + v + 1, mid + 1, tr, pos, x); rs[v] = rs[v + v] + rs[v + v + 1]; } int getp(int v, int tl, int tr, int l, int r){ if(tl > r || tr < l) return 0; if(l <= tl && tr <= r) return p[v]; int mid = (tl + tr) >> 1; return getp(v + v, tl, mid, l, r) + getp(v + v + 1, mid + 1, tr, l, r); } int gets(int v, int tl, int tr, int l, int r){ if(tl > r || tr < l) return 0; if(l <= tl && tr <= r) return s[v]; int mid = (tl + tr) >> 1; return gets(v + v, tl, mid, l, r) + gets(v + v + 1, mid + 1, tr, l, r); } int getrs(int v, int tl, int tr, int l, int r){ if(tl > r || tr < l) return 0; if(l <= tl && tr <= r) return rs[v]; int mid = (tl + tr) >> 1; return getrs(v + v, tl, mid, l, r) + getrs(v + v + 1, mid + 1, tr, l, r); } signed main(){ ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); int n, k, q; cin >> n >> k; for(int i = 1; i <= n; i++){ cin >> a[i]; updp(1, 1, n, i, a[i]); upds(1, 1, n, i, a[i] * i); updrs(1, 1, n, i, a[i] * (n - i + 1)); } cin >> q; while(q--){ int t; cin >> t; if(t == 1){ vector < int > vec; deque < int > val; for(int i = 0; i < k; i++){ int x; cin >> x; vec.push_back(x); val.push_back(a[x]); } // val.push_back(val[0]); // val.pop_front(); // for(int i = 0; i < k; i++){ // a[vec[i]] = val[i]; // updp(1, 1, n, vec[i], val[i]); // upds(1, 1, n, vec[i], val[i] * vec[i]); // upds(1, 1, n, vec[i], val[i] * (n - vec[i] + 1)); // } } else{ int l, r, m; cin >> l >> r >> m; cout << getp(1, 1, n, l, r) << ' '; int len = (r - l + 1); int ans = getp(1, 1, n, l + len - m, r - len + m) * (len - m + 1); int L = l, R = l + (len - m) - 1; if(L <= R) ans += gets(1, 1, n, L, R) - getp(1, 1, n, L, R) * (L - 1); R = r, L = r - (len - m) + 1; if(L <= R) ans += getrs(1, 1, n, L, R) - getp(1, 1, n, L, R) * (n - R); cout << ans << '\n'; } } } // hello karim nurbakyt sanzhar azamat congratulation europa asia america laplas
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...