#L2581. 「SHOI2011」改进代码

「SHOI2011」改进代码

题目描述

PP 写了两段对数组进行操作的代码,分别为 operate1operate2

  • operate1(l, r, c):对数组下标从 ( l ) 到 ( r ) 的元素执行 ( a[i] = (a[i] + c) \mod p )。
  • operate2(l, r):统计数组下标从 ( l ) 到 ( r-1 ) 中满足 ( a[i] > a[i+1] ) 的对数,并输出该计数。

现在需要优化这两段代码的执行,对于给定的初始数组和包含这两种操作的主程序,计算最终输出结果。

输入格式

第一行包含三个整数 ( n, m, p ),其中:

  • ( n ) 是数组下标范围的上界,
  • ( m ) 是主程序中的语句数,
  • ( p ) 是取模常数。

接下来 ( n ) 行,每行一个整数,依次是 ( a_1, a_2, \dots, a_n ) 的初始值(均在 ( 0 \sim p-1 ) 范围内)。

再接下来 ( m ) 行,每行描述一条语句,格式为:

  • 1 l r c:表示执行 operate1(l, r, c)
  • 2 l r:表示执行 operate2(l, r) 并输出结果。

输出格式

对于每个 operate2 操作,输出一行对应的计数结果。

样例

样例 1
输入:

7 3 7  
2  
5  
3  
0  
3  
1  
2  
1 1 4 3  
1 4 7 4  
2 1 7  

输出:

2  

样例 2
输入:

5 5 2  
1  
0  
0  
1  
0  
2 1 4  
2 1 5  
1 3 5 1  
2 1 4  
2 1 3  

输出:

1  
2  
2  
1  

数据范围与提示

数据编号 数据限制
1 ( n \leq 1000 ),( m \leq 2000 )
2~3 ( n \leq 10^5 ),( m \leq 2 \times 10^5 ),( c \leq 1 ),( a_i \leq 10^5 ),( p > 5 \times 10^5 )
4 ( n \leq 10^5 ),( m \leq 2 \times 10^5 ),( l=1 ),( r=n )
5~6 ( n \leq 10^5 ),( m \leq 2 \times 10^5 ),所有 operate1 满足 ( l=1 ),( r=n )
7~10 ( n \leq 10^5 ),( m \leq 2 \times 10^5 )

保证 ( 1 \leq l \leq r \leq n ),( 0 \leq c \leq 10^8 ),( p \leq 10^6 )。