总结(18.5.31)
Posted jrzztd
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了总结(18.5.31)相关的知识,希望对你有一定的参考价值。
今天学习了树状数组,树状数组大概有单点更新,区间查询;区间更新,单点
查询;区间更新,区间查询三种。如果给你n个数,然后进行q次询问,
每次询问一个区间[x,y]的和,如果用暴力枚举的话,数据量大肯定是
会超时的,所以可以利用树状数组来优化。树状数组的具体操作
是根据下标二进制来优化的,过程比较复杂。
单点更新,区间查询的函数:
1 int lowbit(int t) 2 { 3 return t&(-t); 4 } 5 void add(int x,int y) 6 { 7 for(int i=x;i<=n;i+=lowbit(i)) 8 c[i]+=y; 9 } 10 int print(int x) 11 { 12 int ans=0; 13 for(int i=x;i;i-=lowbit(i)) 14 ans+=c[i]; 15 return ans; 16 }
这个模板代码我觉得还是没有问题的,但是我的水平
也就写模板吧。
然后今天还学了一下区间更新,单点查询,这个也
比较容易,只需每次对区间[l,r]的l和r-1进行加减操作
就行了。
以上是关于总结(18.5.31)的主要内容,如果未能解决你的问题,请参考以下文章