Submission #1216077

#TimeUsernameProblemLanguageResultExecution timeMemory
1216077JooDdaeWiring (IOI17_wiring)C++20
100 / 100
45 ms8376 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; long long min_total_length(vector<int> r, vector<int> b) { vector<array<int, 2>> v; for(auto x : r) v.push_back({x, -1}); for(auto x : b) v.push_back({x, 1}); sort(v.begin(), v.end()); int N = v.size(); vector<ll> dp(N+1, (ll)1e18), s(N+1, 0); vector<int> lev(N+N+1, -1), R(3, 0), L(3, -1); dp[0] = 0, lev[N] = 0; for(int i=1, u=N;i<=N;i++) { auto [x, y] = v[i-1]; u += y, s[i] = s[i-1] + x*y; while(R[1-y] < N && (R[1-y] < i || v[R[1-y]][1] == y)) R[1-y]++; if(R[1-y] < N) dp[i] = dp[i-1] + v[R[1-y]][0]-x; if(L[1-y] != -1) dp[i] = min(dp[i], dp[i-1] + x-L[1-y]); if(lev[u] != -1) dp[i] = min(dp[i], dp[lev[u]] + abs(s[i]-s[lev[u]])); lev[u] = i, L[y+1] = x; } return dp[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...