CF1353D Constructing the Array

题目描述

给定一个长度为 $n$ 的数组 $a$,初始时数组中所有元素均为 $0$。你需要对该数组进行 $n$ 次操作,每次操作如下: 1. 选择当前所有仅包含 $0$ 的最长连续子段(区间),如果有多个这样的区间,则选择最左边的一个; 2. 设该区间为 $[l, r]$。如果 $r-l+1$ 为奇数(即不能被 $2$ 整除),则将 $a[\frac{l+r}{2}] := i$($i$ 为当前操作的编号);否则($r-l+1$ 为偶数),将 $a[\frac{l+r-1}{2}] := i$。 例如,考虑长度为 $5$ 的数组 $a$(初始为 $a=[0, 0, 0, 0, 0]$),操作过程如下: 1. 首先选择区间 $[1, 5]$,将 $a[3] := 1$,此时 $a = [0, 0, 1, 0, 0]$; 2. 然后选择区间 $[1, 2]$,将 $a[1] := 2$,此时 $a = [2, 0, 1, 0, 0]$; 3. 然后选择区间 $[4, 5]$,将 $a[4] := 3$,此时 $a = [2, 0, 1, 3, 0]$; 4. 然后选择区间 $[2, 2]$,将 $a[2] := 4$,此时 $a = [2, 4, 1, 3, 0]$; 5. 最后选择区间 $[5, 5]$,将 $a[5] := 5$,此时 $a = [2, 4, 1, 3, 5]$。 你的任务是,在执行完所有 $n$ 次操作后,输出数组 $a$ 的最终状态。注意,答案一定存在且唯一。 你需要回答 $t$ 组独立的测试用例。

输入格式

输入的第一行包含一个整数 $t$($1 \le t \le 10^4$),表示测试用例的数量。接下来 $t$ 行,每行一个整数 $n$($1 \le n \le 2 \times 10^5$),表示数组 $a$ 的长度。 保证所有测试用例中 $n$ 的总和不超过 $2 \times 10^5$($\sum n \le 2 \times 10^5$)。

输出格式

对于每个测试用例,输出一行,表示执行完所有 $n$ 次操作后得到的长度为 $n$ 的数组 $a$。答案唯一。

说明/提示

由 ChatGPT 4.1 翻译