Lowbit
of the array The i -bit stores the length at the end of i as lowbit( i) of the paragraph and .
int lowbit (x) { return x &-x;}
Some
int N, BT[MAXN]; void btadd (intint delta) { for (; Pos <= n; pos + = lowbit ( p)) { + = delta; }}
Inquire
int btsum (int pos) { int0; for (; pos; pos-= lowbit (p)) {+ = bt[p]; } return ans;}
Full code
Slightly different, dad once taught me that the tree-like array was so written
//Line Tree Exercise 1#include <iostream>#include<cstdio>#include<cstring>#defineMAXN 100010using namespacestd;intN,M,T[MAXN];voidAddintKintz) { while(k<=N) {t[k]+=Z; K+=k& (-k); }}intFindintk) { intans=0; while(k) {ans+=T[k]; K-=k& (-k); } returnans;}intMain () {inti,j,k,x; scanf ("%d",&N); for(i=1; i<=n;i++) {scanf ("%d",&x); Add (i,x); } scanf ("%d",&m); for(i=1; i<=m;i++) { intx,y,z,w; scanf ("%d",&W); scanf ("%d%d",&x,&y); if(w==1) Add (x, y); Else if(w==2) printf ("%d\n", find (Y)-find (X-1)); } return 0;}
//Line Tree Exercise 2#include <iostream>using namespacestd;intt[100010],n,m;voidAddintKintz) { while(k<=N) {t[k]+=Z; K+=k& (-k); }}intFindinta) { intans=0; while(a) {ans+=T[a]; A-=a& (-a); } returnans;}intMain () {ints; CIN>>N; for(intI=1; i<=n;i++) Cin>>s, add (i,s); CIN>>m; for(intI=1; i<=m;i++) { intx,y,w,z; CIN>>W; if(w==2) {cin>>x; cout<<find (x)-find-X1) <<Endl; } if(w==1) {cin>>x>>y>>Z; for(intj=x;j<=y;j++) Add (j,z); } }}
Tree-like array Laekov