首页 > 编程语言 > 详细

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

时间:2018-05-31 22:28:42      阅读:240      评论:0      收藏:0      [点我收藏+]

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

  先是讲下原理:

  今晚学了树状数组…所以呢我来总结一下自己对它的理解… 
  技术分享图片 
  这图是在网上随便找找的… 
  由图可以得出: 
  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号(树状数组)

原文:https://www.cnblogs.com/zssmg/p/9119354.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!