今天,老师讲了树状数组,本蒟蒻有点懵懵懂懂,但是基本模板我还是记到的;
先是讲下原理:
今晚学了树状数组…所以呢我来总结一下自己对它的理解…
这图是在网上随便找找的…
由图可以得出:
c1=a1;
c2=c2+c1=a1+a2;
c3=a3;
c4=c4+c3+c2=a1+a2+a3+a4;
c5=a5;
c6=c6+c5=a5+a6;
c7=a7;
c8=c8+c7+c6+c4=a1+a2+a3+a4+a5+a6+a7+a8;
前k项和:
s1=c1=a1;
s2=c2+c1=a1+a2;
s3=c3=a3;
s4=c4+c3+c2=a1+a2+a3+a4;
s5=a5;
s6=c6=c6+c5=a5+a6;
s7=c7=a7;
s8=c8+c7+c6+c4=a1+a2+a3+a4+a5+a6+a7+a8;
上面那张图你可能会看不懂,接下来是一张好图:
那些数字的边上上是二进制,我们就是从他的二进制考虑;
1.lowbit
1 long long er(long long k) 2 { 3 return k&-k; 4 }
2.更新
1 void add(long long x,long long y) 2 { 3 while(x<=n) 4 { 5 jie[x]+=y; 6 x+=er(x); 7 } 8 }
3.求值
1 long long qiu(long long x) 2 { 3 long long tot=0; 4 while(x!=0) 5 { 6 tot+=jie[x]; 7 x-=er(x); 8 } 9 return tot; 10 }
over
原文地址:https://www.cnblogs.com/zssmg/p/9119354.html
时间: 2024-10-09 02:42:50