時間制限 : sec, メモリ制限 : KB
English / Japanese  

交換と転倒数

長さ$N$の数列$a_1, a_2, ... a_N$の転倒数とは、$1 \leq i < j \leq N$ と$a_i > a_j$を満たす要素の組$(a_i, a_j)$の総数です。

数列の転倒数は、初等的整列アルゴリズムであるバブルソートの交換回数としても知られています。

この問題では、数列中の2つの要素の値を交換し、交換後の数列の転倒数を出力するという操作を行います。

数列と、複数回の操作に関する情報が与えられたとき、各操作の結果を出力するプログラムを作成せよ。ただし、2回目以降の各操作は、その直前の操作の結果得られた数列に対して行うものとする。

入力

入力は以下の形式で与えられる。

$N$
$a_1$ $a_2$ ... $a_N$
$M$
$b_1$ $e_1$
$b_2$ $e_2$
:
$b_M$ $e_M$

1行目に数列の要素数$N$ ($2 \leq N \leq 500,000$)が与えられる。2行目に数列の$i$番目の要素の値$a_i$ ($0 \leq a_i \leq 1,000,000,000$) が与えられる。ただし、すべての要素の値は異なる($i \ne j$ならば$a_i \ne a_j$)。続く行に操作の数$M$ ($1 \leq M \leq 30,000$)が与えられる。続く$M$行に、$i$番目の操作の情報を表す整数の組$b_i$と$e_i$ ($1 \leq b_i < e_i \leq N$)が与えられる。$b_i$と$e_i$は、$i$番目の操作で交換されるのが数列の$b_i$番目と$e_i$番目の要素の値であることを示す。

出力

出力は$M$行である。各操作に対して、操作の結果を1行に出力する。

入出力例

入力例

6
4 6 5 3 1 2
3
2 4
3 6
1 5

出力例

9
8
3

Note

Algorithm