제출 #577931

#제출 시각아이디문제언어결과실행 시간메모리
577931MohamedFaresNebiliPalembang Bridges (APIO15_bridge)C++14
100 / 100
105 ms6644 KiB
#include <bits/stdc++.h> #include <ext/pb_ds/assoc_container.hpp> using namespace std; using namespace __gnu_pbds; using ll = long long; using ii = pair<int, int>; #define pb push_back #define pp pop_back #define ff first #define ss second #define int ll typedef tree<int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update> indexed_set; bool cmp(ii A, ii B) { return A.ff + A.ss < B.ff + B.ss; } int K, N, A, B, Pr[100001]; priority_queue<int> L, R; vector<ii> arr; void solve(int V) { int md = L.size() ? L.top() : 1e9 + 7; if(V <= md) { L.push(V); A += V; } else { R.push(-V); B += V; } if(L.size() > R.size() + 1) { V = L.top(); L.pop(); R.push(-V); A -= V; B += V; } else if(L.size() < R.size()) { V = -R.top(); R.pop(); L.push(V); A += V; B -= V; } } int32_t main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> K >> N; int res = 0, curr = 0; for(int l = 0; l < N; l++) { char P, Q; int S, T; cin >> P >> S >> Q >> T; if(P == Q) { curr += abs(T - S); continue; } arr.pb({S, T}); } sort(arr.begin(), arr.end(), cmp); N = arr.size(); curr += N; for(int l = 0; l < N; l++) { solve(arr[l].ff); solve(arr[l].ss); Pr[l] = B - A; } res = Pr[N - 1]; if(K == 2) { A = B = 0; while(!L.empty()) L.pop(); while(!R.empty()) R.pop(); for(int l = N - 1; l >= 0; l--) { res = min(res, B - A + Pr[l]); solve(arr[l].ff); solve(arr[l].ss); } } cout << res + curr << "\n"; return 0; }
#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...