哪里有错吗?

P3368 【模板】树状数组 2

没事了
by 正式AFO @ 2018-10-25 11:31:54


``` i&(-1) ``` 真是强
by 岚雪 @ 2018-10-25 11:35:27


@[_yxl_gl_](/space/show?uid=54131) 其实我是不了解其本质的
by 正式AFO @ 2018-10-25 11:45:42


@[5743377_2002](/space/show?uid=36701) ```cpp i & (-i) = LowBit(i) ``` 用于求二进制下从后往前最后一个一
by 岚雪 @ 2018-10-25 13:57:09


```cpp #include<iostream> #include<cstdio> using namespace std; int n, m; int x, y, k, u; int num[100000], tree[100000], f[100000]; int a_sum(int i){ int s=0; while(i>0){ s += tree[i]; i -= i&(-i); } return s; } void update(int i,int value){ while(i<=n){ tree[i]+=value; i+=i&(-i); } } int main(){ cin >> n >> m; for(int i = 1; i <= n; i++){ cin >> num[i]; f[i] = num[i]-num[i-1]; } for(int i = 1; i <= n; i++) for(int j = i-(i&(-i))+1; j <= i; j++) tree[i]+=f[j]; for(int i = 1; i <= m; i++){ cin >> u; if(u == 1){ cin >> x >> y >> k; update(x, k); k = k * (-1); update(y+1, k); } else{ cin >> x; cout << a_sum(x) - a_sum(x-1)<<endl; } } return 0; } ``` 不知道问题出在哪里
by 正式AFO @ 2018-10-30 15:21:19


|