集训8.21树状数组讲解
有点想家了。。。
树状数组的用途:单点更新,区间查询(如敌兵布阵)
区间更新,单点查询(如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));
}
逆序数:逆序对的个数
如何求逆序数?
- for(int i=1;i<=n;i++)
- {
- add(b[i],1);
- ans += sum(n)-sum(b[i]);
- }
如何离散化
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]
- add(x1,y1,1);
- add(x1,y2+1,1);
- add(x2+1,y1,1);
- 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树状数组讲解相关推荐
- 8.26树状数组讲解
今天又看了一遍博客,温故知新,说说新的理解,树状数组的题型主要有,单点更新,区间查询:区间更新,单点查询:区间更新,区间查询:求逆序数(边插边)求和的思路得掌握好, 当是sum(0-sum()时,先写 ...
- 树状数组讲解(简洁好懂)
树状数组 树状数组是用于维护前缀和的数据结构,支持单点的查询和修改,如果要修改区间的值则需要用到差分数组.数字太大时可以在排序后进行离散化. 树状数组原理详解: 首先我们需要知道lowbit(x)是返 ...
- 树状数组 讲解和题目集
树状数组 树状数组作为一种实现简单.应用较广的高级数据结构,在OI界的地位越来越重要,下面我来简单介绍一下树状数组和它的简单应用. 一.树状数组简介 树状数组:顾名思义,是一种数组,其中包含了树的思想 ...
- hdu-1166敌兵布阵(树状数组)
此处的树状数组讲解请点击:here~~~ #include<stdio.h> #include<string.h> int n,a[50005],q[40005]; int l ...
- 树状数组(详细分析+应用),看不懂打死我!
树状数组介绍 在学习一个算法之前一定要清楚它能干嘛,能解决什么样的问题,对你解题是否有帮助,然后才去学习它! 那么接下来看如下几个问题 什么是树状数组 顾名思义就是一个结构为树形结构的数组,于二叉树的 ...
- UOJ276 [清华集训2016] 汽水 【二分答案】【点分治】【树状数组】
题目分析: 这种乱七八糟的题目一看就是点分治,答案有单调性,所以还可以二分答案. 我们每次二分的时候考虑答案会不会大于等于某个值,注意到系数$k$是无意义的,因为我们可以通过转化使得$k=0$. 合并 ...
- 2023牛客寒假算法基础集训营4_20230130「向上取整」「夹逼dp」「lowbit科学+树状数组性质」「搜索」「倍增跳表」「莫队」
6/13 教育场是有被教育到.(预计会鸽几题. 已过非太水的题们 //B //https://ac.nowcoder.com/acm/contest/46812/B//小构造小数学#include & ...
- 暑假集训总结——区间DP,堆的概念及应用,STL(vector、set、pair、map、priority_queue),hash表,树状数组,图论
序言: 经过长达十几天的集训,确实学了不少知识点.我想如果再不总结的话,6天之后又要忘完了. 所以发一篇具有总结回忆性的博客,供大家回忆. 目录会本人自己排列的时间的先后顺序来排列,可直接食用. 目录 ...
- NEFU大一暑假集训-树状数组
题集链接 目录: OP A Ultra-QuickSort 题目大意 思路 代码 B Stars 题目大意 思路 代码 C Mobile phones 题目大意 思路 代码 D Cows 题目大意 思 ...
最新文章
- C# webform上传图片并生成缩略图
- 正向代理和反向代理??
- 程序员创业前要做哪些准备?
- C++ 判断某个变量是某一种类型
- ajaxfileupload 跨域 (二级域名) 可行办法
- DarkTrack 4 Alien Version Released RAT 下载地址视频教程
- python线程join
- 某CTF比赛部分wp
- ASP注入详细命令40条
- SpringMVC中使用@ResponseBody注解标注业务方法
- 从VSS到SVN再到Git 记Git的基本操作
- python map lambda 分割字符串_[转] Python特殊语法:filter、map、reduce、lambda
- ListView问题:Your content must have a ListView wh...
- app测试用例注意点
- 国家制图标准适用于手工制图和计算机制图,机械制图国家标准与计算机绘图
- C语言两位八段LED数码管的,简单共阳极数码管电路图大全(五款led数码管电路图详解)...
- python 解析 google Chrome 浏览器历史浏览记录以及收藏夹数据
- Team building | 什么?团建还能这么玩?
- Python自动化测试如何自动生成测试用例?
- 计算机财务管理第五版第四章课后答案,计算机财务管理习题精简版
热门文章
- mysql 随机记录 newid()_sql随机查询数据语句(NewID(),Rnd,Rand(),random())
- python不会英语不会数学怎么自学-英语和数学都不好,但是我想学Python编程可以吗?...
- python3安装步骤-Mac安装python3的方法步骤
- python可以干嘛-python都可以用来做什么
- python能做什么工作-学python后能找什么工作?Python是什么?
- 自学python能干什么-普通人学Python能干什么?老男孩Python入门
- python练手经典100例-python零基础练手项目100+
- python打开txt文件找不到-Docker Python脚本找不到文件
- 插槽作用域渲染按钮开关 ~ 满满的干货哦
- 移动web-使一个盒子水平垂直居中的六种方法