This documentation is automatically generated by competitive-verifier/competitive-verifier
#include "tools/less_equal_zeta.hpp"
(1)
template <typename InputIterator, typename OutputIterator>
void less_equal_zeta(InputIterator begin, InputIterator end, OutputIterator result);
(2)
template <typename RandomAccessIterator>
void less_equal_zeta(RandomAccessIterator begin, RandomAccessIterator end);
begin
and end
, it stores the sequence $(b_0, b_1, \ldots, b_{N - 1})$ that satisfies the following relational equation to result
.begin
and end
, it stores the sequence $(b_0, b_1, \ldots, b_{N - 1})$ that satisfies the following relational equation to begin
.The following relationship holds between $a$ and $b$.
\[\begin{align*} b_i &= \sum_{0 \leq j \leq i} a_j \end{align*}\]result
in (1) can be the same as begin
, but it would be better to use (2) in that case.#ifndef TOOLS_LESS_EQUAL_ZETA_HPP
#define TOOLS_LESS_EQUAL_ZETA_HPP
#include <iterator>
#include <vector>
#include <algorithm>
namespace tools {
template <typename RandomAccessIterator>
void less_equal_zeta(const RandomAccessIterator begin, const RandomAccessIterator end) {
const int N = end - begin;
for (int i = 1; i < N; ++i) {
begin[i] += begin[i - 1];
}
}
template <typename InputIterator, typename OutputIterator>
void less_equal_zeta(const InputIterator begin, const InputIterator end, const OutputIterator result) {
using T = typename ::std::iterator_traits<InputIterator>::value_type;
::std::vector<T> a(begin, end);
::tools::less_equal_zeta(a.begin(), a.end());
::std::move(a.begin(), a.end(), result);
}
}
#endif
#line 1 "tools/less_equal_zeta.hpp"
#include <iterator>
#include <vector>
#include <algorithm>
namespace tools {
template <typename RandomAccessIterator>
void less_equal_zeta(const RandomAccessIterator begin, const RandomAccessIterator end) {
const int N = end - begin;
for (int i = 1; i < N; ++i) {
begin[i] += begin[i - 1];
}
}
template <typename InputIterator, typename OutputIterator>
void less_equal_zeta(const InputIterator begin, const InputIterator end, const OutputIterator result) {
using T = typename ::std::iterator_traits<InputIterator>::value_type;
::std::vector<T> a(begin, end);
::tools::less_equal_zeta(a.begin(), a.end());
::std::move(a.begin(), a.end(), result);
}
}