当前位置 : 主页 > 网络编程 > 其它编程 >

自用模板,树状数组

来源:互联网 收集:自由互联 发布时间:2023-07-02
#include#include#include#includeusingnamespacestd;intn,m,a[11000],c[110 include include include include using namespace std;int n,m,a[11000],c[11000];//差分建树,区间更新int lowbit(int x){return x}void updata(int i,int k)//单点更新
#include#include#include#includeusingnamespacestd;intn,m,a[11000],c[110

include

include

include

include

using namespace std;int n,m,a[11000],c[11000];//差分建树,区间更新int lowbit(int x){return x}void updata(int i,int k)//单点更新{while(i<=n){c[i]+=k;i+=lowbit(i);}}int getsum(int i)//单点查询{int sum=0;while(i>0){sum+=c[i];i-=lowbit(i);}return sum;}//区间查询

int main(){cin>>n;for (i=1;i<=n;i++){cin>>a[i];updata(i,a[i]-a[i-1]);//输入初值的时候,也相当于更新了值}//区间更新(还是单点...)//[x,y]区间内加上kupdata(x,k);updata(y+1,-k);

return 0;

}


include

include

include

using namespace std;int n,m,a[11000],sum1[11000],sum2[11000];int lowbit(int x){return x}void updata(int i,int k){int x=i;while(i<=n){sum1[i]+=k;sum2[i]+=k(x-1);i+=lowbit(i);}}int getsum(int i)//求前缀和{int res=0,x=i;while (i>0){res+=xsum1[i]-sum2[i];i-=lowbit(i);}return res;}int main(){int i,j;cin>>n;for (i=1;i<=n;i++){cin>>a[i];updata(i,a[i]-a[i-1]);//差分}//[x,y]区间内加上kupdata(x,k);updata(y+1,-k);

int sum=getsum(y)-getsum(x-1);//求区间和 return 0;

}

自用模板,树状数组

上一篇:手机变卡怎么办
下一篇:没有了
网友评论