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

Posted zssmg

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

以上是关于2018年5月31号(树状数组)的主要内容,如果未能解决你的问题,请参考以下文章

Python中如何将2000年1月1日至2020年12月31号,每一天的日期信息都打印出来?Python编程?

2018年6月1号(线段树)

2018年6月5号(离散化)

程序员札记#学习&&塑形# 2018年5月16号

程序员札记#学习&&塑形# 2018年5月19号

程序员札记#学习&&塑形# 2018年5月21号