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 翻译