Submission #624851

#TimeUsernameProblemLanguageResultExecution timeMemory
624851dutinmeowCake 3 (JOI19_cake3)C++14
Compilation error
0 ms0 KiB
#include <bits/stdc++.h>
using namespace std;

#pragma region zip

#ifndef ZIP_HPP
#define ZIP_HPP

namespace zip_internal {
	template<typename Iter>
	using select_access_type_for = conditional_t<
		is_same_v<Iter, vector<bool>::iterator> ||
		is_same_v<Iter, vector<bool>::const_iterator>,
		typename Iter::value_type,
		typename Iter::reference
	>;

	template<typename ...Args, size_t ...Index>
	auto any_match_impl(tuple<Args...> const & lhs, tuple<Args...> const & rhs, index_sequence<Index...>) -> bool {
		auto result = false;
		result = (... | (get<Index>(lhs) == get<Index>(rhs)));
		return result;
	}

	template<typename ...Args>
	auto any_match(tuple<Args...> const &lhs, tuple<Args...> const &rhs) -> bool {
		return any_match_impl(lhs, rhs, index_sequence_for<Args...>{});
	}

	template<typename ... Iters>
	class zip_iterator {
	public:
		using value_type = tuple<select_access_type_for<Iters>...>;

		zip_iterator() = delete;

		zip_iterator(Iters &&...iters) : m_iters {forward<Iters>(iters)...} {}

		auto operator++() -> zip_iterator &{
			apply([](auto && ... args) { ((args += 1), ...); }, m_iters);
			return *this;
		}

		auto operator++(int) -> zip_iterator {
			auto tmp = *this;
			++*this;
			return tmp;
		}

		auto operator!=(zip_iterator const &other) {
			return !(*this == other);
		}

		auto operator==(zip_iterator const &other) {
			auto result = false;
			return any_match(m_iters, other.m_iters);
		}

		auto operator*() -> value_type {
			return apply([](auto && ... args) { return value_type(*args...); }, m_iters);
		}

	private:
		tuple<Iters...> m_iters;
	};

	template<typename T>
	using select_iterator_for = conditional_t<
		is_const_v<remove_reference_t<T>>, 
		typename decay_t<T>::const_iterator, 
		typename decay_t<T>::iterator
	>;

	template<typename ...T>
	class zipper {
	public:
		using zip_type = zip_iterator<select_iterator_for<T>...>;

		template<typename ...Args>
		zipper(Args && ... args) : m_args{forward<Args>(args)...} {}

		auto begin() -> zip_type {
			return apply([](auto &&...args){ return zip_type(std::begin(args)...); }, m_args);
		}

		auto end() -> zip_type {
			return apply([](auto && ... args) { return zip_type(std::end(args)...); }, m_args);
		}

	private:
		tuple<T...> m_args;
	};
}

template<typename ...T>
auto zip(T &&...t) { return zip_internal::zipper<T ...>{forward<T>(t)...}; }

#endif

#pragma endregion zip

#pragma region y_combinator

#ifndef Y_COMBINATOR_HPP
#define Y_COMBINATOR_HPP

template<class Fun>
class y_combinator_result {
	Fun fun_;
public:
	template<class T>
	explicit y_combinator_result(T &&fun) : fun_(std::forward<T>(fun)) {}

	template<class ...Args>
	decltype(auto) operator()(Args &&...args) {
		return fun_(std::ref(*this), std::forward<Args>(args)...);
	}
};

template<class Fun>
decltype(auto) y_combinator(Fun &&fun) {
	return y_combinator_result<std::decay_t<Fun>>(std::forward<Fun>(fun));
}

#endif

#pragma endregion y_combinator

#pragma region chmax

#ifndef CHMAX_HPP
#define CHMAX_HPP

template<typename T>
bool chmax(T &a, T b) {
	if (a < b) {
		a = b;
		return true;
	}
	return false;
}

#endif

#pragma endregion chmax

class wavelet_tree {
	int n;
	vector<long long> vmap;
	vector<vector<int>> tree;
	vector<vector<long long>> psum;

	template<typename I>
	void build(I begin, I end, int t, int vl, int vr) {
		if (vl == vr) {
			int nn = end - begin + 1;
			psum[t].reserve(nn);
			psum[t].push_back(0);
			for (auto it = begin; it != end; it++)
				psum[t].push_back(psum[t].back() + vmap[*it]);
			return;
		}
		int vm = (vl + vr) / 2, nn = end - begin + 1;
		tree[t].reserve(nn);
		psum[t].reserve(nn);
		tree[t].push_back(0);
		psum[t].push_back(0);
		for (auto it = begin; it != end; it++) {
			tree[t].push_back(tree[t].back() + (*it <= vm));
			psum[t].push_back(psum[t].back() + vmap[*it]);
		}
		auto pivot = stable_partition(begin, end, [vm](int x) { return x <= vm; });
		build(begin, pivot, t * 2, vl, vm);
		build(pivot, end, t * 2 + 1, vm + 1, vr);
	}

	long long query(int l, int r, int k, int t, int vl, int vr) {
		if (vl == vr) 
			return k * vmap[vl];
		int vm = (vl + vr) / 2, lv = tree[t][r] - tree[t][l - 1];
		if (k <= lv)
			return query(tree[t][l - 1] + 1, tree[t][r], k, t * 2, vl, vm);
		else 
			return psum[t * 2][tree[t][r]] - psum[t * 2][tree[t][l - 1]] +\
				query(l - tree[t][l - 1], r - tree[t][r], k - lv, t * 2 + 1, vm + 1, vr);
	}


public:
	wavelet_tree(vector<long long> vec) { init(vec.begin(), vec.end()); }

	template<typename I>
	void init(I begin, I end) {
		map<long long, int> m;
		for (auto it = begin; it != end; it++)
			m[*it] = 0;
		n = 0;
		vmap.resize(m.size());
		for (auto &[k, v] : m) 
			vmap[v = n++] = k;
		for (auto it = begin; it != end; it++)
			*it = m[*it];
		tree.resize(4 * n);
		psum.resize(4 * n);
		build(begin, end, 1, 0, n);
	}

	// returns sum of k smallest elements in range [l, r] 
	long long query(int l, int r, int k) { 
		assert(k <= r - l + 1);
		return query(l + 1, r + 1, k, 1, 0, n); 
	}
};

int main() {
	int N, M;
	cin >> N >> M;
	vector<pair<long long, long long>> A(N);
	for (auto &[v, c] : A) {
		cin >> v >> c;
		v = -v;
	}
	sort(A.begin(), A.end(), [](auto a, auto b) {
		return a.second < b.second;
	});
	vector<long long> V(N), C(N);
	for (auto &&[a, v, c] : zip(A, V, C))
		tie(v, c) = a;

	wavelet_tree wt(V);
	vector<int> rpos(N - M + 1);

	auto dnq = y_combinator([&](auto dnq, int pl, int pr, int ql, int qr) -> void {
		if (pr < pl)
			return;
		if (ql == qr) {
			for (int i = pl; i <= pr; i++)
				rpos[i] = ql;
			return;
		}
		int pm = (pl + pr) / 2, qm = -1;
		long long val = LLONG_MIN;
		for (int i = ql; i <= qr; i++) {
			if (i - pm + 1 < M)
				continue;
			long long cur = -wt.query(pm, i, M) - 2 * (C[i] - C[pm]);
			if (chmax(val, cur))
				qm = i;
		}
		rpos[pm] = qm;
		dnq(pl, pm - 1, ql, qm);
		dnq(pm + 1, pr, qm, qr);
	});

	dnq(0, N - M, M - 1, N - 1);

	long long ans = LLONG_MIN;
	for (int l = 0; l < N - M + 1; l++) {
		int r = rpos[l];
		long long val = (r == -1 ? -1 : -wt.query(l, r, M) - 2 * (C[r] - C[l]));
		chmax(ans, val);
	}
	cout << ans << '\n';
}

Compilation message (stderr)

cake3.cpp:4: warning: ignoring '#pragma region zip' [-Wunknown-pragmas]
    4 | #pragma region zip
      | 
cake3.cpp:100: warning: ignoring '#pragma endregion zip' [-Wunknown-pragmas]
  100 | #pragma endregion zip
      | 
cake3.cpp:102: warning: ignoring '#pragma region y_combinator' [-Wunknown-pragmas]
  102 | #pragma region y_combinator
      | 
cake3.cpp:127: warning: ignoring '#pragma endregion y_combinator' [-Wunknown-pragmas]
  127 | #pragma endregion y_combinator
      | 
cake3.cpp:129: warning: ignoring '#pragma region chmax' [-Wunknown-pragmas]
  129 | #pragma region chmax
      | 
cake3.cpp:145: warning: ignoring '#pragma endregion chmax' [-Wunknown-pragmas]
  145 | #pragma endregion chmax
      | 
cake3.cpp:12:3: error: 'is_same_v' was not declared in this scope
   12 |   is_same_v<Iter, vector<bool>::iterator> ||
      |   ^~~~~~~~~
cake3.cpp:12:41: error: wrong number of template arguments (2, should be 3)
   12 |   is_same_v<Iter, vector<bool>::iterator> ||
      |                                         ^
In file included from /usr/include/c++/10/bits/move.h:57,
                 from /usr/include/c++/10/bits/nested_exception.h:40,
                 from /usr/include/c++/10/exception:148,
                 from /usr/include/c++/10/ios:39,
                 from /usr/include/c++/10/istream:38,
                 from /usr/include/c++/10/sstream:38,
                 from /usr/include/c++/10/complex:45,
                 from /usr/include/c++/10/ccomplex:39,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:54,
                 from cake3.cpp:1:
/usr/include/c++/10/type_traits:2558:11: note: provided for 'template<bool _Cond, class _Iftrue, class _Iffalse> using conditional_t = typename std::conditional::type'
 2558 |     using conditional_t = typename conditional<_Cond, _Iftrue, _Iffalse>::type;
      |           ^~~~~~~~~~~~~
cake3.cpp: In function 'bool zip_internal::any_match_impl(const std::tuple<_Tps ...>&, const std::tuple<_Tps ...>&, std::index_sequence<Index ...>)':
cake3.cpp:21:54: warning: fold-expressions only available with '-std=c++17' or '-std=gnu++17'
   21 |   result = (... | (get<Index>(lhs) == get<Index>(rhs)));
      |                                                      ^
cake3.cpp: At global scope:
cake3.cpp:33:28: error: 'select_access_type_for' was not declared in this scope
   33 |   using value_type = tuple<select_access_type_for<Iters>...>;
      |                            ^~~~~~~~~~~~~~~~~~~~~~
cake3.cpp:33:56: error: template argument 1 is invalid
   33 |   using value_type = tuple<select_access_type_for<Iters>...>;
      |                                                        ^
cake3.cpp:59:23: error: 'value_type' does not name a type
   59 |   auto operator*() -> value_type {
      |                       ^~~~~~~~~~
cake3.cpp: In lambda function:
cake3.cpp:40:47: warning: fold-expressions only available with '-std=c++17' or '-std=gnu++17'
   40 |    apply([](auto && ... args) { ((args += 1), ...); }, m_iters);
      |                                               ^~~
cake3.cpp: At global scope:
cake3.cpp:69:3: error: 'is_const_v' was not declared in this scope
   69 |   is_const_v<remove_reference_t<T>>,
      |   ^~~~~~~~~~
cake3.cpp:69:34: error: wrong number of template arguments (1, should be 3)
   69 |   is_const_v<remove_reference_t<T>>,
      |                                  ^~
In file included from /usr/include/c++/10/bits/move.h:57,
                 from /usr/include/c++/10/bits/nested_exception.h:40,
                 from /usr/include/c++/10/exception:148,
                 from /usr/include/c++/10/ios:39,
                 from /usr/include/c++/10/istream:38,
                 from /usr/include/c++/10/sstream:38,
                 from /usr/include/c++/10/complex:45,
                 from /usr/include/c++/10/ccomplex:39,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:54,
                 from cake3.cpp:1:
/usr/include/c++/10/type_traits:2558:11: note: provided for 'template<bool _Cond, class _Iftrue, class _Iffalse> using conditional_t = typename std::conditional::type'
 2558 |     using conditional_t = typename conditional<_Cond, _Iftrue, _Iffalse>::type;
      |           ^~~~~~~~~~~~~
cake3.cpp:77:33: error: 'select_iterator_for' was not declared in this scope
   77 |   using zip_type = zip_iterator<select_iterator_for<T>...>;
      |                                 ^~~~~~~~~~~~~~~~~~~
cake3.cpp:77:54: error: template argument 1 is invalid
   77 |   using zip_type = zip_iterator<select_iterator_for<T>...>;
      |                                                      ^
cake3.cpp:82:19: error: 'zip_type' does not name a type
   82 |   auto begin() -> zip_type {
      |                   ^~~~~~~~
cake3.cpp:86:17: error: 'zip_type' does not name a type
   86 |   auto end() -> zip_type {
      |                 ^~~~~~~~
cake3.cpp: In member function 'void wavelet_tree::init(I, I)':
cake3.cpp:199:14: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
  199 |   for (auto &[k, v] : m)
      |              ^
cake3.cpp: In function 'int main()':
cake3.cpp:219:13: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
  219 |  for (auto &[v, c] : A) {
      |             ^
cake3.cpp:227:14: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
  227 |  for (auto &&[a, v, c] : zip(A, V, C))
      |              ^
cake3.cpp:227:37: error: no matching function for call to 'begin(zip_internal::zipper<std::vector<std::pair<long long int, long long int>, std::allocator<std::pair<long long int, long long int> > >&, std::vector<long long int, std::allocator<long long int> >&, std::vector<long long int, std::allocator<long long int> >&>&)'
  227 |  for (auto &&[a, v, c] : zip(A, V, C))
      |                                     ^
In file included from /usr/include/c++/10/bits/range_access.h:36,
                 from /usr/include/c++/10/string:54,
                 from /usr/include/c++/10/bits/locale_classes.h:40,
                 from /usr/include/c++/10/bits/ios_base.h:41,
                 from /usr/include/c++/10/ios:42,
                 from /usr/include/c++/10/istream:38,
                 from /usr/include/c++/10/sstream:38,
                 from /usr/include/c++/10/complex:45,
                 from /usr/include/c++/10/ccomplex:39,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:54,
                 from cake3.cpp:1:
/usr/include/c++/10/initializer_list:90:5: note: candidate: 'template<class _Tp> constexpr const _Tp* std::begin(std::initializer_list<_Tp>)'
   90 |     begin(initializer_list<_Tp> __ils) noexcept
      |     ^~~~~
/usr/include/c++/10/initializer_list:90:5: note:   template argument deduction/substitution failed:
cake3.cpp:227:37: note:   'zip_internal::zipper<std::vector<std::pair<long long int, long long int>, std::allocator<std::pair<long long int, long long int> > >&, std::vector<long long int, std::allocator<long long int> >&, std::vector<long long int, std::allocator<long long int> >&>' is not derived from 'std::initializer_list<_Tp>'
  227 |  for (auto &&[a, v, c] : zip(A, V, C))
      |                                     ^
In file included from /usr/include/c++/10/string:54,
                 from /usr/include/c++/10/bits/locale_classes.h:40,
                 from /usr/include/c++/10/bits/ios_base.h:41,
                 from /usr/include/c++/10/ios:42,
                 from /usr/include/c++/10/istream:38,
                 from /usr/include/c++/10/sstream:38,
                 from /usr/include/c++/10/complex:45,
                 from /usr/include/c++/10/ccomplex:39,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:54,
                 from cake3.cpp:1:
/usr/include/c++/10/bits/range_access.h:51:5: note: candidate: 'template<class _Container> decltype (__cont.begin()) std::begin(_Container&)'
   51 |     begin(_Container& __cont) -> decltype(__cont.begin())
      |     ^~~~~
/usr/include/c++/10/bits/range_access.h:51:5: note:   template argument deduction/substitution failed:
/usr/include/c++/10/bits/range_access.h: In substitution of 'template<class _Container> decltype (__cont.begin()) std::begin(_Container&) [with _Container = zip_internal::zipper<std::vector<std::pair<long long int, long long int>, std::allocator<std::pair<long long int, long long int> > >&, std::vector<long long int, std::allocator<long long int> >&, std::vector<long long int, std::allocator<long long int> >&>]':
cake3.cpp:227:37:   required from here
/usr/include/c++/10/bits/range_access.h:51:50: error: 'class zip_internal::zipper<std::vector<std::pair<long long int, long long int>, std::allocator<std::pair<long long int, long long int> > >&, std::vector<long long int, std::allocator<long long int> >&, std::vector<long long int, std::allocator<long long int> >&>' has no member named 'begin'
   51 |     begin(_Container& __cont) -> decltype(__cont.begin())
      |                                           ~~~~~~~^~~~~
/usr/include/c++/10/bits/range_access.h:61:5: note: candidate: 'template<class _Container> decltype (__cont.begin()) std::begin(const _Container&)'
   61 |     begin(const _Container& __cont) -> decltype(__cont.begin())
      |     ^~~~~
/usr/include/c++/10/bits/range_access.h:61:5: note:   template argument deduction/substitution failed:
/usr/include/c++/10/bits/range_access.h: In substitution of 'template<class _Container> decltype (__cont.begin()) std::begin(const _Container&) [with _Container = zip_internal::zipper<std::vector<std::pair<long long int, long long int>, std::allocator<std::pair<long long int, long long int> > >&, std::vector<long long int, std::allocator<long long int> >&, std::vector<long long int, std::allocator<long long int> >&>]':
cake3.cpp:227:37:   required from here
/usr/include/c++/10/bits/range_access.h:61:56: error: 'const class zip_internal::zipper<std::vector<std::pair<long long int, long long int>, std::allocator<std::pair<long long int, long long int> > >&, std::vector<long long int, std::allocator<long long int> >&, std::vector<long long int, std::allocator<long long int> >&>' has no member named 'begin'
   61 |     begin(const _Container& __cont) -> decltype(__cont.begin())
      |                                                 ~~~~~~~^~~~~
/usr/include/c++/10/bits/range_access.h:90:5: note: candidate: 'template<class _Tp, long unsigned int _Nm> constexpr _Tp* std::begin(_Tp (&)[_Nm])'
   90 |     begin(_Tp (&__arr)[_Nm])
      |     ^~~~~
/usr/include/c++/10/bits/range_access.h:90:5: note:   template argument deduction/substitution failed:
cake3.cpp:227:37: note:   mismatched types '_Tp [_Nm]' and 'zip_internal::zipper<std::vector<std::pair<long long int, long long int>, std::allocator<std::pair<long long int, long long int> > >&, std::vector<long long int, std::allocator<long long int> >&, std::vector<long long int, std::allocator<long long int> >&>'
  227 |  for (auto &&[a, v, c] : zip(A, V, C))
      |                                     ^
In file included from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:95,
                 from cake3.cpp:1:
/usr/include/c++/10/valarray:1214:5: note: candidate: 'template<class _Tp> _Tp* std::begin(std::valarray<_Tp>&)'
 1214 |     begin(valarray<_Tp>& __va)
      |     ^~~~~
/usr/include/c++/10/valarray:1214:5: note:   template argument deduction/substitution failed:
cake3.cpp:227:37: note:   'zip_internal::zipper<std::vector<std::pair<long long int, long long int>, std::allocator<std::pair<long long int, long long int> > >&, std::vector<long long int, std::allocator<long long int> >&, std::vector<long long int, std::allocator<long long int> >&>' is not derived from 'std::valarray<_Tp>'
  227 |  for (auto &&[a, v, c] : zip(A, V, C))
      |                                     ^
In file included from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:95,
                 from cake3.cpp:1:
/usr/include/c++/10/valarray:1224:5: note: candidate: 'template<class _Tp> const _Tp* std::begin(const std::valarray<_Tp>&)'
 1224 |     begin(const valarray<_Tp>& __va)
      |     ^~~~~
/usr/include/c++/10/valarray:1224:5: note:   template argument deduction/substitution failed:
cake3.cpp:227:37: note:   'zip_internal::zipper<std::vector<std::pair<long long int, long long int>, std::allocator<std::pair<long long int, long long int> > >&, std::vector<long long int, std::allocator<long long int> >&, std::vector<long long int, std::allocator<long long int> >&>' is not derived from 'const std::valarray<_Tp>'
  227 |  for (auto &&[a, v, c] : zip(A, V, C))
      |                                     ^
cake3.cpp:227:37: error: no matching function for call to 'end(zip_internal::zipper<std::vector<std::pair<long long int, long long int>, std::allocator<std::pair<long long int, long long int> > >&, std::vector<long long int, std::allocator<long long int> >&, std::vector<long long int, std::allocator<long long int> >&>&)'
In file included from /usr/include/c++/10/bits/range_access.h:36,
                 from /usr/include/c++/10/string:54,
                 from /usr/include/c++/10/bits/locale_classes.h:40,
                 from /usr/include/c++/10/bits/ios_base.h:41,
                 from /usr/include/c++/10/ios:42,
                 from /usr/include/c++/10/istream:38,
                 from /usr/include/c++/10/sstream:38,
                 from /usr/include/c++/10/complex:45,
                 from /usr/include/c++/10/ccomplex:39,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:54,
                 from cake3.cpp:1:
/usr/include/c++/10/initializer_list:101:5: note: candidate: 'template<class _Tp> constexpr const _Tp* std::end(std::initializer_list<_Tp>)'
  101 |     end(initializer_list<_Tp> __ils) noexcept
      |     ^~~
/usr/include/c++/10/initializer_list:101:5: note:   template argument deduction/substitution failed:
cake3.cpp:227:37: note:   'zip_internal::zipper<std::vector<std::pair<long long int, long long int>, std::allocator<std::pair<long long int, long long int> > >&, std::vector<long long int, std::allocator<long long int> >&, std::vector<long long int, std::allocator<long long int> >&>' is not derived from 'std::initializer_list<_Tp>'
  227 |  for (auto &&[a, v, c] : zip(A, V, C))
      |                                     ^
In file included from /usr/include/c++/10/string:54,
                 from /usr/include/c++/10/bits/locale_classes.h:40,
                 from /usr/include/c++/10/bits/ios_base.h:41,
                 from /usr/include/c++/10/ios:42,
                 from /usr/include/c++/10/istream:38,
                 from /usr/include/c++/10/sstream:38,
                 from /usr/include/c++/10/complex:45,
                 from /usr/include/c++/10/ccomplex:39,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:54,
                 from cake3.cpp:1:
/usr/include/c++/10/bits/range_access.h:71:5: note: candidate: 'template<class _Container> decltype (__cont.end()) std::end(_Container&)'
   71 |     end(_Container& __cont) -> decltype(__cont.end())
      |     ^~~
/usr/include/c++/10/bits/range_access.h:71:5: note:   template argument deduction/substitution failed:
/usr/include/c++/10/bits/range_access.h: In substitution of 'template<class _Container> decltype (__cont.end()) std::end(_Container&) [with _Container = zip_internal::zipper<std::vector<std::pair<long long int, long long int>, std::allocator<std::pair<long long int, long long int> > >&, std::vector<long long int, std::allocator<long long int> >&, std::vector<long long int, std::allocator<long long int> >&>]':
cake3.cpp:227:37:   required from here
/usr/include/c++/10/bits/range_access.h:71:48: error: 'class zip_internal::zipper<std::vector<std::pair<long long int, long long int>, std::allocator<std::pair<long long int, long long int> > >&, std::vector<long long int, std::allocator<long long int> >&, std::vector<long long int, std::allocator<long long int> >&>' has no member named 'end'
   71 |     end(_Container& __cont) -> decltype(__cont.end())
      |                                         ~~~~~~~^~~
/usr/include/c++/10/bits/range_access.h:81:5: note: candidate: 'template<class _Container> decltype (__cont.end()) std::end(const _Container&)'
   81 |     end(const _Container& __cont) -> decltype(__cont.end())
      |     ^~~
/usr/include/c++/10/bits/range_access.h:81:5: note:   template argument deduction/substitution failed:
/usr/include/c++/10/bits/range_access.h: In substitution of 'template<class _Container> decltype (__cont.end()) std::end(const _Container&) [with _Container = zip_internal::zipper<std::vector<std::pair<long long int, long long int>, std::allocator<std::pair<long long int, long long int> > >&, std::vector<long long int, std::allocator<long long int> >&, std::vector<long long int, std::allocator<long long int> >&>]':
cake3.cpp:227:37:   required from here
/usr/include/c++/10/bits/range_access.h:81:54: error: 'const class zip_internal::zipper<std::vector<std::pair<long long int, long long int>, std::allocator<std::pair<long long int, long long int> > >&, std::vector<long long int, std::allocator<long long int> >&, std::vector<long long int, std::allocator<long long int> >&>' has no member named 'end'
   81 |     end(const _Container& __cont) -> decltype(__cont.end())
      |                                               ~~~~~~~^~~
/usr/include/c++/10/bits/range_access.h:100:5: note: candidate: 'template<class _Tp, long unsigned int _Nm> constexpr _Tp* std::end(_Tp (&)[_Nm])'
  100 |     end(_Tp (&__arr)[_Nm])
      |     ^~~
/usr/include/c++/10/bits/range_access.h:100:5: note:   template argument deduction/substitution failed:
cake3.cpp:227:37: note:   mismatched types '_Tp [_Nm]' and 'zip_internal::zipper<std::vector<std::pair<long long int, long long int>, std::allocator<std::pair<long long int, long long int> > >&, std::vector<long long int, std::allocator<long long int> >&, std::vector<long long int, std::allocator<long long int> >&>'
  227 |  for (auto &&[a, v, c] : zip(A, V, C))
      |                                     ^
In file included from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:95,
                 from cake3.cpp:1:
/usr/include/c++/10/valarray:1234:5: note: candidate: 'template<class _Tp> _Tp* std::end(std::valarray<_Tp>&)'
 1234 |     end(valarray<_Tp>& __va)
      |     ^~~
/usr/include/c++/10/valarray:1234:5: note:   template ar