#P1255. 步进逆序对

步进逆序对

题目描述

对任意一个整数 xx,循环步进操作是指将 xx 变成 (x+1) mod M(x+1)\bmod M,其中 MM 是一个给定的上限。

给定 NN 个数字组成的一个序列 A0,A1,A2,…,AN−1A_0,A_1,A_2,\dots, A_{N-1}。

请先输出序列的逆序对数量,然后对序列里的每个数字进行一次循环步进操作。然后将上述流程重复执行 MM 遍。

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

输入格式

  • 第一行:两个整数 NN 与 MM
  • 接下来 NN 行:每行一个整数分别表示 A1,A2,…,ANA_1,A_2,\dots,A_N

输出格式

3 3
2 
1 
0
3
1
1

数据范围

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

来源

改编自 ABC396F