#P16623. [Ukiepc2023]History in Numbers

[Ukiepc2023]History in Numbers

题目描述

历史学家正在研究一座城市连续 nn 年的城市发展状况。他们使用一个可能为负数的整数指标——城市发展指数(UDI)——来量化每一年的发展程度。第 ii 年的初始估计值为 eie_i

随着新文献和证据被发现,这些估计值会不断修订。一次修改会选择年份区间 [sj,fj][s_j,f_j],并给区间中每一年的 UDI 增加 djd_j

历史学家还会询问某段时间内 UDI 是否“递增”。这里使用的不是通常的单调递增定义,而是以下规则:

  1. 将所有连续且相等的数压缩成一个数。例如:

    1 1 2 2 2 3 3 3
    

    压缩后变为:

    1 2 3
    
  2. 在压缩后的序列中,若一个元素严格小于它的所有相邻元素,则称它为一个局部最小值。首元素和末元素只与其唯一的相邻元素比较。

  3. 若所有局部最小值按照出现顺序组成的序列严格递增,则认为原序列在该时间段内“递增”。

你需要维护 UDI 序列,支持区间加法修改和上述递增性查询。

输入格式

第一行包含一个整数 nn

1n3×105.1\le n\le 3\times 10^5.

第二行包含 nn 个整数 e1,e2,,ene_1,e_2,\ldots,e_n

108ei108.-10^8\le e_i\le 10^8.

第三行包含一个整数 mm,表示操作数量:

1m3×105.1\le m\le 3\times 10^5.

接下来 mm 行,每行是以下两种操作之一:

  • update s f d:对所有 sifs\le i\le f,令 eiei+de_i\leftarrow e_i+d;其中

    1sfn,d108.1\le s\le f\le n,\qquad |d|\le 10^8.
  • check s f:询问子序列 es,es+1,,efe_s,e_{s+1},\ldots,e_f 是否满足题目定义的“递增”。

输出格式

对于每个 check 操作,若对应区间满足条件,输出 YES;否则输出 NO

样例 1

输入

5
10 4 10 6 10
5
check 1 5
update 2 3 1
check 1 5
update 2 3 1
check 1 5

输出

YES
YES
NO

样例 2

输入

8
10 -5 -5 -5 11 6 6 12
1
check 1 8

输出

YES