Skip to content

head.hpp

#include "noya/head.hpp"

View on GitHub

#ifndef NOYA_HEAD_HPP
#define NOYA_HEAD_HPP 1

#if defined(local)
#include "./noya/debug.hpp"
#else
#define debug(...) 42
#endif

#include <algorithm>
#include <array>
#include <bitset>
#include <cassert>
#include <chrono>
#include <cmath>
#include <cstdint>
#include <cstring>
#include <functional>
#include <iomanip>
#include <iostream>
#include <map>
#include <numeric>
#include <queue>
#include <random>
#include <ranges>
#include <set>
#include <string>
#include <type_traits>
#include <vector>

using namespace std;
#define rep1(a) for (int i = 0; i < a; i++)
#define rep2(i, a) for (int i = 0; i < a; i++)
#define rep3(i, a, b) for (int i = a; i < b; i++)
#define rep4(i, a, b, c) for (int i = a; i < b; i += c)
#define overload4(a, b, c, d, e, ...) e
#define rep(...) overload4(__VA_ARGS__, rep4, rep3, rep2, rep1)(__VA_ARGS__)
#define pb emplace_back
template <typename T, typename T2> bool cmin(T &x, const T2 &y) {
  return (x > y ? x = y, 1 : 0);
}
template <typename T, typename T2> bool cmax(T &x, const T2 &y) {
  return (x < y ? x = y, 1 : 0);
}

using ll = int64_t;
using ull = uint64_t;
using vi = vector<int>;
using vl = vector<ll>;
using pii = pair<int, int>;
using pll = pair<ll, ll>;
template <class T = int> using graph = vector<vector<T>>;
template <class T> using vc = vector<T>;
const int INF = 1010000000;
const ll LNF = 2020000000000000000;
#define sz(x) int((x).size())
#define all(x) begin(x), end(x)
#define fi first
#define se second

namespace noya {

template <class T> vc<pair<T, int>> compress(const vc<T> &S) {
  int N = sz(S);
  vc<pair<T, int>> ret;
  for (int i = 0, j = 0; i < N; i = j) {
    while (j < N && S[i] == S[j])
      j++;
    ret.push_back({S[i], j - i});
  }
  return ret;
}

vc<pii> compress(const string &S) { return compress(vi(S.begin(), S.end())); }

} // namespace noya

#endif // NOYA_HEAD_HPP
#include <algorithm>
#include <array>
#include <bitset>
#include <cassert>
#include <chrono>
#include <cmath>
#include <cstdint>
#include <cstring>
#include <functional>
#include <iomanip>
#include <iostream>
#include <map>
#include <numeric>
#include <queue>
#include <random>
#include <ranges>
#include <set>
#include <string>
#include <type_traits>
#include <vector>

#if defined(local)
#include "./noya/debug.hpp"
#else
#define debug(...) 42
#endif

using namespace std;
#define rep1(a) for (int i = 0; i < a; i++)
#define rep2(i, a) for (int i = 0; i < a; i++)
#define rep3(i, a, b) for (int i = a; i < b; i++)
#define rep4(i, a, b, c) for (int i = a; i < b; i += c)
#define overload4(a, b, c, d, e, ...) e
#define rep(...) overload4(__VA_ARGS__, rep4, rep3, rep2, rep1)(__VA_ARGS__)
#define pb emplace_back
template <typename T, typename T2> bool cmin(T &x, const T2 &y) {
  return (x > y ? x = y, 1 : 0);
}
template <typename T, typename T2> bool cmax(T &x, const T2 &y) {
  return (x < y ? x = y, 1 : 0);
}

using ll = int64_t;
using ull = uint64_t;
using vi = vector<int>;
using vl = vector<ll>;
using pii = pair<int, int>;
using pll = pair<ll, ll>;
template <class T = int> using graph = vector<vector<T>>;
template <class T> using vc = vector<T>;
const int INF = 1010000000;
const ll LNF = 2020000000000000000;
#define sz(x) int((x).size())
#define all(x) begin(x), end(x)
#define fi first
#define se second

namespace noya {

template <class T> vc<pair<T, int>> compress(const vc<T> &S) {
  int N = sz(S);
  vc<pair<T, int>> ret;
  for (int i = 0, j = 0; i < N; i = j) {
    while (j < N && S[i] == S[j])
      j++;
    ret.push_back({S[i], j - i});
  }
  return ret;
}

vc<pii> compress(const string &S) { return compress(vi(S.begin(), S.end())); }

} // namespace noya