TheAlgorithms/C++ 1.0.0
All the algorithms implemented in C++
Loading...
Searching...
No Matches
prefix_sum_array.cpp
Go to the documentation of this file.
1
18
19#include <cassert>
20#include <iostream>
21#include <vector>
22
27namespace range_queries {
32namespace prefix_sum_array {
33
34std::vector<int64_t> PSA{};
35
41void build(const std::vector<int64_t>& original_array) {
42 PSA.clear();
43 PSA.push_back(0);
44 for (std::size_t i = 1; i < original_array.size(); ++i) {
45 PSA.push_back(PSA.back() + original_array[i]);
46 }
47}
48
54int64_t query(int64_t beg, int64_t end) { return PSA[end] - PSA[beg - 1]; }
55
56} // namespace prefix_sum_array
57} // namespace range_queries
58
63static void test() {
64 std::vector<int64_t> values{0, 123, 0, 2, -2, 5,
65 24, 0, 23, -1, -1}; // original array
66
68 // queries are of the type: sum of the range [a, b] = psa[b] - psa[a-1]
69
71 173); // sum of the entire array
73 27); // the sum of the interval [4, 6]
75 51); // the sum of the interval [5, 9]
76}
77
82int main() {
83 test(); // run self-test implementations
84 return 0;
85}
Range sum queries using prefix-sum-array.
for std::vector
int64_t query(int64_t beg, int64_t end)
query function
void build(const std::vector< int64_t > &original_array)
function that builds the PSA
static void test()
Self-test implementations.
int main()
Main function.