Algorithms_in_C++ 1.0.0
Set of algorithms implemented in C++.
Loading...
Searching...
No Matches
prefix_sum_array.cpp File Reference

Prefix Sum Array data structure implementation. More...

#include <cassert>
#include <iostream>
#include <vector>
Include dependency graph for prefix_sum_array.cpp:

Namespaces

namespace  range_queries
 Algorithms and Data Structures that support range queries and updates.
 
namespace  prefix_sum_array
 Range sum queries using prefix-sum-array.
 

Functions

void range_queries::prefix_sum_array::build (std::vector< int64_t > original_array)
 function that builds the PSA
 
int64_t range_queries::prefix_sum_array::query (int64_t beg, int64_t end)
 query function
 
static void test ()
 Self-test implementations.
 
int main ()
 Main function.
 

Variables

std::vector< int64_t > range_queries::prefix_sum_array::PSA (1, 0)
 

Detailed Description

Prefix Sum Array data structure implementation.

Prefix Sum Array is a data structure, that allows answering sum in some range queries. It can answer most sum range queries in O(1), with a build time complexity of O(N). But it hasn't an update querie.

Function Documentation

◆ build()

void range_queries::prefix_sum_array::build ( std::vector< int64_t > original_array)

function that builds the PSA

Parameters
original_arrayoriginal array of values
Returns
void
41 {
42 for (int i = 1; i <= static_cast<int>(original_array.size()); i++) {
43 PSA.push_back(PSA[i - 1] + original_array[i]);
44 }
45}
T push_back(T... args)
T size(T... args)
Here is the call graph for this function:

◆ main()

int main ( void )

Main function.

Returns
0 on exit
80 {
81 test(); // run self-test implementations
82 return 0;
83}
static void test()
Self-test implementations.
Definition prefix_sum_array.cpp:61
Here is the call graph for this function:

◆ query()

int64_t range_queries::prefix_sum_array::query ( int64_t beg,
int64_t end )

query function

Parameters
begbegin of the interval to sum
endend of the interval to sum
Returns
sum of the range [beg, end]
52{ return PSA[end] - PSA[beg - 1]; }
T end(T... args)

◆ test()

static void test ( )
static

Self-test implementations.

Returns
void
61 {
62 std::vector<int64_t> values{0, 123, 0, 2, -2, 5,
63 24, 0, 23, -1, -1}; // original array
64
66 // queries are of the type: sum of the range [a, b] = psa[b] - psa[a-1]
67
68 assert(range_queries::prefix_sum_array::query(1, 10) ==
69 173); // sum of the entire array
70 assert(range_queries::prefix_sum_array::query(4, 6) ==
71 27); // the sum of the interval [4, 6]
72 assert(range_queries::prefix_sum_array::query(5, 9) ==
73 51); // the sum of the interval [5, 9]
74}
void build(std::vector< int64_t > original_array)
function that builds the PSA
Definition prefix_sum_array.cpp:41