1 条题解
-
0
#include <bits/stdc++.h> using namespace std; #define int long long const int N = 2e6 + 5; int t1[N], t2[N], n; int a[N] = {0}, d[N]; int lowbit(int x) { return x & -x; } void init() { for (int i = 1; i <= n ; i++) { t1[i] += d[i]; t2[i] += d[i] * i; int j = i + lowbit(i); if (j <= n) t1[j] += t1[i], t2[j] += t2[i]; } } void add(int x, int k) { int v = x * k; while (x <= n) { t1[x] += k; t2[x] += v; x += lowbit(x); } } void add(int l, int r, int v) { add(l, v), add(r + 1, -v); } int getsum(int x) { // sum(1 - x) int ans = 0; int l = x + 1; while (x > 0) { ans += ((t1[x] * l) - t2[x]); x -= lowbit(x); } return ans; } int getsum(int l, int r) { return getsum(r) - getsum(l - 1); } void solve() { int m; cin >> n >> m; for (int i = 1; i <= n ; i++) { cin >> a[i]; d[i] = a[i] - a[i - 1]; } init(); while (m--) { int o; cin >> o; if (o == 1) { int x, y, k; cin >> x >> y >> k; add(x, y, k); } else { int x, y; cin >> x >> y; cout << getsum(x, y) << '\n'; } } } signed main() { ios::sync_with_stdio(false); cin.tie(nullptr); int t = 1; //cin >> t; while (t--) { solve(); } return 0; }
- 1
信息
- ID
- 1004
- 时间
- 1000ms
- 内存
- 512MiB
- 难度
- (无)
- 标签
- (无)
- 递交数
- 0
- 已通过
- 0
- 上传者