TheAlgorithms/C++ 1.0.0
All the 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:

Go to the source code of this file.

Namespaces

namespace  range_queries
 for std::vector
 
namespace  prefix_sum_array
 Range sum queries using prefix-sum-array.
 

Functions

std::vector< int64_t > range_queries::prefix_sum_array::PSA (1, 0)
 
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.
 

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.

Definition in file prefix_sum_array.cpp.

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

Definition at line 41 of file prefix_sum_array.cpp.

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}

◆ main()

int main ( void )

Main function.

Returns
0 on exit

Definition at line 80 of file prefix_sum_array.cpp.

80 {
81 test(); // run self-test implementations
82 return 0;
83}
static void test()
Self-test implementations.

◆ 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]

Definition at line 52 of file prefix_sum_array.cpp.

52{ return PSA[end] - PSA[beg - 1]; }

◆ test()

static void test ( )
static

Self-test implementations.

Returns
void

Definition at line 61 of file prefix_sum_array.cpp.

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