背景
最近邓少迷上了一款七个字母的音游。但是邓少的底力不太好,打不动交互,于是他来向你请教。
题目描述
定义一个长度至少为 3 的数组 a 是一个交互,当且仅当以下条件成立:
对于所有满足 1<i<len(a) 的 i,都有 ai−1<ai>ai+1 或 ai−1>ai<ai+1 成立。(其中 len(a) 表示数组 a 的长度)
例如数组 A={1,2,1,3,1,4,1} 是一个交互,而数组 B={1,2,2,2} 不是一个交互。
现在,邓少有一个长为 n 的数组 s,他需要你进行以下三种操作或询问:
-
1 l r x,表示将 sl,sl+1,…,sr 分别加上 x。
-
2 k,询问能满足:
k∈[l,r],且子数组 {sl,sl+1,…,sr} 是一个交互。
这一条件的最长的区间 [l,r]。
-
3 l r,询问子数组 {sl,sl+1,…,sr} 是不是交互。
输入格式
第一行包含两个正整数 n,q,表示 s 的长度以及操作个数。
接下来一行包含 n 个整数,表示数组 s。
接下来 q 行,每行包含多个整数,表示一次操作,格式如上所述。
输出格式
对于每次询问输出一行,代表答案。
对于询问 2:
- 若满足要求的区间不存在,则输出
-1。
- 若存在恰好一个满足要求的区间,则输出两个正整数 l,r,表示这个区间。
- 若存在多个满足要求的区间,则输出两个正整数 l,r,表示这些区间中,左端点最小的那个区间。
对于询问 3:如果询问的区间是一个交互,输出 Yes,否则输出 No。
5 4
1 2 3 4 5
2 4
1 4 5 -3
2 4
3 2 5
-1
2 5
Yes
7 3
1 2 1 2 3 2 3
2 4
1 3 3 1
2 4
1 4
4 7
7 2
16 8 9 7 8 5 9
1 5 7 10
3 1 7
Yes
提示
【数据范围】
对于所有测试数据,保证:
- 1≤n,q≤2×105;
- −109≤si≤109;
- 对于操作 1,保证:1≤l≤r≤n,∣x∣≤109;
- 对于询问 2,保证 1≤k≤n;
- 对于询问 3,保证 1≤l≤r≤n。
| 测试点编号 |
n,q≤ |
∣si∣,∣x∣≤ |
特殊性质 |
| 1∼2 |
500 |
109 |
− |
| 3∼4 |
2000 |
^ |
^ |
| 5∼7 |
105 |
| 8 |
2×105 |
A |
| 9 |
^ |
B |
| 10 |
1 |
C |
| 11∼20 |
109 |
− |
- 特殊性质 A:保证没有修改操作。
- 特殊性质 B:保证对于所有修改操作,有 l=r。
- 特殊性质 C:保证每次修改后,有 si∈[0,1]。