AT_xmascontest2015_f FILO Sort
题目描述
给定一个长度为 $N$ 的排列 $a_i$ 和 $Q$ 个查询。第 $i$ 个查询给定 $x_i$,表示将数列中第 $x_i$ 个和第 $x_i+1$ 个元素的值交换。
每次通过查询修改数列后,判断当前数列是否为**好数列**。好数列的定义如下:
考虑 $3$ 个[栈](https://ja.wikipedia.org/wiki/%E3%82%B9%E3%82%BF%E3%83%83%E3%82%AF),分别称为 stack1、stack2、stack3。首先,将 $a_1,\ a_2,\ ...,\ a_N$ 按顺序依次 push 到 stack1。之后,可以任意次进行以下两种操作:
- 从 stack1 pop 一个整数 $x$,并将 $x$ push 到 stack2。
- 从 stack2 pop 一个整数 $x$,并将 $x$ push 到 stack3。
如果可以通过上述操作,使得 stack3 从栈顶到栈底依次为 $1,\ 2,\ ...,\ N$,则称 $a_i$ 为好数列。
其中,push 表示向栈的末尾添加元素,pop 表示从栈的末尾取出元素。
输入格式
输入从标准输入读入,格式如下:
> $N$
> $a_1\ a_2\ a_3\ ...\ a_N$
> $Q$
> $x_1$
> $x_2$
> $\vdots$
> $x_Q$
- 第 $1$ 行为排列的长度 $N$,满足 $2 \leq N \leq 100\,000$。
- 第 $2$ 行为空格分隔的数列 $a_i$。
- 第 $3$ 行为查询个数 $Q$,满足 $1 \leq Q \leq 100\,000$。
- 接下来的 $Q$ 行,每行一个整数 $x_i$,满足 $1 \leq x_i \leq N-1$。
输出格式
输出 $Q$ 行,每行一个结果。
对于第 $i$ 个查询后,若当前 $a_i$ 为好数列,则输出 `Yes`,否则输出 `No`。每个输出后需换行。
说明/提示
由 ChatGPT 4.1 翻译