CF2052A Adrenaline Rush
题目描述
爱丽丝的朋友是肾上腺素飙升赛车比赛的狂热爱好者,总是努力参加每一场比赛。然而,这一次,爱丽丝是观看比赛的人。为了确保她的朋友不会错过任何重要的细节,爱丽丝决定记下赛道上发生的每一件事。
比赛开始前,爱丽丝注意到的第一件事是汽车的编号。所有的汽车都按照特定的顺序在起跑线前排成一列。最靠近这条线的车编号为 $1$,第二辆车编号为 $2$,以此类推,直到最后一辆车编号为 $n$。多方便啊!爱丽丝想。
比赛开始倒计时:“三!二!一!出发!”。爱丽丝注意到汽车是按原来的顺序出发的。然而,随着比赛的进行,他们的顺序发生了变化。每当一辆车超越另一辆车时,她都会记录下来,本质上就是在赛道上与它交换位置。
在比赛中,爱丽丝注意到一件奇怪的事情:没有一辆车超过另一辆车一次以上。换句话说,对于任意两辆车 $x$ 和 $y$,在比赛中它们之间最多有两次超车:“$x$ 超过 $y$”和/或“$y$ 超过 $x$”。
在比赛结束时,爱丽丝仔细地写下汽车 $c_1,c_2,…,c_n$ 的最终顺序,其中 $c_1$ 代表比赛的获胜者。
然而,爱丽丝的朋友只对最终的排名感兴趣,并丢弃了爱丽丝的所有笔记,除了最终的顺序。爱丽丝很好奇,她想知道:她在比赛中观察到的最长超车次数是多少?你的任务是帮助爱丽丝回答这个问题。
输入格式
输入的第一行包含一个整数 $n(1≤n≤1000)$,用于表示比赛中的汽车数量。
第二行包含一个排列 $c_1,c_2,…,c_n(1≤c_i≤n,c_i≠c_j)$ 用于表示汽车的最终顺序。
输出格式
输出的第一行应该包含一个整数 $m$,用于表示在比赛中可能出现的最大超车次数。
接下来的 $m$ 行中的每一行都包含两个整数 $x$ 和 $y(1≤x,y≤n,x≠y)$,表示超车事件,其中汽车 $x$ 超过了汽车 $y$。这意味着汽车 $x$ 正好在汽车 $y$ 后面,并超过了它。超车必须按照比赛中发生的顺序排列。
在所有的 $m$ 次超车之后,汽车必须按照 $c_1,c_2,…,c_n$的顺序到达终点线。注意,任何汽车 $x$ 都不应超过另一辆汽车 $y$ 一次以上。
如果存在多个可能的最长超车序列,则输出其中任何一个。$\\$
——By hyacinth_lpy.