CF2133F Flint and Steel
题目描述
$n$ 只苦力怕站在你面前,第 $i$ 只苦力怕的爆炸力是 $e_i$,当它爆炸的时候会同时杀死所有位于区间 $(i-e_i,i+e_i)$ 内的苦力怕。特殊的,当 $e_i=0$ 的时候该苦力怕无法被引爆。
现在你要杀死所有的苦力怕,为此你可以进行若干次操作,每次操作选中一只活着的苦力怕并引爆它,求至少需要进行多少次操作才能完成目标。如果可以完成目标,你还需要给出一组合法的引爆顺序。
输入格式
多测,第一行输入 $t$($1\le t\le10^4$)表示测试数据数量。
对于每组测试数据:
第一行输入一个正整数 $n$($1\le n\le5\times10^5$)。
第二行输入 $n$ 个非负整数 $e_1,e_2,\dots,e_n$($0\le e_i\le n$)。
保证单测试点内所有 $n$ 的和不超过 $5\times10^5$。
输出格式
对于每组测试数据,若无解输出 `-1`,否则先输出一行一个正整数表示最少操作次数 $s$;接下来一行输出 $s$ 个正整数,按顺序依次表示一个能将所有苦力怕杀死的引爆顺序。如果有多组解,输出任意一种即可。
说明/提示
第一组测试数据中,可以按如下顺序引爆:
- $\underline{0, \mathbf{2}, 2}, 3, 0, 1$
- $\times, \underline{\times, \times, \mathbf{3}, 0, 1}$
- $\times, \times, \times, \times, \times, \times$
$\times$ 表示被杀死的苦力怕,加粗的位置表示当前引爆的位置,下划线表示引爆范围。请注意如果先引爆第 $4$ 只苦力怕,所有能爆炸的苦力怕都会被杀死,第一只苦力怕就无法被击败。
第二组测试数据中没有一只苦力怕能够杀死第一只。
第五组测试数据中,可以按如下顺序引爆:
- $\underline{\mathbf{2}, 0}, 2, 4, 2, 2, 4, 1, 1$
- $\times, \times, 2, \underline{4, 2, 2, \mathbf{4}, 1, 1}$
- $\times, \underline{\times, \mathbf{2}, \times}, \times, \times, \times, \times, \times$
- $\times, \times, \times, \times, \times, \times, \times, \times, \times$