CF1784C.Monsters (hard version)
提高+/省选-
通过率:0%
时间限制:4.00s
内存限制:512MB
AC君温馨提醒
该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
This is the hard version of the problem. In this version, you need to find the answer for every prefix of the monster array.
In a computer game, you are fighting against n monsters. Monster number i has ai health points, all ai are integers. A monster is alive while it has at least 1 health point.
You can cast spells of two types:
- Deal 1 damage to any single alive monster of your choice.
- Deal 1 damage to all alive monsters. If at least one monster dies (ends up with 0 health points) as a result of this action, then repeat it (and keep repeating while at least one monster dies every time).
Dealing 1 damage to a monster reduces its health by 1.
Spells of type 1 can be cast any number of times, while a spell of type 2 can be cast at most once during the game.
For every k=1,2,…,n, answer the following question. Suppose that only the first k monsters, with numbers 1,2,…,k, are present in the game. What is the smallest number of times you need to cast spells of type 1 to kill all k monsters?
这是该问题的困难版本。在本版本中,你需要对怪物数组的每个前缀求解答案。
在一款电脑游戏中,你正在与 n 个怪物战斗。第 i 个怪物有 ai 点生命值,所有 ai 均为整数。只要一个怪物的生命值至少为 1,它就仍处于存活状态。
你可以施放两种类型的法术:
- 对任意一个你选择的存活怪物造成 1 点伤害;
- 对所有存活怪物各造成 1 点伤害。若此次施法导致至少一个怪物死亡(即其生命值恰好变为 0),则立即重复该法术(并持续重复,直到某次施法不再导致任何怪物死亡为止)。
对一个怪物造成 1 点伤害会使其生命值减少 1。
类型 1 的法术可以施放任意多次,而类型 2 的法术在整个游戏中最多只能施放一次。
对每个 k=1,2,…,n,回答以下问题:假设游戏中仅有编号为 1,2,…,k 的前 k 个怪物存在,那么要消灭全部 k 个怪物,你最少需要施放多少次类型 1 的法术?
输入格式
Each test contains multiple test cases. The first line contains the number of test cases t (1≤t≤104). The description of the test cases follows.
Each test case consists of two lines. The first line contains a single integer n (1≤n≤2⋅105) — the number of monsters.
The second line contains n integers a1,a2,…,an (1≤ai≤n) — monsters' health points.
It is guaranteed that the sum of n over all test cases does not exceed 2⋅105.
每个测试包含多个测试用例。第一行包含测试用例的数量 t(1≤t≤104)。随后是各测试用例的描述。
每个测试用例由两行组成。第一行包含一个整数 n(1≤n≤2⋅105)——怪物的数量。
第二行包含 n 个整数 a1,a2,…,an(1≤ai≤n)——怪物的生命值。
保证所有测试用例的 n 之和不超过 2⋅105。
输出格式
For each test case, print n integers. The k-th of these integers must be equal to the smallest number of times you need to cast spells of type 1 to kill all k monsters, if only monsters with numbers 1,2,…,k are present in the game.
对于每个测试用例,输出 n 个整数。其中第 k 个整数必须等于:当游戏中仅存在编号为 1,2,…,k 的怪物时,杀死全部 k 只怪物所需施放类型 1 法术的最少次数。
输入输出样例
输入#1
2 3 3 1 2 6 4 1 5 4 1 1
输出#1
2 1 0 3 2 4 4 4 4
说明/提示
In the first test case, for k=n, the initial health points of the monsters are [3,1,2]. It is enough to cast a spell of type 2:
- Monsters' health points change to [2,0,1]. Since monster number 2 dies, the spell is repeated.
- Monsters' health points change to [1,0,0]. Since monster number 3 dies, the spell is repeated.
- Monsters' health points change to [0,0,0]. Since monster number 1 dies, the spell is repeated.
- Monsters' health points change to [0,0,0].
Since it is possible to use no spells of type 1 at all, the answer is 0.
In the second test case, for k=n, the initial health points of the monsters are [4,1,5,4,1,1]. Here is one of the optimal action sequences:
- Using a spell of type 1, deal 1 damage to monster number 1. Monsters' health points change to [3,1,5,4,1,1].
- Using a spell of type 1, deal 1 damage to monster number 4. Monsters' health points change to [3,1,5,3,1,1].
- Using a spell of type 1, deal 1 damage to monster number 4 again. Monsters' health points change to [3,1,5,2,1,1].
- Use a spell of type 2:
- Monsters' health points change to [2,0,4,1,0,0]. Since monsters number 2, 5, and 6 die, the spell is repeated.
- Monsters' health points change to [1,0,3,0,0,0]. Since monster number 4 dies, the spell is repeated.
- Monsters' health points change to [0,0,2,0,0,0]. Since monster number 1 dies, the spell is repeated.
- Monsters' health points change to [0,0,1,0,0,0].
- Using a spell of type 1, deal 1 damage to monster number 3. Monsters' health points change to [0,0,0,0,0,0].
Spells of type 1 are cast 4 times in total. It can be shown that this is the smallest possible number.
在第一个测试用例中,当 k=n 时,怪物的初始生命值为 [3,1,2]。仅需施放一次类型 2 的法术即可:
- 怪物的生命值变为 [2,0,1]。由于编号为 2 的怪物死亡,该法术被重复施放。
- 怪物的生命值变为 [1,0,0]。由于编号为 3 的怪物死亡,该法术被重复施放。
- 怪物的生命值变为 [0,0,0]。由于编号为 1 的怪物死亡,该法术被重复施放。
- 怪物的生命值变为 [0,0,0]。
由于完全可以不使用任何类型 1 的法术,因此答案为 0。
在第二个测试用例中,当 k=n 时,怪物的初始生命值为 [4,1,5,4,1,1]。以下是一种最优操作序列:
- 施放一次类型 1 的法术,对编号为 1 的怪物造成 1 点伤害。怪物的生命值变为 [3,1,5,4,1,1]。
- 施放一次类型 1 的法术,对编号为 4 的怪物造成 1 点伤害。怪物的生命值变为 [3,1,5,3,1,1]。
- 再次施放一次类型 1 的法术,对编号为 4 的怪物造成 1 点伤害。怪物的生命值变为 [3,1,5,2,1,1]。
- 施放一次类型 2 的法术:
- 怪物的生命值变为 [2,0,4,1,0,0]。由于编号为 2、5 和 6 的怪物死亡,该法术被重复施放。
- 怪物的生命值变为 [1,0,3,0,0,0]。由于编号为 4 的怪物死亡,该法术被重复施放。
- 怪物的生命值变为 [0,0,2,0,0,0]。由于编号为 1 的怪物死亡,该法术被重复施放。
- 怪物的生命值变为 [0,0,1,0,0,0]。
- 施放一次类型 1 的法术,对编号为 3 的怪物造成 1 点伤害。怪物的生命值变为 [0,0,0,0,0,0]。
类型 1 的法术总共被施放了 4 次。可以证明这是可能的最小次数。
输入解题思路,AI测评打分。不知道怎么写?