#SY01. 丝绸之路货物整理

丝绸之路货物整理

题目背景

在古老的丝绸之路上,商队穿越沙漠与绿洲,将珍贵的货物从东方运往西方。你是一位经验丰富的商队管理者,负责在驿站中整理货物的装载顺序。

每件货物都有一个编号(从 11nn),代表其重要程度。为了便于在终点城市卸货,货物需要按照编号从小到大的顺序排列在驼队中。

题目描述

驼队中有 nn 件货物,当前的排列顺序为 aa

根据丝绸之路驿站的古老规矩,你可以进行如下操作任意次(可以为零次):

  • 选择驼队中第 ii 个位置(1in21 \le i \le \frac{n}{2}),将该位置的货物与第 2i2i 个位置的货物互换。

这个规矩源于驼队的特殊编队方式:驼队按照完全二叉树的结构排列,每个位置 ii 的"左侧关联位置"是 2i2i,只有这两个位置的货物可以互换。

例如,当 a=[1,4,2,3,5]a=[1,4,2,3,5] 时,你可以交换第 22 个位置和第 44 个位置的货物,使其变为 [1,3,2,4,5][1,3,2,4,5],但你不能交换第 22 个位置和第 33 个位置的货物。

请你判断,是否可以通过若干次上述操作将货物序列 aa 排成升序(即按照编号从小到大排列)。

注: 一个长度为 nn 的排列是一个由 11nnnn 个互不相同的整数组成的数组。例如,[2,3,1,5,4][2,3,1,5,4] 是一个排列,但 [1,2,2][1,2,2] 不是排列(22 在数组中出现了两次),[1,3,4][1,3,4] 也不是排列(n=3n=3 但数组中有 44)。

输入格式

每组测试数据包含多个商队的货物整理任务。第一行包含任务组数 tt1t1041 \le t \le 10^4)。接下来是各组任务的描述。

每个任务的第一行包含一个整数 nn1n21051 \le n \le 2 \cdot 10^5),表示驼队中货物的数量。

第二行包含 nn 个不同的整数 a1,a2,,ana_1, a_2, \ldots, a_n1ain1 \le a_i \le n),表示当前货物的排列顺序。

保证所有任务中 nn 的总和不超过 21052 \cdot 10^5

输出格式

对于每个任务,如果可以通过驿站规矩将货物排成升序,则输出一行 “YES”(表示可以完成整理)。否则输出一行 “NO”(表示无法完成整理)。

输出答案时不区分大小写。例如,字符串 “yEs”、”yes” 和 “Yes” 都被视为肯定回答。

输入输出样例 #1

输入 #1

2
5
1 4 3 2 5
5
1 4 2 3 5

输出 #1

YES
NO

说明/提示

在第一个任务中,驼队的货物排列为 a=[1,4,3,2,5]a = [1,4,3,2,5]。你可以在驿站中交换第 22 个位置和第 44 个位置的货物(即交换编号为 4422 的货物),使货物排列变为 [1,2,3,4,5][1,2,3,4,5],达到升序。因此答案为 “YES”。

在第二个任务中,驼队的货物排列为 a=[1,4,2,3,5]a = [1,4,2,3,5]。无论如何按照驿站规矩进行交换,都无法将货物排成升序。因此答案为 “NO”。


故事背景补充: 这个驿站规矩源于古代丝绸之路上的智慧。商队按照完全二叉树的方式编队,每头骆驼都有其固定的”关联伙伴”。这种编队方式既能保证队伍的稳定性,又能在必要时快速调整货物顺序,是千年来商队管理者总结出的宝贵经验。