Submission #65702920


Source Code Expand

/*https://atcoder.jp/contests/abc366/tasks/abc366_d*/
/*2025年01月25日 13時12分17秒*/
// #include <atcoder/all>
// using namespace atcoder;
// using mint = modint998244353;
// using mint = modint1000000007;
#include <bits/stdc++.h>
#define all(v) (v).begin(), (v).end()
#define rall(v) (v).rbegin(), (v).rend()
#define rep(i, n) for (long long int i = 0; i < (n); ++i)
#define rep2(i, k, n) for (long long int i = (k); i < (n); ++i)
using namespace std;
using ll = long long;
using vint = vector<int>;
using vll = vector<ll>;
using vvint = vector<vector<int>>;
using vvll = vector<vector<ll>>;

// const ll INF = (ll)2e18+9;
const int INF = (int)2e9 + 7;

template <typename T>
void chmin(T& a, T b) {
    a = min(a, b);
}
template <typename T>
void chmax(T& a, T b) {
    a = max(a, b);
}

template <typename T>
void print(vector<T> v) {
    int n = v.size();
    rep(i, n) {
        if (i == 0)
            cout << v[i];
        else
            cout << ' ' << v[i];
    }
    cout << endl;
}

void yesno(bool x) {
    puts(x ? "Yes" : "No");
}

void solve();

int main() {
    solve();
    return 0;
}

template <typename T>
struct Cumsum3d {
    vector<vector<vector<T>>> data;

    Cumsum3d(vector<vector<vector<T>>> v) {
        assert(v.size() != 0);
        assert(v[0].size() != 0);
        assert(v[0][0].size() != 0);

        int n = v.size();
        int m = v[0].size();
        int l = v[0][0].size();

        data = vector(n + 1, vector(m + 1, vector<T>(l + 1)));

        vector<tuple<ll, ll, ll, ll>> d = {
            {0, 0, -1, 1},
            {0, -1, 0, 1},
            {0, -1, -1, -1},
            {-1, 0, 0, 1},
            {-1, 0, -1, -1},
            {-1, -1, 0, -1},
            {-1, -1, -1, 1},
        };

        rep2(i, 1, n + 1) rep2(j, 1, m + 1) rep2(k, 1, l + 1) {
            data[i][j][k] += v[i - 1][j - 1][k - 1];
            for (auto [x, y, z, sign] : d) {
                data[i][j][k] += data[i + x][j + y][k + z] * sign;
            }
        }
    }

    T sum(int si, int sj, int sk, int fi, int fj, int fk) {
        ll ans = 0;
        ans += data[fi][fj][fk];
        ans -= data[fi][fj][sk];
        ans -= data[fi][sj][fk];
        ans += data[fi][sj][sk];
        ans -= data[si][fj][fk];
        ans += data[si][fj][sk];
        ans += data[si][sj][fk];
        ans -= data[si][sj][sk];
        return ans;
    }
};

void solve() {
    ll N;
    cin >> N;

    vector<vvll> A(N, vvll(N, vll(N, 0)));
    rep(i, N) {
        rep(j, N) {
            rep(k, N) {
                cin >> A[i][j][k];
            }
        }
    }

    Cumsum3d cumsum(A);

    ll Q;
    cin >> Q;
    while (Q--) {
        ll a, x, b, y, c, z;
        cin >> a >> x >> b >> y >> c >> z;
        a--, b--, c--;

        cout << cumsum.sum(a, b, c, x, y, z) << endl;
    }
}

Submission Info

Submission Time
Task D - Cuboid Sum Query
User goropikari
Language C++ 23 (gcc 12.2)
Score 400
Code Size 2934 Byte
Status AC
Exec Time 464 ms
Memory 28100 KiB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 400 / 400
Status
AC × 2
AC × 22
Set Name Test Cases
Sample 00_sample_00.txt, 00_sample_01.txt
All 00_sample_00.txt, 00_sample_01.txt, 01_random_00.txt, 01_random_01.txt, 01_random_02.txt, 01_random_03.txt, 01_random_04.txt, 01_random_05.txt, 01_random_06.txt, 01_random_07.txt, 01_random_08.txt, 01_random_09.txt, 01_random_10.txt, 01_random_11.txt, 01_random_12.txt, 01_random_13.txt, 01_random_14.txt, 02_maximum_00.txt, 02_maximum_01.txt, 02_maximum_02.txt, 02_maximum_03.txt, 02_maximum_04.txt
Case Name Status Exec Time Memory
00_sample_00.txt AC 1 ms 3460 KiB
00_sample_01.txt AC 1 ms 3528 KiB
01_random_00.txt AC 457 ms 25296 KiB
01_random_01.txt AC 330 ms 27312 KiB
01_random_02.txt AC 361 ms 17084 KiB
01_random_03.txt AC 318 ms 9928 KiB
01_random_04.txt AC 434 ms 26024 KiB
01_random_05.txt AC 252 ms 27940 KiB
01_random_06.txt AC 351 ms 16072 KiB
01_random_07.txt AC 293 ms 5704 KiB
01_random_08.txt AC 345 ms 20852 KiB
01_random_09.txt AC 351 ms 21808 KiB
01_random_10.txt AC 454 ms 24608 KiB
01_random_11.txt AC 401 ms 18632 KiB
01_random_12.txt AC 266 ms 7800 KiB
01_random_13.txt AC 394 ms 25232 KiB
01_random_14.txt AC 433 ms 27156 KiB
02_maximum_00.txt AC 464 ms 28100 KiB
02_maximum_01.txt AC 456 ms 27920 KiB
02_maximum_02.txt AC 451 ms 27924 KiB
02_maximum_03.txt AC 446 ms 27968 KiB
02_maximum_04.txt AC 446 ms 27876 KiB