题意
给定一个排列$p$,和一数组$a$,任意取一数$k$($1\leq k<n$),将排列分为两个序列$p_1$,$p_2$,…,$p_k$和$p_{k+1}$,$p_{k+2}$,…,$p_{n}$,然后将两个序列中的某些数移到另一个序列,使得第一个序列中的数小于第二个序列中的所有数(任意一个序列为空也可),移动$p[i]$的花费为$a[i]$,问最小花费
分析
设$j$为操作完后左半序列的元素个数,易知左半部分的数为$1$-$j$,右半部分的数为$j+1$-$n$。
对于一个数$p[i]$,如果将其分在左半边,则
- 若$j>=p[i]$,则花费不变
- 若$j<p[i]$,则花费需加上$a[i]$
因此先假设所有的元素都在右半部分,枚举$1$-$n-1$,枚举$k$,每次更新$p[k]$的贡献,由上述可知$p[k]$对$[1,p[i]-1]$贡献为$a[i]$,而因为一开始所有元素都在右半部分,所以对$[p[i],n]$的贡献为$-a[i]$,每次用线段树全局最小值更新答案
1 |
|