Submission #1156143

#TimeUsernameProblemLanguageResultExecution timeMemory
1156143raphaelpPalembang Bridges (APIO15_bridge)C++20
100 / 100
128 ms12016 KiB
#include <bits/stdc++.h> using namespace std; int main() { long long K, N; cin >> K >> N; long long tot = 0; vector<vector<long long>> Tab; long long buff = 0; for (long long i = 0; i < N; i++) { long long b, d; char a, c; cin >> a >> b >> c >> d; tot += abs(b - d); if (a == c) { continue; } Tab.push_back({b + d, min(b, d), max(b, d)}); buff++; tot++; } long long add = 0; sort(Tab.begin(), Tab.end()); vector<long long> ans(buff); N = buff; priority_queue<pair<long long, long long>> left, right; left.push({-1000000000, 0}); right.push({-1000000000, 0}); long long cur = 0, rig = 0; for (long long i = 0; i < N; i++) { if (Tab[i][1] < left.top().first) left.push({Tab[i][1], 0}); else { right.push({-Tab[i][1], 0}); add += (Tab[i][1] - left.top().first) * 2; rig++; } right.push({-Tab[i][2], 1}); if (right.size() > left.size()) { add += (-right.top().first - left.top().first) * (cur - rig) * 2; left.push({-right.top().first, right.top().second}); if (right.top().second == 0) rig--; else cur++; right.pop(); } ans[i] = add; } while (left.size()) left.pop(); while (right.size()) right.pop(); cur = 0, rig = 0, add = 0; left.push({-1000000000, 0}); right.push({-1000000000, 0}); for (long long i = N - 1; i > 0; i--) { if (Tab[i][2] > -left.top().first) left.push({-Tab[i][2], 0}); else { right.push({Tab[i][2], 0}); add += (-left.top().first - Tab[i][2]) * 2; rig++; } right.push({Tab[i][1], 1}); if (right.size() > left.size()) { add += (-right.top().first - left.top().first) * (cur - rig) * 2; left.push({-right.top().first, right.top().second}); if (right.top().second == 0) rig--; else cur++; right.pop(); } ans[i - 1] += add; } if (N == 0) { cout << tot; return 0; } if (K == 1) { cout << tot + ans[N - 1]; return 0; } long long minn = ans[0]; for (long long i = 0; i < N; i++) minn = min(minn, ans[i]); cout << tot + minn; }
#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...