有点想家了。。。

树状数组的用途:单点更新,区间查询(如敌兵布阵)

区间更新,单点查询(如color the ball)

一维树状数组:

int lowbit(int x)
{
    return x&(-x);
}
long long sum(int i)
{
    long long res=0;//别忘赋值
    while(i>0)
    {
        res+=c[i];
        i-=lowbit(i);
    }

return res;
}
void add(int i,int sum)//对ci位置!!!上的数加sum
{
    while(i<=inf)//inf是c位置上能放的最大的数
    {
        c[i]+=sum;
        i+=lowbit(i);
    }
}
int main()
{
    memset(c,0,sizeof(c));//c树状数组
}

二维树状数组:

int lowbit(int x)
{
    return x&(-x);
}
long long sum(int x,int y)//求(1,1)到(x,y)所围城的矩形上的点代表的数的和
{
    long long res=0;
    for(;x>0;x-=lowbit(x))
    {
        for(int j=y;j>0;j-=lowbit(j))
        {
            res+=c[x][j];
        }
    }
    return res;
}
void add(int x,int y,int sum)//对c[x][y]位置上的数加sum
{
    for(;x<=maxx;x+=lowbit(s))//c的横坐标所能放的最大的数
    {
        for(int j=y;j<=maxy;j+=lowbit(j))//c的纵坐标所能放的最大的数
            c[x][j]+=sum;
    }
}
int main()
{
    memset(c,0,sizeof(c));
}

逆序数:逆序对的个数

如何求逆序数?

  1. for(int i=1;i<=n;i++)
  2. {
  3. add(b[i],1);
  4. ans += sum(n)-sum(b[i]);
  5. }

如何离散化

struct node
{
    int x,id;
};
node a[100];
int b[100];
bool cmp(node a,node b)
{
    return a.x<b.x;//开始离散化先排序!!!!!!!!!!!!!!!!!!
}
int main()
{
    for(int i=1;i<=n;i++)
    {
        cin>>a[i].x;
        a[i].id=i;
    }
    sort(a+1,a+1+n,cmp);
    b[a[i].id]=i;
    for(i=2;i<=n;i++)
    {
        if(a[i].x!=a[i-1].x)
            b[a[i].id]=i;
        else
            b[a[i].id]=b[a[i-1].id;
    }
}

对于二维树状数组如何求(x1,y1)到(x2,y2)的和

int main()
{
    cin>>x1>>y1>>x2>>y2;
    if(x1>x2)
        swap(x1,x2);//二维数组保证左下到右上
        if(y1>y2)
        swap(y1,y2);
    x1++;y1++;x2++;y2++;
    sum(x2,y2)+sum(x1-1,y1-1)-sum(x2,y1-1)-sum(x1-1,y2);//画个矩形就明白了特别巧妙
}

二维数组输入(x,y)

add(x+1,y+1,num)!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

二维数组可设一个a[100][100]来存放a[i][j]位置上的数是多少;

相对于一维树状数组染气球,二维数组也有类似的题,只不过是一维变化区间,二维变化矩形

一维 [l,r] add(l,1),add(r+1,-1) sum(i)就是地i个气球被染色总数

二维[x1,y1] [x2,y2]

  1. add(x1,y1,1);
  2. add(x1,y2+1,1);
  3. add(x2+1,y1,1);
  4. add(x2+1,y2+1,1);  sum[x][y]就是该点的值

三维树状数组

int sum(int x,int y,int z)
{
    int res=0;
    for(int i=x;i>0;i-=lowbit(i))
    {
        for(int j=y;j>0;j-=lowbit(j))
        {
            for(int k=z;k>0;k-=lowbit(k))
                res+=c[i][j][k];
        }
    }
    return res;
}
int add(int x,int y,int z,int num)
{
    for(int i=x;i<=maxx;i+=lowbit(i))
    {
        for(int j=y;j<=maxy;j+=lowbit(j))
        {
            for(int k=z;k<=maxz;k+=lowbit(k))
                c[i][j][k]+=num;
        }
    }
}

集训8.21树状数组讲解相关推荐

  1. 8.26树状数组讲解

    今天又看了一遍博客,温故知新,说说新的理解,树状数组的题型主要有,单点更新,区间查询:区间更新,单点查询:区间更新,区间查询:求逆序数(边插边)求和的思路得掌握好, 当是sum(0-sum()时,先写 ...

  2. 树状数组讲解(简洁好懂)

    树状数组 树状数组是用于维护前缀和的数据结构,支持单点的查询和修改,如果要修改区间的值则需要用到差分数组.数字太大时可以在排序后进行离散化. 树状数组原理详解: 首先我们需要知道lowbit(x)是返 ...

  3. 树状数组 讲解和题目集

    树状数组 树状数组作为一种实现简单.应用较广的高级数据结构,在OI界的地位越来越重要,下面我来简单介绍一下树状数组和它的简单应用. 一.树状数组简介 树状数组:顾名思义,是一种数组,其中包含了树的思想 ...

  4. hdu-1166敌兵布阵(树状数组)

    此处的树状数组讲解请点击:here~~~ #include<stdio.h> #include<string.h> int n,a[50005],q[40005]; int l ...

  5. 树状数组(详细分析+应用),看不懂打死我!

    树状数组介绍 在学习一个算法之前一定要清楚它能干嘛,能解决什么样的问题,对你解题是否有帮助,然后才去学习它! 那么接下来看如下几个问题 什么是树状数组 顾名思义就是一个结构为树形结构的数组,于二叉树的 ...

  6. UOJ276 [清华集训2016] 汽水 【二分答案】【点分治】【树状数组】

    题目分析: 这种乱七八糟的题目一看就是点分治,答案有单调性,所以还可以二分答案. 我们每次二分的时候考虑答案会不会大于等于某个值,注意到系数$k$是无意义的,因为我们可以通过转化使得$k=0$. 合并 ...

  7. 2023牛客寒假算法基础集训营4_20230130「向上取整」「夹逼dp」「lowbit科学+树状数组性质」「搜索」「倍增跳表」「莫队」

    6/13 教育场是有被教育到.(预计会鸽几题. 已过非太水的题们 //B //https://ac.nowcoder.com/acm/contest/46812/B//小构造小数学#include & ...

  8. 暑假集训总结——区间DP,堆的概念及应用,STL(vector、set、pair、map、priority_queue),hash表,树状数组,图论

    序言: 经过长达十几天的集训,确实学了不少知识点.我想如果再不总结的话,6天之后又要忘完了. 所以发一篇具有总结回忆性的博客,供大家回忆. 目录会本人自己排列的时间的先后顺序来排列,可直接食用. 目录 ...

  9. NEFU大一暑假集训-树状数组

    题集链接 目录: OP A Ultra-QuickSort 题目大意 思路 代码 B Stars 题目大意 思路 代码 C Mobile phones 题目大意 思路 代码 D Cows 题目大意 思 ...

最新文章

  1. C# webform上传图片并生成缩略图
  2. 正向代理和反向代理??
  3. 程序员创业前要做哪些准备?
  4. C++ 判断某个变量是某一种类型
  5. ajaxfileupload 跨域 (二级域名) 可行办法
  6. DarkTrack 4 Alien Version Released RAT 下载地址视频教程
  7. python线程join
  8. 某CTF比赛部分wp
  9. ASP注入详细命令40条
  10. SpringMVC中使用@ResponseBody注解标注业务方法
  11. 从VSS到SVN再到Git 记Git的基本操作
  12. python map lambda 分割字符串_[转] Python特殊语法:filter、map、reduce、lambda
  13. ListView问题:Your content must have a ListView wh...
  14. app测试用例注意点
  15. 国家制图标准适用于手工制图和计算机制图,机械制图国家标准与计算机绘图
  16. C语言两位八段LED数码管的,简单共阳极数码管电路图大全(五款led数码管电路图详解)...
  17. python 解析 google Chrome 浏览器历史浏览记录以及收藏夹数据
  18. Team building | 什么?团建还能这么玩?
  19. Python自动化测试如何自动生成测试用例?
  20. 计算机财务管理第五版第四章课后答案,计算机财务管理习题精简版

热门文章

  1. mysql 随机记录 newid()_sql随机查询数据语句(NewID(),Rnd,Rand(),random())
  2. python不会英语不会数学怎么自学-英语和数学都不好,但是我想学Python编程可以吗?...
  3. python3安装步骤-Mac安装python3的方法步骤
  4. python可以干嘛-python都可以用来做什么
  5. python能做什么工作-学python后能找什么工作?Python是什么?
  6. 自学python能干什么-普通人学Python能干什么?老男孩Python入门
  7. python练手经典100例-python零基础练手项目100+
  8. python打开txt文件找不到-Docker Python脚本找不到文件
  9. 插槽作用域渲染按钮开关 ~ 满满的干货哦
  10. 移动web-使一个盒子水平垂直居中的六种方法