제출 #1335083

#제출 시각아이디문제언어결과실행 시간메모리
1335083gelastropodPalembang Bridges (APIO15_bridge)C++20
100 / 100
101 ms8084 KiB
#pragma GCC optimize("O3")
#include <bits/stdc++.h>
using namespace std;
#define int long long

signed main() {
	ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
	int K, N, s, t, ans = LLONG_MAX, o = 0; cin >> K >> N;
	char p, q;
	vector<pair<int, int>> pairs;
	vector<pair<int, int>> sums;
	for (int i = 0; i < N; i++) {
		cin >> p >> s >> q >> t;
		pairs.push_back({ min(s, t), max(s, t) });
		if (p != q) {
			sums.push_back({ s + t, i });
			o++;
		}
		else o += abs(s - t);
	}
	if (pairs.empty()) {
		cout << o << '\n';
		return 0;
	}
	sort(sums.begin(), sums.end());
	vector<int> ansb(sums.size() + 1, 0), anse(sums.size() + 1, 0);
	priority_queue<int> pq1;
	priority_queue<int, vector<int>, greater<int>> pq2;
	int prev = LLONG_MIN, crnt = 0;
	for (int i = 0; i < sums.size(); i++) {
		pq2.push(pairs[sums[i].second].first);
		pq1.push(pq2.top());
		pq2.pop();
		pq1.push(pairs[sums[i].second].second);
		pq2.push(pq1.top());
		pq1.pop();
		if (pq1.top() < prev) crnt += 2 * (prev - pq1.top());
		prev = pq1.top();
		crnt += abs(pq1.top() - pairs[sums[i].second].first) + abs(pq1.top() - pairs[sums[i].second].second);
		ansb[i + 1] = crnt;
	}
	prev = LLONG_MIN, crnt = 0;
	while (pq1.size()) pq1.pop();
	while (pq2.size()) pq2.pop();
	for (int i = sums.size() - 1; i >= 0; i--) {
		pq2.push(pairs[sums[i].second].first);
		pq1.push(pq2.top());
		pq2.pop();
		pq1.push(pairs[sums[i].second].second);
		pq2.push(pq1.top());
		pq1.pop();
		if (pq1.top() < prev) crnt += 2 * (prev - pq1.top());
		prev = pq1.top();
		crnt += abs(pq1.top() - pairs[sums[i].second].first) + abs(pq1.top() - pairs[sums[i].second].second);
		anse[i] = crnt;
	}
	if (K == 1) cout << ansb.back() + o << '\n';
	else {
		for (int i = 0; i <= sums.size(); i++) ans = min(ans, ansb[i] + anse[i]);
		cout << ans + o << '\n';
	}
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...