제출 #640903

#제출 시각아이디문제언어결과실행 시간메모리
640903alex_2008Addk (eJOI21_addk)C++14
92 / 100
235 ms7344 KiB
#include <iostream> #include <vector> #include <algorithm> typedef long long ll; using namespace std; const int N = 1e5 + 10; ll pref[N], a[N], prefsum[N], suffsum[N]; int main() { ll n, k; cin >> n >> k; for (ll i = 1; i <= n; i++) { cin >> a[i]; pref[i] = pref[i - 1] + a[i]; prefsum[i] = prefsum[i - 1] + i * a[i]; } for (ll i = n; i >= 1; i--) { suffsum[i] = suffsum[i + 1] + (n + 1 - i) * a[i]; } int q; cin >> q; while (q--) { int t, x; cin >> t; if (t == 1) { cin >> x; } else { ll l, r, m; cin >> l >> r >> m; if ((r - l + 1) > 2 * (m - 1)) { ll ans = prefsum[l + m - 2] - prefsum[l - 1] + suffsum[r - m + 2] - suffsum[r + 1]; ans -= (l - 1) * (pref[l + m - 2] - pref[l - 1]); ans -= (n - r) * (pref[r] - pref[r - m + 1]); ans += m * (pref[r - m + 1] - pref[l + m - 2]); cout << ans << "\n"; } else { ll sz = r - l + 1 - m; ll ans = prefsum[l + sz - 1] - prefsum[l - 1] + suffsum[r - sz + 1] - suffsum[r + 1]; ans -= (l - 1) * (pref[l + sz - 1] - pref[l - 1]); ans -= (n - r) * (pref[r] - pref[r - sz]); ans += (sz + 1) * (pref[r - sz] - pref[l + sz - 1]); cout << ans << "\n"; } } } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...