zoukankan      html  css  js  c++  java
  • 树状数组的小总结

    1.树状数组在很多情况下可以替代线段树,而且树状数组的代码简洁好写,所以能用树状数组的地方我还是会树状数组而不是线段树;

    2.树状数组的常用的函数有以下这些:

      

    int lowbit(int x)
    {
        return x&(-x);
    }
    void update(int x,int num)
    {
        while(x<=n)
        {
            sum[x]+=num;
            x+=lowbit(x);
        }
    }
    /*从下往上修改,对应线段树的点修改*/
    int query(int x)
    {
        int s=0;
        while(x>0)
        {
            s+=sum[x];
            x-=lowbit(x);
        }
        return s;
    }
    /*从上向下统计,对应线段树的区间统计*/
    void update(int x,int num)
    {
        while(x>0)
         {
             d[x]+=num;
             x-=lowbit(x);
         }
    }
    /*从上往下修改,需要两次,第二次要把多加的区间减掉我感觉像是线段树的lazy标记,不知道对不对*/
    int getSum(int x)
    {
        int s=0;
        while(x<=N)
         {
             s+=d[x];
             x+=lowbit(x);
         }
        return s;
    }
    /*点查询,从下向上统计,对应线段树的点查询要加上lazy标记*/

    3.某些题目的区间修改可以改成点修改,然后区间查询如hdu1556,poj2155(二维的树状数组好神奇);

  • 相关阅读:
    c语言实现BMP图像转换为灰度图
    360初赛溢出题
    vim的完全卸载
    小谈截断上传漏洞
    cmd提权的一些常用命令
    渗透测试方向概览
    字符编码以及python的编码解释
    BrainFuck 以及运用(idf)
    记一次加解密通关Nazo
    360 心情杂记
  • 原文地址:https://www.cnblogs.com/zhangchengc919/p/5317635.html
Copyright © 2011-2022 走看看