P16335 [DSDOI Round 1] 邓少打音游

题目背景

最近邓少迷上了一款七个字母的音游。但是邓少的底力不太好,打不动交互,于是他来向你请教。

题目描述

定义一个长度至少为 $3$ 的数组 $a$ 是一个**交互**,当且仅当以下条件成立: > 对于所有满足 $1 a_i < a_{i+1}$ 成立。(其中 $\operatorname{len}(a)$ 表示数组 $a$ 的长度) 例如数组 $A = \{1,2,1,3,1,4,1\}$ 是一个交互,而数组 $B = \{1,2,2,2\}$ 不是一个交互。 现在,邓少有一个长为 $n$ 的数组 $s$,他需要你进行以下三种操作或询问: 1. `1 l r x`,表示将 $s_l,s_{l+1},\dots,s_r$ 分别加上 $x$。 2. `2 k`,询问能满足: > $k\in[l,r]$,且子数组 $\{s_l,s_{l+1},\dots,s_r\}$ 是一个交互。 这一条件的最长的区间 $[l,r]$。 3. `3 l r`,询问子数组 $\{s_l,s_{l+1},\dots,s_r\}$ 是不是交互。

输入格式

第一行包含两个正整数 $n,q$,表示 $s$ 的长度以及操作个数。 接下来一行包含 $n$ 个整数,表示数组 $s$。 接下来 $q$ 行,每行包含多个整数,表示一次操作,格式如上所述。

输出格式

对于每次询问输出一行,代表答案。 对于询问 $2$: - 若满足要求的区间**不存在**,则输出 `-1`。 - 若存在**恰好一个**满足要求的区间,则输出两个正整数 $l,r$,表示这个区间。 - 若存在**多个**满足要求的区间,则输出两个正整数 $l,r$,表示这些区间中,左端点最小的那个区间。 对于询问 $3$:如果询问的区间是一个交互,输出 `Yes`,否则输出 `No`。

说明/提示

### 【数据范围】 对于所有测试数据,保证: - $1 \le n,q \le 2 \times 10^5$; - $-10^9 \le s_i \le 10^9$; - 对于操作 $1$,保证:$1 \le l \le r \le n$,$\vert x\vert \le 10^9$; - 对于询问 $2$,保证 $1\le k\le n$; - 对于询问 $3$,保证 $1 \le l \le r \le n$。 | 测试点编号 | $n,q \le$ | $\vert s_i\vert,\vert x\vert \le$ | 特殊性质 | | :-: | :-: | :-: | :-: | | $1 \sim 2$ | $500$ | $10^9$ | $-$ | | $3 \sim 4$ | $2000$ | ^ | ^ | | $5 \sim 7$ | $10^5$ | ^ | ^ | | $8$ | $2 \times 10^5$ | ^ | $A$ | | $9$ | ^ | ^ | $B$ | | $10$ | ^ | $1$ | $C$ | | $11 \sim 20$ | ^ | $10^9$ | $-$ | - 特殊性质 $A$:保证没有修改操作。 - 特殊性质 $B$:保证对于所有修改操作,有 $l=r$。 - 特殊性质 $C$:保证每次修改后,有 $s_i\in[0,1]$。