有n个水桶,第i个水桶里面水的体积为Ai,你可以用1秒时间向一个桶里添加1体积的水。
有q次询问,每次询问一个整数pi,你需要求出使其中pi个桶中水的体积相同所花费的最少时间。 对于一次询问如果有多种方案,则采用使最终pi个桶中水的体积最小的方案。
4,3,[1,2,3,4],[2,2,4]
[1,0,5]
第一次:花费一秒变为 2 2 3 4
第二次:已经存在两个水的体积一样的桶
第三次:花费五秒从2 2 3 4变为4 4 4 4
2≤n≤1041≤q≤5001≤Ai≤1042≤pi≤n
class Solution: def solve(self , n , q , a , p ): # write code here ans = [] a.sort() # 获取最小操作区间 def getminop(x): l,r = 0,x - 1 v = 0 for i in range(x): v += a[i] v = x * a[x - 1] - v cost = v for i in range(x,n): cost = cost + (x * a[i] - a[i]) + a[i - x] - x * (a[i - 1]) if cost < v: v = cost l,r = i - x + 1,i return l,r,v for i in range(q): if p[i] == 1: ans.append(0) continue l,r,v = getminop(p[i]) ans.append(v) for i in range(l,r + 1): a[i] = a[r] return ans