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 ;
const int MAX = 2e5 + 10 ;
long long arr[MAX] , dp[MAX] ;
long long val[MAX] , pref[MAX] ;
vector<int>v[2] ;
int n , m ;
void solve(bool t)
{
if(!v[!t].size())
{
for(auto &i : v[t])
dp[i] = 1e18 ;
return ;
}
int st = arr[v[t][0]] , sz = v[!t].size() ;
long long sum = 0 , Min = dp[v[!t][sz-1]] ;
for(int j = sz-1 ; j >= 0 ; --j)
{
int i = v[!t][j] ;
sum += st - arr[i] ;
Min = min(Min , dp[i-1]) ;
val[i] = Min + sum ;
}
pref[v[!t][0]] = val[v[!t][0]] ;
for(int j = 1 ; j < sz ; ++j)
{
int i = v[!t][j] ;
pref[i] = min(pref[i-1] , val[i]) ;
}
int j = v[t][0]-1 ;
sum = 0 , Min = 1e18 ;
for(auto &i : v[t])
{
Min += arr[v[t][0]] - arr[v[t][0]-1] , sum += arr[i] - st ;
dp[i] = Min ;
if(j >= v[!t][0])
dp[i] = min(Min , pref[j]) ;
dp[i] += sum ;
Min = min(Min , val[j]) ;
--j ;
}
}
long long min_total_length(std::vector<int> r, std::vector<int> b)
{
n = r.size() , m = b.size() ;
vector< pair<int , int> >vp ;
for(auto &i : r)
vp.emplace_back(i , 0) ;
for(auto &i : b)
vp.emplace_back(i , 1) ;
sort(vp.begin() , vp.end()) ;
int prv = vp[0].second , idx = 0 ;
for(auto &p : vp)
{
++idx ;
arr[idx] = p.first ;
if(p.second != prv)
solve(prv) , v[!prv].clear() ;
v[p.second].push_back(idx) ;
prv = p.second ;
}
solve(prv) ;
return dp[n+m] ;
}
# | 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... |