#P906. 移位逆序对

移位逆序对

题目描述

所谓对一个序列的循环移位操作是指将序列的第一个数取出,移动到序列的最后一个位置。

给定 NN 个数字组成的一个序列 A0,A1,A2,…,AN−1A_0,A_1,A_2,\dots, A_{N-1}。请先输出序列的逆序对数量,然后对序列进行一次循环移位操作。然后将上述流程重复执行 NN 遍。

所谓一组逆序对,是指序列中出现了两个元素,其大小与其顺序相悖。换个说法就是一组逆序对需要有两个下标 ii 与 jj,满足 i<ji<j 且 Ai>AjA_i>A_j。

输入格式

  • 第一行:一个整数表示 NN
  • 第二行:NN 个整数表示 A0,A1,…,AN−1A_0,A_1,\dots,A_{N-1}

输出格式

  • 共 NN 行:每行一个逆序对数量
3
0 1 2
0
2
2

数据范围

  • 30%30\% 的数据,1≤N≤1001\leq N\leq 100
  • 60%60\% 的数据,1≤N≤20001\leq N\leq 2000
  • 100%100\% 的数据,1≤N≤300,0001\leq N\leq 300,000
  • 0≤Ai<N0\leq A_i<N

来源

改编自 ABC190F Shift and Inversions