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.求逆序对

    后续还有会不断积累的

  • 相关阅读:
    高版本Visual Studio和低版本ArcGIS共存 工具箱没有控件的解决方法
    Geodesic 什么是“测地线的”?
    向QGIS项目组提交了一份建议
    QGIS 3.4 3.6 另存栅格图层到GeoPackage出现覆盖问题 解决方案
    Dijkstra.NET 库体验报告
    QGIS练手
    GeoPackage
    QGIS练手
    postgresql 修改字段名称
    django signal
  • 原文地址:https://www.cnblogs.com/Yokel062/p/10790412.html
Copyright © 2011-2022 走看看