1 solutions
-
3
题意
稍微讲一下,模板 1 是单点改,区间查;这道是区间改,单点查。
思路
先保存原数组。
再把更改存成差分数组,然后树状数组存差分数组。输出时输出原数组+树状数组(差分数组前缀)。
代码
#include <bits/stdc++.h> using namespace std; const int N = 5e5 + 5; int a[N],c[N]; int n,m; int lowbit(int x){ return x & -x; } void add(int i,int val){ for (;i <= n;i += lowbit(i)) c[i] += val; } int query(int r){ int res = 0; for (;r;r -= lowbit(r)) res += c[r]; return res; } int main(int argc, char **argv){ cin >> n >> m; for (int i = 1;i <= n;i++){ cin >> a[i]; } while (m--){ int op; cin >> op; if (op == 1){ int l,r,x; cin >> l >> r >> x; add(l,x),add(r + 1,-x); // b[l] += x,b[r + 1] -= x; }else{ int x; cin >> x; printf("%d\n",a[x] + query(x)); } } return 0; }
- 1
Information
- ID
- 275
- Time
- 1000ms
- Memory
- 125MiB
- Difficulty
- 6
- Tags
- # Submissions
- 41
- Accepted
- 15
- Uploaded By