赞
踩
树状数组是一种类似于前缀和的数据结构,但是前缀和的修改操作是 O(n)的,查询是 O(1) 的 。所以就有了树状数组这个数据结构,它的两种操作被中和了,都是 O(logn) 的。
int nums[N]; //算出最后一位1的位置 int lowbit (int x) { return x & -x; } //查询前缀和,时间复杂度O(logn) int ask(int x) { int res=0; for(;x;x-=lowbit(x)) res+=nums[x]; return res; } //单点修改,时间复杂度O(logn) int add(int x,int y)//nums[x]+y { for(;x<=n;x+=lowbit(x)) nums[x]+=y; }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。