CF1353D.Constructing the Array
普及/提高-
通过率:0%
时间限制:1.00s
内存限制:256MB
AC君温馨提醒
该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
You are given an array a of length n consisting of zeros. You perform n actions with this array: during the i-th action, the following sequence of operations appears:
- Choose the maximum by length subarray (continuous subsegment) consisting only of zeros, among all such segments choose the leftmost one;
- Let this segment be [l;r]. If r−l+1 is odd (not divisible by 2) then assign (set) a[2l+r]:=i (where i is the number of the current action), otherwise (if r−l+1 is even) assign (set) a[2l+r−1]:=i.
Consider the array a of length 5 (initially a=[0,0,0,0,0]). Then it changes as follows:
- Firstly, we choose the segment [1;5] and assign a[3]:=1, so a becomes [0,0,1,0,0];
- then we choose the segment [1;2] and assign a[1]:=2, so a becomes [2,0,1,0,0];
- then we choose the segment [4;5] and assign a[4]:=3, so a becomes [2,0,1,3,0];
- then we choose the segment [2;2] and assign a[2]:=4, so a becomes [2,4,1,3,0];
- and at last we choose the segment [5;5] and assign a[5]:=5, so a becomes [2,4,1,3,5].
Your task is to find the array a of length n after performing all n actions. Note that the answer exists and unique.
You have to answer t independent test cases.
给你一个长度为 n 的全零数组 a。你将对该数组执行 n 次操作:在第 i 次操作中,依次执行以下步骤:
- 在所有仅由零构成的子数组(连续子段)中,选择长度最大的一个;若存在多个相同最大长度的子数组,则选择最左侧的那个;
- 设该子数组为 [l;r]。若其长度 r−l+1 为奇数(即不能被 2 整除),则令 a[2l+r]:=i(其中 i 为当前操作的序号);否则(即长度为偶数),令 a[2l+r−1]:=i。
考虑长度为 5 的数组 a(初始时 a=[0,0,0,0,0])。它将按如下方式变化:
- 首先,我们选择子段 [1;5],并令 a[3]:=1,于是 a 变为 [0,0,1,0,0];
- 接着,我们选择子段 [1;2],并令 a[1]:=2,于是 a 变为 [2,0,1,0,0];
- 然后,我们选择子段 [4;5],并令 a[4]:=3,于是 a 变为 [2,0,1,3,0];
- 接着,我们选择子段 [2;2],并令 a[2]:=4,于是 a 变为 [2,4,1,3,0];
- 最后,我们选择子段 [5;5],并令 a[5]:=5,于是 a 变为 [2,4,1,3,5]。
你的任务是:对给定的 n,求出执行全部 n 次操作后所得的数组 a。注意:答案一定存在且唯一。
你需要回答 t 个相互独立的测试用例。
输入格式
The first line of the input contains one integer t (1≤t≤104) — the number of test cases. Then t test cases follow.
The only line of the test case contains one integer n (1≤n≤2⋅105) — the length of a.
It is guaranteed that the sum of n over all test cases does not exceed 2⋅105 (∑n≤2⋅105).
输入的第一行包含一个整数 t(1≤t≤104),表示测试用例的数量。随后是 t 个测试用例。
每个测试用例仅一行,包含一个整数 n(1≤n≤2⋅105),表示数组 a 的长度。
保证所有测试用例的 n 之和不超过 2⋅105(即 ∑n≤2⋅105)。
输出格式
For each test case, print the answer — the array a of length n after performing n actions described in the problem statement. Note that the answer exists and unique.
对于每个测试用例,输出答案——即按照题目描述执行 n 次操作后得到的长度为 n 的数组 a。注意:答案存在且唯一。
输入输出样例
输入#1
6 1 2 3 4 5 6
输出#1
1 1 2 2 1 3 3 1 2 4 2 4 1 3 5 3 4 1 5 2 6
输入解题思路,AI测评打分。不知道怎么写?