0
点赞
收藏
分享

微信扫一扫

ARC 123 D - Inc, Dec - Decomposition (思维构造+DP)


链接

题意:

给出A序列,让你构造出B,C序列要求满足:

  • B序列递增
  • C序列递减
    使得最小化

分析:

我们要让B递增,C递减,那么我们肯定要 满足或者
所以一旦我们选择好也就确定了整个序列。
我们看B,C是相反的单调性,不好分析,我们C变成-C这样,C序列也是递增的了,并且对于答案不变
所以如果

  • 那么我们将差值加到B上让
  • 那么我们将差值加到C上让

让正的都加上递增序列,让较少的都加到递减序列。
然后我们将其放去同一个集合,我们可以让其同时移动k,可以左移(-),同样也可以右移(+),使其绝对值和最小,那肯定找到中位数让其左移中位数呀。

ll n, m;
ll a[N];
std::vector<ll> v;
void solve()
{
cin >> n;
for (int i = 1; i <= n; i++){
scanf("%lld",&a[i]);
}
ll A=a[1],B=0;
v.push_back(A);
v.push_back(B);
for(int i=1;i<n;i++){
ll x = a[i+1]-a[i];
if(x>=0) A+=x;
else B-=x;
v.push_back(A);
v.push_back(B);
}
sort(v.begin() , v.end());
ll ans=0;
for(int i=0;i<v.size();i++){
ans += abs(v[i]-v[n]);
}
cout<<ans<<endl;
}


举报

相关推荐

0 条评论