luogu#P16335. [DSDOI Round 1] 邓少打音游

[DSDOI Round 1] 邓少打音游

背景

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

题目描述

定义一个长度至少为 33 的数组 aa 是一个交互,当且仅当以下条件成立:

对于所有满足 1<i<len(a)1<i<\operatorname{len}(a)ii,都有 ai1<ai>ai+1a_{i-1} < a_i > a_{i+1} ai1>ai<ai+1a_{i-1} > a_i < a_{i+1} 成立。(其中 len(a)\operatorname{len}(a) 表示数组 aa 的长度)

例如数组 A={1,2,1,3,1,4,1}A = \{1,2,1,3,1,4,1\} 是一个交互,而数组 B={1,2,2,2}B = \{1,2,2,2\} 不是一个交互。

现在,邓少有一个长为 nn 的数组 ss,他需要你进行以下三种操作或询问:

  1. 1 l r x,表示将 sl,sl+1,,srs_l,s_{l+1},\dots,s_r 分别加上 xx

  2. 2 k,询问能满足:

    k[l,r]k\in[l,r],且子数组 {sl,sl+1,,sr}\{s_l,s_{l+1},\dots,s_r\} 是一个交互。

    这一条件的最长的区间 [l,r][l,r]

  3. 3 l r,询问子数组 {sl,sl+1,,sr}\{s_l,s_{l+1},\dots,s_r\} 是不是交互。

输入格式

第一行包含两个正整数 n,qn,q,表示 ss 的长度以及操作个数。

接下来一行包含 nn 个整数,表示数组 ss

接下来 qq 行,每行包含多个整数,表示一次操作,格式如上所述。

输出格式

对于每次询问输出一行,代表答案。

对于询问 22

  • 若满足要求的区间不存在,则输出 -1
  • 若存在恰好一个满足要求的区间,则输出两个正整数 l,rl,r,表示这个区间。
  • 若存在多个满足要求的区间,则输出两个正整数 l,rl,r,表示这些区间中,左端点最小的那个区间。

对于询问 33:如果询问的区间是一个交互,输出 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

提示

【数据范围】

对于所有测试数据,保证:

  • 1n,q2×1051 \le n,q \le 2 \times 10^5
  • 109si109-10^9 \le s_i \le 10^9
  • 对于操作 11,保证:1lrn1 \le l \le r \le nx109\vert x\vert \le 10^9
  • 对于询问 22,保证 1kn1\le k\le n
  • 对于询问 33,保证 1lrn1 \le l \le r \le n
测试点编号 n,qn,q \le si,x\vert s_i\vert,\vert x\vert \le 特殊性质
121 \sim 2 500500 10910^9 -
343 \sim 4 20002000 ^ ^
575 \sim 7 10510^5
88 2×1052 \times 10^5 AA
99 ^ BB
1010 11 CC
112011 \sim 20 10910^9 -
  • 特殊性质 AA:保证没有修改操作。
  • 特殊性质 BB:保证对于所有修改操作,有 l=rl=r
  • 特殊性质 CC:保证每次修改后,有 si[0,1]s_i\in[0,1]