Submission #229650

#TimeUsernameProblemLanguageResultExecution timeMemory
229650nvmdavaPalembang Bridges (APIO15_bridge)C++17
100 / 100
309 ms14504 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long #define ff first #define ss second mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); #define N 100005 const ll MOD = 1000000007; const int INF = 0x3f3f3f3f; vector<pair<int, int> > v; ll tmp; multiset<int>::iterator it; multiset<int> in; ll sum, all; ll pr[N], su[N]; int n; void wtf(ll* ans){ all = sum = 0; in.clear(); in.insert(-1); it = in.begin(); int i = 1; for(auto& x : v){ all += x.ff; in.insert(x.ff); in.insert(x.ss); if(x.ss < *it){ sum += x.ff + x.ss - (*it); --it; } else if(x.ff >= *it){ ++it; sum += *it; } else { sum += x.ff; } ans[i] = all - sum; ++i; } } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int k; cin>>k>>n; while(n--){ char c, d; int a, b; cin>>c>>a>>d>>b; tmp += abs(a - b); if(c == d) continue; ++tmp; if(a > b) swap(a, b); v.push_back({a, b}); } sort(v.begin(), v.end(), [](const pair<int, int>& lhs, const pair<int, int>& rhs){ return lhs.ff + lhs.ss < rhs.ff + rhs.ss; }); n = v.size(); wtf(pr); reverse(v.begin(), v.end()); wtf(su); if(k == 1){ cout<<pr[n] * 2 + tmp; } else { ll mn = pr[n]; for(int i = 0; i <= n; ++i){ mn = min(pr[i] + su[n - i], mn); } cout<<mn * 2 + tmp; } }
#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...