题目描述
整数 N と M 個の整数の組 (a1, b1), (a2, b2), …, (aM, bM) があります。各 ai, bi は 1 ≤ ai < bi ≤ N を満たします。
はじめ、あなたは (1,2,…,N) の順列を N! 種類すべて持っています。
あなたは M 回の操作を行います。i 回目の操作は次の通りです。
- 持っている N! 個の順列すべてに対して次の処理を行う。
- 順列の ai 番目の要素と bi 番目の要素の値を比較して、前者の方が大きければ両者を swap する。
1 ≤ i ≤ M について、i 回目の操作を終了した時点で持っている順列のうち昇順にソートされている列の個数を Si とします。
S1, S2, …, SM を出力してください。
ただし、入力では (ai, bi) の代わりに整数の組 (xi, yi) が与えられます。
(ai, bi) の値は xi, yi, Si−1 を用いて次の手順で得ることができます。(便宜上 S0 = 1 とします。)
- ci = ((xi + Si−1) mod N) + 1 とする。
- $ d_i\ =\ ((y_i\ +\ S_{i-1}\ \times\ 2)\ \bmod\ N)\ +\ 1 $ とする。(ここで ci = di が保証される。)
- ai = min(ci, di) とする。
- bi = max(ci, di) とする。
输入格式
入力は以下の形式で標準入力から与えられる。
N M x1 y1 x2 y2 ⋮ xM yM
输出格式
M 行出力せよ。i 行目には Si を出力せよ。
题目大意
给定一个 n,初始有 n! 个 n 的排列 S1,S2,…,Sn!。给出 m 次询问,每次两个数 a 和 b(1≤a<b≤n),对于任意一个序列 S,如果 Sa>Sb,那么交换 Sa 和 Sb,操作结束后输出此时已经排好序的序列个数。
本题强制在线,每次输入两个数 x, y,上一次的答案为 last,初始为 1。
数据以如下方式生成。
- ci = ((xi +last) mod n) + 1。
- $ d_i\ =\ ((y_i\ + last\ \times\ 2)\ \bmod\ n)\ +\ 1$。
- ai = min(ci, di)。
- bi = max(ci, di)。
2 1
1 1
2
3 4
0 1
2 1
1 1
0 1
2
4
4
6
5 5
4 4
0 4
1 1
2 4
1 2
2
4
4
8
16
提示
制約
- 2 ≤ N ≤ 15
- 1 ≤ M ≤ 5 × 105
- 1 ≤ ai < bi ≤ N
- 0 ≤ xi, yi ≤ N − 1
Sample Explanation 1
はじめ、持っている順列は (1, 2) と (2, 1) です。 (a1, b1) = (1, 2) です。1 回目の操作を終了した時点で持っている順列は (1, 2) が 2 個になります。よって 2 を出力します。
Sample Explanation 2
(ai, bi) は順に (1, 2), (2, 3), (1, 3), (1, 2) です。
Sample Explanation 3
(ai, bi) は順に (1, 2), (3, 4), (1, 5), (2, 3), (4, 5) です。