树状数组应用-CSDN博客

34 阅读1分钟
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#include<queue>
#include<stack>
#include<vector>
using namespace std;
//这些都是套路

const int INF=0x3fffffff;
const int maxn=1010;
typedef long long LL;
int a[maxn],c[maxn],n;


void BuildTree(){
memset(c,0,sizeof(c));
for(int i=1;i<=n;i++){
for(int j=i-(i&(-i))+1;j<=i;j++)
c[i]+=a[j]; 
}
}


int Sum(int k){//求前k项和 
int ret=0;
while(k>0){
ret+=c[k];
k=k-(k&(-k));
}
return ret;
}


int Query(int s,int e){//其核心是Sum(k) 
return Sum(e)-Sum(s-1);//注意是s-1, 
}


void Update(int lct,int x){//根据数组下标维护树状数组 
while(lct<=n){
c[lct]+=x;
lct=lct+lct&(-lct); 
} 
}


int main(){//树状数组多用于单点更新,区间查询 
//freopen("data.in","r",stdin);

return 0;
} 


\

\

\