1461 - 交換と転倒数
時間制限 3 秒 / メモリ制限 256 MB / 得点 12 / Writer syoribu / x 1 / 統計 /
-
タグ:
- PCK本選_12問目
- PCK2020本選
問題文
長さ N の数列 a1,a2,⋯,aNの転倒数とは、1≤i<j≤N と ai>ajを満たす要素の組(ai,aj)の総数です。 数列の転倒数は、初等的整列アルゴリズムであるバブルソートの交換回数としても知られています。 この問題では、数列中の2つの要素の値を交換し、交換後の数列の転倒数を出力するという操作を行います。
課題
数列と、複数回の操作に関する情報が与えられたとき、各操作の結果を出力するプログラムを作成せよ。 ただし、2回目以降の各操作は、その直前の操作の結果得られた数列に対して行うものとする。
入力
入力は以下の形式で与えられる。
N M u1 v1 c1 u2 v2 c2 ⋮ uM vM cM
1行目に数列の要素数N (2≤N≤500,000)が与えられる。2行目に数列のi番目の要素の値ai (0≤ai≤1,000,000,000)が与えられる。ただし、すべての要素の値は異なる(i≠jならばai≠aj)。
続く行に操作の数M (1≤M≤30,000)が与えられる。続くM行に、i番目の操作の情報を表す整数の組biとei (1≤bi<ei≤N)が与えられる。
biとeiは、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