이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "wiring.h"
#include<bits/stdc++.h>
using namespace std;
#define endl "\n"
// #define int long long
typedef long long ll ;
const ll ooo = 1e14 ;
const ll oo = 2e9 ;
const double PI = acos(-1) ;
const ll M = 1e9 + 7 ;
const int N = 10000010 ;
ll dp[200010] , d[200010] , sum[200010];
ll min_total_length(vector<int> r, vector<int> b) {
vector<pair<int,int>> v;
for(auto i : r) v.push_back({i , 0});
for(auto i : b) v.push_back({i , 1});
sort(v.begin(), v.end());
int n = v.size();
sum[0] = v[0].first ;
d[0] = -1 ;
dp[0] = ooo;
for(int i = 1 ; i < n; ++i){
dp[i] = ooo;
sum[i] = sum[i - 1] + v[i].first;
d[i] = (v[i].second == v[i - 1].second ? d[i - 1] : i - 1);
if(d[i] == -1) continue ;
// cout << i << ' ' << d[i] << ' ' << d[i] - (i - d[i]) << endl;
dp[i] = min(dp[i - 1] + v[i].first - v[d[i]].first , dp[i]);
if(d[d[i]] <= d[i] - (i - d[i]) ){
dp[i] = min(dp[i] ,
(sum[i] - sum[d[i]]) - (sum[d[i]] - sum[d[i] - (i - d[i])]) + dp[d[i] - (i - d[i])]);
}
}
return dp[n - 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... |