由于数组是一个排列,所以每个序号都只出现一次。
可以先预处理一个位置数组 pos,其中 pos[x] 表示数字 x 在排列中的下标。
之后按照巡检顺序从 1 枚举到 n−1:
一条笔直的道路旁等距排列着 n 座信号塔,从左至右的位置下标依次为 1,2,…,n。每座塔上标有一个互不相同的编号,所有编号恰好构成 1∼n 的一个排列。
现在工程师需要按照编号从小到大的次序对信号塔进行检修:他从编号为 1 的塔所在位置出发,此后每一步都移动到编号比当前塔大 1 的下一座塔,直至访问完编号为 n 的塔。
在一次移动中,若目标塔的位置下标小于出发塔的位置下标,则称这次移动为一次 后退;若目标塔的位置下标大于出发塔的位置下标,则称这次移动为一次 前进。
请你统计完整的检修过程中,后退的总次数和前进的总次数。
约束:信号塔的数量 n 满足 1≤n≤380000,输入的编号序列是 1∼n 的一个排列。
第一行包含一个整数 n,表示信号塔的数量。 第二行包含 n 个整数 a1,a2,…,an,依次表示从左到右第 1,2,…,n 个位置上的信号塔编号。
输出一行两个非负整数,依次表示后退的总次数和前进的总次数。
输入
1
1
输出
0 0
说明
只有一座塔,编号为 1,起点即终点,无需移动,后退总次数和前进总次数均为 0。
输入
5
3 1 4 2 5
输出
1 3
说明
位置信息:编号 1 在位置 2,2 在位置 4,3 在位置 1,4 在位置 3,5 在位置 5。移动过程:
1 移动到 2:pos[2]=4>pos[1]=2,属于前进;2 移动到 3:pos[3]=1<pos[2]=4,属于后退;3 移动到 4:pos[4]=3>pos[3]=1,属于前进;4 移动到 5:pos[5]=5>pos[4]=3,属于前进。
因此后退总次数为 1,前进总次数为 3。输入
4
4 3 2 1
输出
3 0
说明
编号和位置:1 在位置 4,2 在位置 3,3 在位置 2,4 在位置 1。所有移动均向编号更大的塔,但每个目标塔的位置下标都比出发塔小,因此每一步都是后退,共 3 次后退,前进 0 次。
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册