题目等价于:有一个长度为 n 的排列 a,每次可以交换两个位置上的魔力等级,但要求这两个等级的差的绝对值不超过 k。若差为 1 则消耗 1 点魔力;若差大于 1 且不超过 k 则不消耗魔力。目标是将序列变成 1,2,…,n,求最小魔力消耗。
根据 k 的不同取值分情况讨论:
小蓝经营一家魔法杂货店,货架上从左到右摆着一排共 n 件商品。每件商品都有一个唯一的「魔力等级」,恰好为 1 到 n 的一个排列,第 i 个位置上的商品魔力等级记为 ai。
为了让货架恢复美观,小蓝需要把这些商品按照魔力等级从小到大排列(即最终状态为 1,2,…,n)。他唯一能使用的是一种「空间调换术」:每次可以选择货架上的任意两件商品,如果它们的魔力等级之差的绝对值不超过 k,就可以瞬间交换这两件商品的位置。调换的代价根据魔力等级之差决定:
魔力等级相差超过 k 的商品无法直接交换。请你帮小蓝计算:最少需要消耗多少点魔力,才能将整排商品恢复为严格递增顺序。
数据范围:n 不超过 2×105,k 满足 1≤k≤n−1,输入保证 a1,a2,…,an 是 1 到 n 的一个排列。
By signing up a CodeFun2000 universal account, you can submit code and join discussions in all online judging services provided by us.