#include<cstdio> #include<cstring> #define maxn 1000001 int c[maxn]; int a[maxn]; int lowbit(int x){ return x&(-x); } int ini(){ //初始化 for(int i=1;i<=maxn;i++){ for(int k=i;k>=i-lowbit(i);k++){ c[i]+=a[k]; } } } void update(int p,int val){ //单点更新 循环:c[i]—> c[ i+lowbit(i) ] (父节点) for( int i=p; i<=maxn ;i+=lowbit(i) ){ c[i]+=val; } } int getsum(int p){ //区间和 循环:sum+=c[i]; i=i-lowbit(i) int sum=0; while(p){ sum+=c[p]; p=p-lowbit(p); } return sum; }