이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
// https://oj.uz/problem/view/JOI22_sugar
#include <bits/stdc++.h>
using namespace std;
#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
int main() {
	int Q, L;
	cin >> Q >> L;
	map<int, int> M;
	vector<int> T(Q), X(Q), A(Q);
	for (int i = 0; i < Q; i++) {
		cin >> T[i] >> X[i] >> A[i];
		M[X[i]] = 0, T[i]--;
	}
	int n = 0;
	for (auto &[k, v] : M)
		v = n++;
	
	using st_node = array<array<long long, 2>, 2>;
	using st_updt = array<long long, 2>;
	vector<st_node> st_tree(4 * n);
	vector<st_updt> st_lazy(4 * n);
	for (int i = 0; i < 4 * n; i++) {
		st_tree[i][0].fill(0);
		st_tree[i][1].fill(0);
		st_lazy[i].fill(0);
	}
	auto st_pull = [&](int t) -> void {
		st_tree[t][0].fill(LLONG_MIN);
		st_tree[t][1].fill(LLONG_MIN);
		for (int i = 0; i <= 1; i++)
			for (int j = 0; j <= 1; j++)
				for (int k = 0; k <= 1; k++)
					st_tree[t][i][k] = max(st_tree[t][i][k], st_tree[t * 2][i][j] + st_tree[t * 2 + 1][j ^ 1][k]);
	};
	auto st_push = [&](int t, int k, long long v) -> void {
		st_tree[t][k][k] += v;
		st_lazy[t][k] += v;
	};
	auto st_pushdown = [&](int t) -> void {
		for (int k : {0, 1}) {
			if (st_lazy[t][k] == 0)
				continue;
			st_push(t * 2, k, st_lazy[t][k]);
			st_push(t * 2 + 1, k, st_lazy[t][k]);
			st_lazy[t][k] = 0;
		}
	};
	auto st_update = y_combinator([&](auto st_update, int l, int r, int k, long long v, int t, int tl, int tr) -> void {
		if (r < tl || tr < l)
			return;
		if (l <= tl && tr <= r) {
			st_push(t, k, v);
			return;
		}
		st_pushdown(t);
		int tm = (tl + tr) / 2;
		st_update(l, r, k, v, t * 2, tl, tm);
		st_update(l, r, k, v, t * 2 + 1, tm + 1, tr);
		st_pull(t);
	});
	long long ants = 0;
	for (int q = 0; q < Q; q++) {
		auto [t, x, a] = tie(T[q], X[q], A[q]);
		if (t == 0)
			ants += a;
		int lb = M.lower_bound(x - L)->second, rb = M[x];
		st_update(rb, n - 1, t, a, 1, 0, n - 1);
		st_update(rb, n - 1, t ^ 1, -a, 1, 0, n - 1);
		if (lb < rb)
			st_update(lb, rb - 1, t ^ 1, -a, 1, 0, n - 1);
		cout << ants - max(st_tree[1][0][0], st_tree[1][1][0]) << '\n';
	}
}
컴파일 시 표준 에러 (stderr) 메시지
sugar.cpp:6: warning: ignoring '#pragma region y_combinator' [-Wunknown-pragmas]
    6 | #pragma region y_combinator
      | 
sugar.cpp:31: warning: ignoring '#pragma endregion y_combinator' [-Wunknown-pragmas]
   31 | #pragma endregion y_combinator
      || # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... |