痛定思痛,打算切割数据结构,于是乎直接一发BIT

树状数组能做的题目,线段树都可以解决

反之则不能,不过树状数组优势在于编码简单和速度更快

首先了解下树状数组:
树状数组是一种操作和修改时间复杂度都是O(logN)的数据结构,可以做到 单点修改前缀查询 和 区间修改单点查询 下面来看下树状数组:



由图发现

树状数组C[]对应的数组A[]中的值是这样的:

C【1】=A【1】

C【2】=C【1】+A【2】=A【1】+A【2】

C【3】=A【3】

C【4】=C【2】+A【4】=A【1】+A【2】+A【4】

……

于是乎,神犇们发现了一个性质:

C【n】=A【n-2^k+1】+……+A【n】(k为n二进制末尾0的个数)

通常把2^k叫做lowbit

那么求lowbit的方法:

int lowbit(int x)
{
return x&(-x);//原理是计算机的补码存储方式(反正看不懂且不会考,记住就好)
}

查询:

通过查询前缀和相减即区间和

int sum(int locate)
{
int total=0;
while (locate>0)
{
total+=C[locate];
locate-=lowbit(locate);
}
return total;
}//前缀和查询

修改:

修改需要修改所有和这个有关的点

void add(int locate,int number)
{
while (locate<=n)
{
C[locate]+=number;
locate+=lowbit(locate);
}
}//单点修改
 优点是时间复杂度低,但应用面窄,只适合维护求和这一问题,不支持乱搞

区间修改点查询:

假如说要对[l,r]这个区间的每一个元素加2,那么在l位置加2,在r+1位置减2。查询某个点的权值的时候,查询到该点的前缀和

二维树状数组:

或者说 树状数组套树状数组(B格更高)

void change(int x,int y,int number)
{
for (int i=x; i<=n; i+=lowbit(i))
for (int j=y; j<=n; j+=lowbit(j))
C[i][j]+=number;
}
int sum(int x,int y)
{
int total=0;
for (int i=x; i>0; i-=lowbit(i))
for (int j=y; j>0; j-=lowbit(j))
total+=C[i][j];
return total;
}

下面是两个模版题传送门:

hdu 1166 树状数组模版题:

http://blog.csdn.net/dad3zz/article/details/49999687

poj 2155 树状数组套树状数组模版题:

http://blog.csdn.net/DaD3zZ/article/details/49999777

学习笔记 BIT(树状数组)的更多相关文章

  1. HDU1087(树状数组求LIS)

    题是水题,学习一下用树状数组求LIS. 先离散化一下,注意去重:然后就把a[i]作为下标,dp[i]作为值,max作为维护的运算插进树状数组即可. 如果是上升子序列,询问(a[i] - 1):如果是不 ...

  2. 学习笔记--函数式线段树(主席树)(动态维护第K极值(树状数组套主席树))

    函数式线段树..资瓷 区间第K极值查询 似乎不过似乎划分树的效率更优于它,但是如果主席树套树状数组后,可以处理动态的第K极值.即资瓷插入删除,划分树则不同- 那么原理也比较易懂: 建造一棵线段树(权值 ...

  3. 树状数组的笔记√(hzwer blog)

    int lowbit(int x) { return x&(-x); } lowbit()的返回值就是 2^k 次方的值. 求数组的和的算法: (1)首先,令sum=0,转向第二步: (2)接 ...

  4. ACM学习历程—51NOD 1685 第K大区间2(二分 && 树状数组 && 中位数)

    http://www.51nod.com/contest/problem.html#!problemId=1685 这是这次BSG白山极客挑战赛的E题. 这题可以二分答案t. 关键在于,对于一个t,如 ...

  5. ACM学习历程—HDU5700 区间交(树状数组 && 前缀和 && 排序)

    http://acm.hdu.edu.cn/showproblem.php?pid=5700 这是这次百度之星初赛2B的第五题.省赛回来看了一下,有这样一个思路:对于所有的区间排序,按左值排序. 然后 ...

  6. ACM学习历程—SNNUOJ 1239 Counting Star Time(树状数组 && 动态规划 && 数论)

    http://219.244.176.199/JudgeOnline/problem.php?id=1239 这是这次陕西省赛的G题,题目大意是一个n*n的点阵,点坐标从(1, 1)到(n, n),每 ...

  7. ACM学习历程—HDU5592 ZYB's Premutation(逆序数 && 树状数组 && 二分)(BestCoder Round #65 1003)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5592 题目大意就是给了每个[1, i]区间逆序对的个数,要求复原原序列. 比赛的时候2B了一发. 首先 ...

  8. ACM学习历程—UESTC 1217 The Battle of Chibi(递推 && 树状数组)(2015CCPC C)

    题目链接:http://acm.uestc.edu.cn/#/problem/show/1217 题目大意就是求一个序列里面长度为m的递增子序列的个数. 首先可以列出一个递推式p(len, i) =  ...

  9. ACM学习历程—HDU4417 Super Mario(树状数组 && 离线)

    Problem Description Mario is world-famous plumber. His “burly” figure and amazing jumping ability re ...

随机推荐

  1. HTTPWatch使用

    注意:现在httpwatch也可以集成到火狐浏览器中. 一.介绍 HttpWatch是强大的网页数据分析工具.集成在Internet Explorer工具栏.包括网页摘要.Cookies管理.缓存管理 ...

  2. java12 - 7 排序的案例

    对键盘录入的字符串中的字符进行排序. 举例:"dacgebf" 结果:"abcdefg" 分析:1.首先对字符转换为数组,并进行排序: A:直接让它们以字符的形 ...

  3. php报错日志:PHP Deprecated:Automatically populating $HTTP_RAW_POST_DATA is deprecated

    前几天将线上php服务升级到5.6.x版本后,php-error.log报出错误:PHP Deprecated: Automatically populating $HTTP_RAW_POST_DAT ...

  4. Git技巧总结分享

    接触Git有很长一段时间了,从最初的不懂到逐渐熟悉运用,相比于SVN,更热衷于Git这一款强大的版本控制工具. 废话不多说,下面对Git做了一些技巧总结,在此分享下,希望能帮助到一些喜欢Git的朋友们 ...

  5. 介绍Git版本控制器的使用

    Git 简介 Git 是什么?大家肯定会说不就是版本控制器嘛,是的Git是目前世界上最先进的分布式版本控制系统(没有之一). 1.那什么是版本控制器呢? 举个简单的例子,比如我们用Word写文章,那你 ...

  6. MyEclipse无法启动调试:Cannot connect to VM

    MyEclipse无法启动调试:Cannot connect to VM 问题描述:Eclipse普通的Run模式没有问题,Debug模式却启动不了.换了Eclipse,MyEclipse,JDK都不 ...

  7. Android-MediaProvider数据库模式

    原文地址:http://www.otechu.me/zh/2011/10/schema-of-android-mediaprovider-database/ 摘要: Android MediaProv ...

  8. linux内核分析 课程总结

    Linux内核分析 链接汇总 Linux内核分析第一周学习总结--计算机是如何工作的 Linux内核分析第二周学习总结--操作系统是如何工作的 Linux内核分析第三周学习总结--构造一个简单的Lin ...

  9. 《图解tcp/ip》读书笔记(一)

           我先讲三句话:        一."万物互联的时代到了."我们生活在这样一个互联网急速发展的时代,也许很快就会发现,你能接触到的一切都可以连接到互联网了,电脑.手机这 ...

  10. Linux命令学习

    Linux命令学习 Ubuntu常用快捷键 •Ctrl+Alt+T: 打开终端 •Ctrl+Shift+T: 新建标签页 •Tab: 终端中命令补全 •Alt+数字N: 终端中切换到第N个标签页 •↑ ...