#ds205. 线段树上二分

线段树上二分

线段树上二分

题目描述

给nn个数a1,a2,a3,…,ana_1, a_2, a_3, \dots, a_n。

支持qq个操作:

  1. 1 x d,修改ax=da_x = d。
  2. 2 l r d, 查询al,al+1,al+2,…,ara_l, a_{l+1}, a_{l+2}, \dots, a_r中大于等于dd的第一个数的下标,如果不存在,输出−1-1。也就是说,求最小的i(l≤i≤r)i (l\leq i\leq r)满足ai≥da_i\geq d。

输入格式

第一行两个整数n,q(1≤n,q≤2×105)n, q (1\leq n, q\leq 2 \times 10^5)。

接下来一行nn个整数a1,a2,…,an(1≤ai≤109)a_1, a_2, \dots, a_n (1 \leq a_i\leq 10^9)。

接下来qq行,每行一个形如1 x d或者2 l r d的操作,保证$1\leq x\leq n, 1\leq l\leq r\leq n, 1\leq d\leq 10^9$。

输出格式

对于每个查询,输出一行,表示答案。

样例输入

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

样例输出

5
3
-1