首页 > 其他分享 >三维前缀和

三维前缀和

时间:2024-10-14 21:45:41浏览次数:8  
标签:pre y2 前缀 三维 x2 y1 x1 z1

二维前缀和模板:

预处理:dp[i][j]=dp[i-1][j]+dp[i][j-1]-dp[i-1][j-1]+map[i][j];

查询:dp[x2][y2]+dp[x1-1][y1-1]-dp[x1-1][y2]-dp[x2][y1-1]

三维前缀和模板:

预处理:
pre[i][j][k]=mp[i][j][k]-pre[i-1][j-1][k]-pre[i-1][j][k-1]-pre[i][j-1][k-1]+pre[i][j][k-1]+pre[i][j-1][k]+pre[i-1][j][k]+pre[i-1][j-1][k-1];

查询:
res=pre[x2][y2][z2]-pre[x1][y2][z2]-pre[x2][y1][z2]-pre[x2][y2][z1]+pre[x1][y1][z2]+pre[x1][y2][z1]+pre[x2][y1][z1]-pre[x1][y1][z1];

三维前缀和模板题:
https://atcoder.jp/contests/abc366/tasks/abc366_d

#include<bits/stdc++.h>
#define endl '\n'
#define int long long
#define lowbit(x) (x&-x)
using namespace std;
const double pi=acos(-1);

void solve(){
	int n;cin>>n;
	vector<vector<vector<int>>> mp(n+1,vector<vector<int>>(n+1,vector<int>(n+1,0ll)));
	vector<vector<vector<int>>> pre(n+1,vector<vector<int>>(n+1,vector<int>(n+1,0ll)));
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			for(int k=1;k<=n;k++){
				cin>>mp[i][j][k];
			}
		}
	}

	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			for(int k=1;k<=n;k++){
				pre[i][j][k]=mp[i][j][k]-pre[i-1][j-1][k]-pre[i-1][j][k-1]-pre[i][j-1][k-1]+pre[i][j][k-1]+pre[i][j-1][k]+pre[i-1][j][k]+pre[i-1][j-1][k-1];
			}
		}
	}


	int q;cin>>q;
	while(q--){
		int x1,x2,y1,y2,z1,z2;cin>>x1>>x2>>y1>>y2>>z1>>z2;
		x1--,y1--,z1--;
		int res=0;
		res=pre[x2][y2][z2]-pre[x1][y2][z2]-pre[x2][y1][z2]-pre[x2][y2][z1]+pre[x1][y1][z2]+pre[x1][y2][z1]+pre[x2][y1][z1]-pre[x1][y1][z1];
		cout<<res<<endl;
	}

}
signed main(){
	ios::sync_with_stdio(false); cin.tie(nullptr);
	int t=1;
	//cin>>t;
	while(t--) solve();
	return 0;
}

标签:pre,y2,前缀,三维,x2,y1,x1,z1
From: https://www.cnblogs.com/TaopiTTT/p/18466223

相关文章

  • python画图|三维动态柱状图绘制
    【1】引言前序已经学习了二维动态柱状图绘制教程,本次尝试探索三维动态柱状图绘制教程:【2】项目设计三维和二维的不同,要在一开始就定义。二维的定义简单粗暴,只需要一行代码:fig,ax=plt.subplots()#定义要画图到了三维则需要两行,一行说要画三维图,一行说这个图使用哪......
  • 三维无限深势阱的标准解
    一、问题描述考虑一个粒子被限制在三维无限深方势阱中,势阱在三个方向上的边界分别为:\(0\leqx\leqL_x\)\(0\leqy\leqL_y\)\(0\leqz\leqL_z\)在势阱内部(即\(0\leqx\leqL_x\)、\(0\leqy\leqL_y\)、\(0\leqz\leqL_z\)),势能\(V=0\);而在势阱外部,势能......
  • 每日OJ题_牛客_比那名居的桃子_滑动窗口/前缀和_C++_Java
    目录牛客_比那名居的桃子_滑动窗口/前缀和题目解析C++代码Java代码牛客_比那名居的桃子_滑动窗口/前缀和比那名居的桃子(nowcoder.com)描述:        小红有一天看到了一只桃子,由于桃子看上去就很好吃,小红很想把它吃掉。已知吃下桃子后,每天可以获得ai​的......
  • 前缀和笔记
    前缀和笔记对于一个一维数组a[m]其前i项和记作s[i]如果想要对a[m]中任意连续段的值进行求和,例如a[l]~a[r]则可使用前缀和数组进行o(n)计算inta[m],s[m];s[0]=0;//定义s[0]的值,防止边界问题for(inti=0;i<m;i++){ cin>>a[i]; s[i]=s[i-1]+a[i];}这样的话,s......
  • 【MATLAB代码】TDOA定位,求三维下的位置(1主锚点、3副锚点),附代码
    目录代码概述代码结构输入输出联系作者代码用途获取方法代码概述该MATLAB代码实现了基于时间差定位(TDOA,TimeDifferenceofArrival)的方法,使用最小二乘法在三维空间中估计一个未知点的位置。该算法利用一个主锚点和三个副锚点的已知位置,通过计算信号传播时间差来......
  • 蓝牙定位的MATLAB程序,四个锚点、三维空间
       目录程序描述运行结果 程序描述这段代码通过RSSI信号强度实现了在三维空间中的蓝牙定位,展示了如何使用锚点位置和测量的信号强度来估计未知点的位置。代码涉及信号衰减模型、距离计算和最小二乘法估计等基本概念,并通过三维可视化展示了真实位置与估计位置的关......
  • 免费好用的瓦片地图工具:从数据处理到三维可视化的全能解决方案
    瓦片地图技术作为地理信息系统(GIS)和三维可视化领域的一项重要技术,通过将大地图切割成若干小的瓦片,实现了高效的数据加载和流畅的交互体验。本文将深入探讨瓦片地图的原理、应用以及一款出色的瓦片地图工具——GISBox。一、瓦片地图的原理与应用瓦片地图技术通过将整个地图区......
  • 气象数据三维可视化的实现原理及代码
    气象数据三维可视化是一种使用三维图形技术来呈现和分析气象数据的方法。通过三维可视化,用户可以更直观地观察气象数据的空间分布、变化趋势以及天气现象的复杂结构。这种技术广泛应用于气象预报、科学研究以及环境监测等领域。本文将介绍气象数据三维可视化的基本实现原理,并......
  • 几何建模- 参数化三维几何造型技术方案
    1.背景介绍         建筑体参数化设计是一种利用计算机辅助设计(CAD)软件和参数化建模工具来创建、分析和修改建筑设计的方法。这种方法的核心在于使用参数和算法来定义建筑元素之间的关系,从而使得设计过程更加灵活、高效,并且能够快速响应设计变更。        ......
  • 二维前缀和 & 二维差分
    二维前缀和求二维前缀和后,能够实现\(O(1)\)求原数组二维区间和,但是不支持修改。lln,m,sum2[N][N],c[N][N];voidSum2_pre(){fr(i,1,n)fr(j,1,m)sum2[i][j]=sum2[i-1][j]+sum2[i][j-1]-sum2[i-1][j-1]+c[i][j];}llSum2(llx......