#include "wiring.h"
#include <bits/stdc++.h>
using namespace std;
int const MAX=2e5+5;
long long const INF=1e18;
struct dot{
int poz,type;
long long dp,minpref,minsuf;
bool operator<(dot ot){
return poz<ot.poz;
}
}v[MAX];
long long min_total_length(vector<int>r,vector<int>b) {
int n=r.size();
int m=b.size();
int i;
for(i=1;i<=n;++i){
v[i].poz=r[i-1];
v[i].type=1;
}
for(i=1;i<=m;++i){
v[n+i].poz=b[i-1];
v[n+i].type=2;
}
sort(v+1,v+n+m+1);
int ult=-1;
for(i=1;i<=n+m;++i){
int j=i;
while(v[j].type==v[j+1].type)
++j;
int id;
if(ult==-1){
for(id=i;id<=j;++id)
v[id].dp=INF;
}
else{
long long sum=0;
for(id=i;id<=j;++id){
sum+=v[id].poz-v[i].poz;
if(id-i+1>=ult)
v[id].dp=sum+1LL*(id-i+1)*(v[i].poz-v[i-1].poz)+v[i-ult].minsuf;
else
v[id].dp=sum+min(1LL*(id-i+1)*(v[i].poz-v[i-1].poz)+v[2*i-id-1].minsuf,v[2*i-id-2].minpref);
}
}
long long sum=0;
for(id=j;id>=i;--id){
sum+=v[j].poz-v[id].poz;
v[id].minsuf=v[id-1].dp+sum;
v[id].minpref=v[id-1].dp+sum+1LL*(j-id+1)*(v[j+1].poz-v[j].poz);
}
for(id=i+1;id<=j;++id)
v[id].minpref=min(v[id].minpref,v[id-1].minpref);
for(id=j-1;id>=i;--id)
v[id].minsuf=min(v[id].minsuf,v[id+1].minsuf);
ult=j-i+1;
i=j;
}
return v[n+m].dp;
}
# | 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... |