Algorithms_in_C++ 1.0.0
Set of algorithms implemented in C++.
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 More...
 
int64_t range_queries::prefix_sum_array::query (int64_t beg, int64_t end)
 query function More...
 
static void test ()
 Self-test implementations. More...
 
int main ()
 Main function. More...
 

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
69 173); // sum of the entire array
71 27); // the sum of the interval [4, 6]
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
int64_t query(std::vector< int64_t > *segtree, std::vector< int64_t > *lazy, uint64_t qlow, uint64_t qhigh, uint64_t low, uint64_t high, uint64_t pos)
Returns the sum of all elements in a range.
Definition: segtree.cpp:62
Here is the call graph for this function: