library

This documentation is automatically generated by online-judge-tools/verification-helper

View the Project on GitHub maspypy/library

:heavy_check_mark: alg/monoid_pow.hpp

Required by

Verified with

Code

#pragma once

template <typename Monoid>
typename Monoid::X monoid_pow(typename Monoid::X x, u64 exp) {
  using X = typename Monoid::X;
  assert(exp >= 0);
  X res = Monoid::unit();
  while (exp) {
    if (exp & 1) res = Monoid::op(res, x);
    x = Monoid::op(x, x);
    exp >>= 1;
  }
  return res;
}
#line 2 "alg/monoid_pow.hpp"

template <typename Monoid>
typename Monoid::X monoid_pow(typename Monoid::X x, u64 exp) {
  using X = typename Monoid::X;
  assert(exp >= 0);
  X res = Monoid::unit();
  while (exp) {
    if (exp & 1) res = Monoid::op(res, x);
    x = Monoid::op(x, x);
    exp >>= 1;
  }
  return res;
}
Back to top page