using System;
public class GFG{
static readonly int L = 4;
static readonly int R = 4;
static readonly int C = 4;
static void prefixSum3d(
int [,,] arr,
int [,,] prefixSum)
{
prefixSum[0,0,0] = arr[0,0,0];
for ( int i = 1; i < L; i++)
prefixSum[i,0,0]
= prefixSum[i - 1,0,0] + arr[i,0,0];
for ( int i = 1; i < R; i++)
prefixSum[0,i,0]
= prefixSum[0,i - 1,0] + arr[0,i,0];
for ( int i = 1; i < C; i++)
prefixSum[0,0,i]
= prefixSum[0,0,i - 1] + arr[0,0,i];
for ( int k = 1; k < L; k++) {
for ( int i = 1; i < R; i++) {
prefixSum[k,i,0]
= arr[k,i,0] + prefixSum[k - 1,i,0]
+ prefixSum[k,i - 1,0]
- prefixSum[k - 1,i - 1,0];
}
}
for ( int i = 1; i < R; i++) {
for ( int j = 1; j < C; j++) {
prefixSum[0,i,j]
= arr[0,i,j] + prefixSum[0,i - 1,j]
+ prefixSum[0,i,j - 1]
- prefixSum[0,i - 1,j - 1];
}
}
for ( int j = 1; j < C; j++) {
for ( int k = 1; k < L; k++) {
prefixSum[k,0,j]
= arr[k,0,j] + prefixSum[k - 1,0,j]
+ prefixSum[k,0,j - 1]
- prefixSum[k - 1,0,j - 1];
}
}
for ( int k = 1; k < L; k++) {
for ( int i = 1; i < R; i++) {
for ( int j = 1; j < C; j++) {
prefixSum[k,i,j]
= arr[k,i,j]
+ prefixSum[k - 1,i,j]
+ prefixSum[k,i - 1,j]
+ prefixSum[k,i,j - 1]
- prefixSum[k - 1,i - 1,j]
- prefixSum[k,i - 1,j - 1]
- prefixSum[k - 1,i,j - 1]
+ prefixSum[k - 1,i - 1,j - 1];
}
}
}
}
static int calculateSum(
int [,,] arr,
int [,,] prefixSum,
int D, int E, int F, int X, int Y, int Z)
{
int sum = prefixSum[X,Y,Z];
if (D > 0) {
sum -= prefixSum[D - 1,Y,Z];
}
if (E > 0) {
sum -= prefixSum[X,E - 1,Z];
}
if (F > 0) {
sum -= prefixSum[X,Y,F - 1];
}
if (D > 0 && E > 0) {
sum += prefixSum[D - 1,E - 1,Z];
}
if (E > 0 && F > 0) {
sum += prefixSum[X,E - 1,F - 1];
}
if (F > 0 && D > 0) {
sum += prefixSum[D - 1,Y,F - 1];
}
if (D > 0 && E > 0 && F > 0) {
sum -= prefixSum[D - 1,E - 1,F - 1];
}
return sum;
}
public static void Main(String[] args)
{
int [,,] arr = { { { 1, 1, 1, 1 },
{ 1, 1, 1, 1 },
{ 1, 1, 1, 1 },
{ 1, 1, 1, 1 } },
{ { 1, 1, 1, 1 },
{ 1, 1, 1, 1 },
{ 1, 1, 1, 1 },
{ 1, 1, 1, 1 } },
{ { 1, 1, 1, 1 },
{ 1, 1, 1, 1 },
{ 1, 1, 1, 1 },
{ 1, 1, 1, 1 } },
{ { 1, 1, 1, 1 },
{ 1, 1, 1, 1 },
{ 1, 1, 1, 1 },
{ 1, 1, 1, 1 } } };
int [,,] prefixSum= new int [L,R,C];
prefixSum3d(arr, prefixSum);
int D, E, F, X, Y, Z;
D = 1;
E = 1;
F = 1;
X = 3;
Y = 3;
Z = 3;
Console.Write(calculateSum(arr, prefixSum, D, E, F, X, Y, Z));
}
}
|