이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
using namespace std;
using lli = long long;
vector<tuple<int, int, lli>> calc_costs(vector<tuple<int, int, int>> &inters, int k) {
	enum event_type { start, mid, end };
	
	vector<pair<int, event_type>> events;
	for (auto [a, b, c]: inters) {
		++c;
		events.emplace_back(a, start);
		events.emplace_back(min(a + b, c), mid);
		events.emplace_back(c, end);
	}
	sort(events.begin(), events.end());
	vector<tuple<int, int, lli>> costs;
	int cars = 0, illegal = 0, lst = 0;
	for (auto [x, t]: events) {
		if (t == start) ++cars;
		else if (t == end) {
			if (cars >= k) costs.emplace_back(lst, x, 1LL*illegal);
			--cars; --illegal;
		}
		else {
			if (cars >= k) costs.emplace_back(lst, x, 1LL*illegal);
			++illegal;
		}
		lst = x;
	}
	// cerr << "COSTS:\n";
	// for (auto [l, r, c]: costs)
	// 	cerr << l << " " << r << " " << c << "\n";
	// cerr << "\n";
	return costs;
}
lli calc_val(vector<tuple<int, int, lli>> costs, int x) {
	enum event_type { end_crosse, end_crossb, start_crossb, start_crosse };
	
	vector<tuple<int, lli, event_type>> events;
	for (auto [l, r, c]: costs) {
		events.emplace_back(l - x, c, start_crosse);
		events.emplace_back(r - x, c, end_crosse);
		events.emplace_back(l, c, start_crossb);
		events.emplace_back(r, c, end_crossb);
	}
	sort(events.begin(), events.end());
	lli cost = 0; lli best = 0;
	lli crossb = 0, crosse = 0; int lst = 0;
	for (auto [k, c, t]: events) {
		// cerr << k << " " << cost << "\n";
		cost += crosse*(k - lst) - crossb*(k - lst);
		if (t == start_crosse) crosse += c;
		else if (t == end_crosse) crosse -= c;
		else if (t == start_crossb) crossb += c;
		else crossb -= c;
		best = max(best, cost);
		lst = k;
	}
	return best;
}
int main() {
	int n, k, x;
	cin >> n >> k >> x;
	vector<tuple<int, int, int>> inters(n);
	for (auto &[a, b, c]: inters)
		cin >> a >> b >> c;
	cout << calc_val(calc_costs(inters, k), x) << "\n";
}
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... |