首页 > 其他分享 >二维BIT

二维BIT

时间:2024-12-11 20:33:07浏览次数:5  
标签:前缀 树状 int 二维 数组 BIT

简介

实际上是树状数组套树状数组,用二维数组维护。支持区间操作。

算法流程

模板题:P4514 上帝造题的七分钟

考虑对二维差分数组作二阶二维前缀和。考虑对 \((i,j)\) 加 \(d\) 对查询以 \((x,y)\) 为矩形右下角的贡献。此时对于所有的 \(a_{i\sim x,j \sim y}\) 都有 \(d\) 的贡献,那么对于 \((x,y)\) 则有 \((x-i+1)\times (y-j+1) \times d\) 的贡献。拆开可得 \((x+1)(y+1)d-(y+1)id-(x+1)jd+ijd\),分别维护 \(d,\ id,\ jd,\ ijd\) 的一阶二维前缀和即可。

复杂度 \(O(q \log n \log m)\).

struct interval_BIT {
	int tr[5][N][M];
	
	int lowbit(int x) {
		return x&(-x);
	}
	
	void modify(int x,int y,ll c) {
		for(int i=x;i<=n;i+=lowbit(i)) {
			for(int j=y;j<=m;j+=lowbit(j)) {
				tr[1][i][j]+=c;
				tr[2][i][j]+=c*x;
				tr[3][i][j]+=c*y;
				tr[4][i][j]+=c*x*y;
			}
		}
	}
	
	void interval_modify(int x1,int y1,int x2,int y2,ll c) {
		modify(x1,y1,c);modify(x2+1,y2+1,c);
		modify(x1,y2+1,-c);modify(x2+1,y1,-c);
	}
	
	int query(int x,int y) {
		int res=0;
		for(int i=x;i;i-=lowbit(i)) {
			for(int j=y;j;j-=lowbit(j)) {
				res+=1ll*(x+1)*(y+1)*tr[1][i][j]-1ll*(y+1)*tr[2][i][j]-1ll*(x+1)*tr[3][i][j]+tr[4][i][j];
			}
		}
		return res;
	}
	
	int interval_query(int x1,int y1,int x2,int y2) {
		return query(x2,y2)-query(x1-1,y2)-query(x2,y1-1)+query(x1-1,y1-1);
	}
}t;

结语

其实不是什么特别新鲜的做法吧,就是二维差分二维前缀和套个树状数组支持区间加操作。

不过代码还是不好记的,每次打都要现推。

参考文章

[1] 树状数组进阶 https://www.cnblogs.com/alex-wei/p/BIT_advanced.html

标签:前缀,树状,int,二维,数组,BIT
From: https://www.cnblogs.com/ldh081122/p/18600652

相关文章

  • 四大主流消息队列 场景化选型指导:kafka、rocketmq、rabbitmq、pulsar
    探讨消息队列在软件开发中的应用与选择在日常的软件开发过程中,我们常常会遇到系统间的异步通信、流量削峰填谷、日志收集等需求。这时,消息队列就成为了解决这类问题的有效工具之一。比如,在电商平台中,当用户下单时,订单信息不仅需要立即保存到数据库中,还需要同步更新库存、生成物流......
  • 1、消息队列框架:RabbitMQ - 开源项目研究文章
    RabbitMQ是一个开源的消息代理和队列服务器,它使用AMQP(高级消息队列协议)来实现跨语言和跨平台的消息传递。它由Erlang语言编写,支持多种消息队列协议,如STOMP和MQTT,并且提供了多种语言的客户端支持。RabbitMQ的核心组件包括Broker、VirtualHost、Connection、Chan......
  • GitHub 正式收录 MoonBit 作为一门通用编程语言!核心用户突破三万!
    MoonBit 编程语言正式被Github收录!这对于一个仅有两年发展时间的编程语言来说是一种高度认可,期待未来由MoonBit编写的项目数量快速增长,早日成为首个由国人研发迈进10万➕用户的编程语言。最近用户数已经接近3万(数据统计来源综合VisualStudioMarketplac......
  • bitmap的特性和应用
    BitMap是什么?BitMap简称位图,实际上是一个散列表,只不过这个散列表中各个槽是计算机存储中的最小单元bit.那BitMap数据结构长什么样呢?一个长度为8的BitMap是下面这样的:状态实际表示初始化状态00000000使用后状态00100000BitMap特性数据结构本身所占......
  • RabbitMQ——CLI 管理工具 rabbitmqadmin
    前言一般情况下,我们会使用rabbitmq_management插件,通过WebUI的方式来监控和操作RabbitMQ(端口15672),但有时候命令的方式会更加方便一些,RabbitMQ提供了CLI管理工具rabbitmqadmin,其实就是基于RabbitMQ的HTTPAPI,用Python写的一个脚本。rabbitmqadmin提供了下面功......
  • C语言基础-数组:一维数组与二维数组
    数组例子如果我们要在程序中表示一个学生的成绩,我们会使用一个int来表示,假如我们要在程序中表示一组成绩,此时我们所学的常规的数据类型就无法再表示,这时就需要使用一种新的表现形式,这种表现形式就是数组什么是数组数组是相同类型,有序数据的集合数组的特征数组中的数据......
  • 独家原创 | BiTCN-BiGRU-CrossAttention融合时空特征的高创新预测模型
    往期精彩内容:时序预测:LSTM、ARIMA、Holt-Winters、SARIMA模型的分析与比较全是干货|数据集、学习资料、建模资源分享!EMD变体分解效果最好算法——CEEMDAN(五)-CSDN博客拒绝信息泄露!VMD滚动分解+Informer-BiLSTM并行预测模型-CSDN博客单步预测-风速预测模型代码全家桶-......
  • CE235 Computer Security Bitcoin
    Assignment2:BlockchainandMiningwithProof-of-workforBitcoinCE235ComputerSecurityIntroduction1.1BitcoinMiningBitcoinisacryptocurrency.IntheBitcoinsystemBitcoinsareminedthroughproof-of-workmechanism.Bitcoinminersaregiven......
  • Alice's Adventures in the Rabbit Hole
    算法显然的,每次掷硬币,女王(以下称为\(B\))一定会将\(\rm{Alice}\)(以下称为\(A\))丢到下面,\(A\)一定会将自己拉到上层带到这道题里面去,我们显然要做类似于树上的概率\(\rm{dp}\)一眼发现,令\(f_u\)表示第\(i\)个点的逃脱概率,那么有\[f_u=\frac{1}{2}......
  • FMC子卡设计原理图:FMC181-八路125Msps 14bit 直流耦合脉冲采集AD FMC子卡
    FMC181-八路125Msps14bit直流耦合脉冲采集ADFMC子卡一、板卡概述   (1) ADC采用ADI的AD9253,4通道最高125M采样率,共2片,板卡共8路输入,支持80M/105M/125Msps 采样;   (2) AD模拟输入带前端放大器和滤波电路,支持±2Vpp输入,支持直流耦合;   (3) 时钟......