2018年5月31号(树状数组)

  今天,老师讲了树状数组,本蒟蒻有点懵懵懂懂,但是基本模板我还是记到的;

  先是讲下原理:

  今晚学了树状数组…所以呢我来总结一下自己对它的理解… 
  这里写图片描述 
  这图是在网上随便找找的… 
  由图可以得出: 
  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 }
View Code

  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 }
View Code

  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 }
View Code

over

Keep on going never give up.   勇往直前, 决不放弃!
原文地址:https://www.cnblogs.com/zssmg/p/9119354.html