이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
#include "wiring.h"
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
#define fi first
#define se second
#define mp make_pair
const ll inf = (ll)1e18;
ll min_total_length(vector<int> r, vector<int> b) {
vector<pii> al;
al.push_back(mp(-1, 0));
for(auto x : r)
al.push_back(mp(x, 0));
for(auto x : b)
al.push_back(mp(x, 1));
sort(al.begin(), al.end());
int sz = al.size();
vector<ll> dp(sz);
for(int i = 1; i < sz; i ++ ){
dp[i] = inf;
}
vector<int> cur[2];
ll csu = 0;
ll extra;
int s2 = 0, s1 = 0;
for(int i = 1; i < sz; i ++ ){
if(al[i].se != al[i-1].se){
cur[0].clear();
swap(cur[0], cur[1]);
}
cur[1].push_back(i);
if(!cur[0].empty()){
dp[i]=dp[i-1]+al[i].fi-al[cur[0].back()].fi;
csu = 0;
for(auto x : cur[1]){
csu += al[x].fi;
}
s2 = cur[1].size();
s1 = 0;
for(int j = cur[0].size() - 1; j >= 0 ; j -- ){
s1 ++ ;
csu -= al[cur[0][j]].fi;
if(s1 < s2)
extra = -(s2 - s1) * 1ll * al[cur[0].back()].fi;
else
extra = (s1-s2) * 1ll * al[cur[1][0]].fi;
dp[i] = min(dp[i], extra + csu + dp[cur[0][j] - 1]);
}
}
}
return dp[sz - 1];
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |