zoukankan      html  css  js  c++  java
  • 树状数组 学习笔记(未完结)

    树状数组和线段树的基本用法相同,大部分功能相同,不过树状数组使用了2进制的思想对线段树的2叉树进行了优化,节约了大量的空间,

    不过树状的数组的代码简洁很短,个人比较懒,能少些就少些点,我更喜欢用树状数组; 

    树状数组中有个最重要的部分:就是如何使用了2进制的思想对区间内的和进行优化,

    重点就在于lowbit这个函数的实现,我对下面的博客进行了点补充,

    lowbit(x) 其实就是取出x的最低位1(在2进制下)  换言之  lowbit(x)=2^k k为i的二进制中从最低位到高位连续零的长度 理解一下

    define lowbit(x) ((x)&-(x))         

    lowbit明白了后,可以想想 c[i]的实现:

    C[i]=A[i-2^k+1]+A[i-2^k+2]+......A[i];

    C[i]=A[i-lowbit(i)+1]+A[i-lowbit(i)+2]+......A[i];

    数组数组的入门可参见(懒得复制粘贴转载了):

    https://blog.csdn.net/Small_Orange_glory/article/details/81290634

     树状数组常用操作可参见:

    https://blog.csdn.net/bestsort/article/details/80796531

    https://www.cnblogs.com/RabbitHu/p/BIT.html

    树状数组可以实现

    1.单点更新和区间查询(这2个是个互逆的过程)

    2.单点查询和区间修改(树状数组记录的是差值)

    3.区间修改和区间查询

    4.求逆序对

    后续还有会不断积累的

  • 相关阅读:
    2017校赛 问题 F: 懒人得多动脑
    2017校赛 C: 不爱学习的小W【模拟】
    方程解的个数【数论】
    小兔蹦蹦跳【脑洞】
    例2-2显示文字
    例2-6 数值转换列表
    例2-3 转换数值
    例2-1 输出文字
    例1-1 求n!
    #文件1向文件中输出字符数据——fgetc
  • 原文地址:https://www.cnblogs.com/Yokel062/p/10790412.html
Copyright © 2011-2022 走看看