This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include "wiring.h"
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
typedef vector<int> vi;
#define debug(x) {cerr<<#x<<"="<<x<<"\n";}
#define debug2(x, y) {cerr<<#x<<", "<<#y<<" = "<<x<<", "<<y<<"\n";}
#define pb push_back
#define all(x) x.begin(), x.end()
const int inf=1000000100;
const int MAXN=200010;
int n, m, k;
pii A[MAXN];
int prv[MAXN], nxt[MAXN];
int val[MAXN];
ll dp[MAXN], ps[MAXN];
ll min_total_length(vector<int> R, vector<int> B){
for (int x:R) A[++n]={x, 0};
for (int x:B) A[++n]={x, 1};
sort(A+1, A+n+1);
for (int i=2; i<=n; i++){
if (A[i].second==A[i-1].second) prv[i]=prv[i-1];
else prv[i]=i-1;
}
for (int i=n-1; i; i--){
if (A[i].second==A[i+1].second) nxt[i]=nxt[i+1];
else nxt[i]=i+1;
}
for (int i=1; i<=n; i++){
ps[i]=ps[i-1]+A[i].first;
val[i]=min((prv[i]?A[i].first-A[prv[i]].first:inf), (nxt[i]?A[nxt[i]].first-A[i].first:inf));
// debug2(i, val[i])
}
for (int i=1; i<=n; i++){
dp[i]=dp[i-1]+val[i];
if (!prv[i]) continue ;
int ted=i-prv[i];
if (prv[i]-prv[prv[i]]>=ted)
dp[i]=min(dp[i], dp[i-2*ted] + ps[i]-2*ps[i-ted]+ps[i-2*ted]);
// debug2(i, dp[i])
}
return dp[n];
}
# | 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... |