proconlib

This documentation is automatically generated by competitive-verifier/competitive-verifier

View the Project on GitHub anqooqie/proconlib

:heavy_check_mark: Find $a$ from $b$ when $b_i = \sum_{j = 0}^i a_j$ holds (tools/less_equal_moebius.hpp)

(1)
template <typename InputIterator, typename OutputIterator>
void less_equal_moebius(InputIterator begin, InputIterator end, OutputIterator result);

(2)
template <typename RandomAccessIterator>
void less_equal_moebius(RandomAccessIterator begin, RandomAccessIterator end);

The following relationship holds between $a$ and $b$.

\[\begin{align*} b_i &= \sum_{0 \leq j \leq i} a_j \end{align*}\]

Constraints

Time Complexity

License

Author

Verified with

Code

#ifndef TOOLS_LESS_EQUAL_MOEBIUS_HPP
#define TOOLS_LESS_EQUAL_MOEBIUS_HPP

#include <iterator>
#include <vector>
#include <algorithm>

namespace tools {
  template <typename RandomAccessIterator>
  void less_equal_moebius(const RandomAccessIterator begin, const RandomAccessIterator end) {
    const int N = end - begin;
    for (int i = N - 1; i - 1 >= 0; --i) {
      begin[i] -= begin[i - 1];
    }
  }

  template <typename InputIterator, typename OutputIterator>
  void less_equal_moebius(const InputIterator begin, const InputIterator end, const OutputIterator result) {
    using T = typename ::std::iterator_traits<InputIterator>::value_type;
    ::std::vector<T> b(begin, end);
    ::tools::less_equal_moebius(b.begin(), b.end());
    ::std::move(b.begin(), b.end(), result);
  }
}

#endif
#line 1 "tools/less_equal_moebius.hpp"



#include <iterator>
#include <vector>
#include <algorithm>

namespace tools {
  template <typename RandomAccessIterator>
  void less_equal_moebius(const RandomAccessIterator begin, const RandomAccessIterator end) {
    const int N = end - begin;
    for (int i = N - 1; i - 1 >= 0; --i) {
      begin[i] -= begin[i - 1];
    }
  }

  template <typename InputIterator, typename OutputIterator>
  void less_equal_moebius(const InputIterator begin, const InputIterator end, const OutputIterator result) {
    using T = typename ::std::iterator_traits<InputIterator>::value_type;
    ::std::vector<T> b(begin, end);
    ::tools::less_equal_moebius(b.begin(), b.end());
    ::std::move(b.begin(), b.end(), result);
  }
}


Back to top page