1461 - 交換と転倒数

時間制限 3 秒 / メモリ制限 256 MB / 得点 12 / Writer syoribu / x 1 / 統計 /


TLE
3sec
MLE
256MB
得点
12

問題文

長さ N の数列 a1,a2,,aNの転倒数とは、1i<jNai>ajを満たす要素の組(ai,aj)の総数です。 数列の転倒数は、初等的整列アルゴリズムであるバブルソートの交換回数としても知られています。 この問題では、数列中の2つの要素の値を交換し、交換後の数列の転倒数を出力するという操作を行います。

課題

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

入力

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

N M
u1 v1 c1
u2 v2 c2

uM vM cM

1行目に数列の要素数N (2N500,000)が与えられる。2行目に数列のi番目の要素の値ai (0ai1,000,000,000)が与えられる。ただし、すべての要素の値は異なる(ijならばaiaj)。 続く行に操作の数M (1M30,000)が与えられる。続くM行に、i番目の操作の情報を表す整数の組biei (1bi<eiN)が与えられる。 bieiは、i番目の操作で交換されるのが数列のbi番目とei番目の要素の値であることを示す。
入力に対して、実行時間が8秒を超えてはならない。

出力

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

入出力例

入力例1

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

出力例1

9
8
3