首页 > 其他分享 >[ABC366D] Cuboid Sum Query 题解

[ABC366D] Cuboid Sum Query 题解

时间:2024-08-12 09:28:44浏览次数:15  
标签:前缀 seq Cuboid 题解 Sum int maxn Query

[ABC366D] Cuboid Sum Query 题解

原题传送门

AT原题传送门

题意翻译:

给予一个 \(N \times N \times N\) 的三维矩阵,有 \(Q\) 次询问,对于每次询问,给与四个数,分别为 \(L_1,R_1,L_2,R_2,L_3,R_3\) 求在三维矩阵中 \(a[L_1][L_2][L_3]\) 到 \(a[R_1][R_2][R_3]\) 的区间和。

三维前缀和板子题,虽然本蒟蒻也是现学的,但这并不影响做题。走着。

首先是三维前缀和的初始化,我们可以一维一维处理前缀和,三重循环即可:

int a[maxn][maxn][maxn];    //前缀和数组
for(int i=1;i<=n;i++)
    for(int j=1;j<=n;j++)
        for(int k=1;k<=n;k++)
            a[i][j][k]+=a[i-1][j][k];
for(int i=1;i<=n;i++)
    for(int j=1;j<=n;j++)
        for(int k=1;k<=n;k++)
            a[i][j][k]+=a[i][j-1][k];
for(int i=1;i<=n;i++)
    for(int j=1;j<=n;j++)
        for(int k=1;k<=n;k++)
            a[i][j][k]+=a[i][j][k-1];

前缀和处理完了,问题变成如何求区间和。

运用容斥原理,可以推出这样一个式子:

\[S=a[R_1][R_2][R_3]-a[L_1-1][R_2][R_3]-a[R_1][L_2-1][R_3]-a[R_1][R_2][L_3-1]+a[L_1-1][L_2-1][R_3]+a[L_1-1][R_2][L_3-1]+a[R_1][L_2-1][R_3-1]-a[L_1-1][L_2-1][L_3-1] \]

这便是需要输出的答案。

此题结束。

AC code:

#include <bits/stdc++.h>
#define seq(q, w, e) for (int q = w; q <= e; q++)
#define ll long long
using namespace std;
const int maxn = 110;
int n,t;
int a[maxn][maxn][maxn];
signed main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);cout.tie(0);
    cin>>n;
    seq(i,1,n){
        seq(j,1,n){
            seq(k,1,n){
                cin>>a[i][j][k];
            }
        }
    }
    for(int i = 1; i <= n; i++)
        for(int j = 1; j <= n; j++)
            for(int k = 1; k <= n; k++) 
                a[i][j][k] += a[i - 1][j][k];
    for(int i = 1; i <= n; i++)
        for(int j = 1; j <= n; j++)
            for(int k = 1; k <= n; k++)
                a[i][j][k] += a[i][j - 1][k];
    for(int i = 1; i <= n; i++)
        for(int j = 1; j <= n; j++)
            for(int k = 1; k <= n; k++)
                a[i][j][k] += a[i][j][k - 1];
    cin>>t;
    while(t--){
        int b1,b2,b3,e1,e2,e3;
        cin>>b1>>e1>>b2>>e2>>b3>>e3;
        cout<<a[e1][e2][e3]-a[b1-1][e2][e3]-a[e1][b2-1][e3]-a[e1][e2][b3-1]+a[b1-1][b2-1][e3]+
        	  a[b1-1][e2][b3-1]+a[e1][b2-1][b3-1]-a[b1-1][b2-1][b3-1]<<endl;
    }
    return 0;
}

标签:前缀,seq,Cuboid,题解,Sum,int,maxn,Query
From: https://www.cnblogs.com/adsd45666/p/18354338

相关文章

  • 题解:AT_abc366_c [ABC366C] Balls and Bag Query
    题意给你一个可重集,要求支持插入,删除,元素种类查询三种操作。分析直接乱搞,用一个桶记录每种数字的出现次数,再用一个变量\(sum\)记录元素种类数。插入的时候看看当前该元素出现次数是否为\(1\),删除的时候看看当前元素出现次数是否为\(0\),如果是的话让\(sum\)相应加减即可......
  • 题解 P6620【[省选联考 2020 A 卷] 组合数问题】
    直接摘抄OI-wiki了。第二类斯特林数第二类斯特林数(斯特林子集数)\(\begin{Bmatrix}n\\k\end{Bmatrix}\),也可记做\(S(n,k)\),表示将\(n\)个两两不同的元素,划分为\(k\)个互不区分的非空子集的方案数。递推式\[\begin{Bmatrix}n\\k\end{Bmatrix}=\begin{Bmatrix}n-1\\k-1......
  • l洛谷 P7870 兔已着陆——题解
    洛谷P7870题解传送锚点摸鱼环节「Wdoi-4」兔已着陆题目背景铃瑚和清兰是从月之都到达幻想乡的两只月兔。正因为降落到了幻想乡进行调查,因此她们通过开团子屋制作团子出售的方式,在幻想乡生活。为了应对越发繁荣的市场,她们向河城荷取购置了一台团子机器,可以高效地生产出五颜......
  • CF1264E Beautiful League 题解
    CF1264E你有一张竞赛图,给你竞赛图中\(m\)条边的方向,让你对于没有给定的边确定方向使得整张图的三元环个数最多\(n\leq50,m\leq\frac{(n-1)n}{2}\)费用流好题三元环是一个非常难考虑的东西,我们考虑求他的补集:不是三元环的个数最少我们发现不是三元环的情况是存......
  • CF1586E. Moment of Bloom 题解
    CF1586E胡桃是一个小恶作剧高手,她用这个图问题试图吓唬你!你有一个包含\(n\)个节点和\(m\)条边的连通无向图。你还需要处理\(q\)个查询。每个查询由两个节点\(a\)和\(b\)组成。最初,图中的所有边的权重都是\(0\)。对于每个查询,你必须选择一条从\(a\)开始并以\(b\)......
  • CF1515F Phoenix and Earthquake 题解
    CF1515F给定一张\(n\)个点\(m\)条边的无向连通图和正整数\(x\),点有非负权值\(a_i\)。如果一条边\((u,v)\)满足\(a_u+a_v\gex\),可以将\(u,v\)缩起来,新点的点权为\(a_u+a_v-x\)。判断这张图是否可以缩成一个点。如果是,还要输出每次缩的是哪条边。\(2\len\le3......
  • CF1654E Arithmetic Operations 题解
    CF1654E给定一个长度为\(n\)的序列\(a\)。问至少需要修改几个数才能使得\(a\)变为一个等差数列。\(n\leq10^5\),\(1\leqa_i\leq10^5\)。我们可以发现值域\(\leq10^5\)实属可疑,我们可以就这点进行分析考虑对于序列的公差\(d\),如果\(d\)太大的话经过若干......
  • CF1508C Complete the MST 题解
    CF1508C给定一个有\(n\)个节点的完全图,其中\(m\)条边有给定的边权,剩下的没有给定。你需要给所有没有给定边权的边赋上非负整数边权,使得所有边的边权的异或和等于\(0\)。我们认为这个图的“丑陋值”为这个图的最小生成树的边权之和,求所有可能的赋值方案中,“丑陋值”的最小......
  • ABC366 题解
    D-CuboidSumQuery三维前缀和。不过有一维范围小,可以暴力然后二位前缀和。E-ManhattanMultifocalEllipse横纵坐标的距离是独立的。扫描线扫横坐标,维护每个可行点的纵坐标的距离和,查询就是\(\lex\)的数的个数。可以通过桶做到线性。F-MaximumCompositionExchan......
  • F - Range Set Query
    原题链接题解暴力想法:每次枚举每次查询\(O(q\cdotn)\)进阶想法:对查询按\(r\)排序,用树状数组维护\([1,r]\)内,该范围内每个数最后一次出现的位置code#include<bits/stdc++.h>usingnamespacestd;/*#definedoublelongdoubleconstintinf=1e18;constintmod=1e......