#9940. 【模板】线段树_第一个大于 K 的数

【模板】线段树_第一个大于 K 的数

题目描述

给定一个长度为 nn 的数列 a1,a2,,ana_1, a_2, \dots, a_n,你需要处理 mm 次操作。操作分为两种:

  1. 修改:将 axa_x 的值改为 vv
  2. 查询:给定一个区间 [l,r][l, r] 和一个整数 kk,请你找出在区间 [l,r][l, r] 内,第一个大于 kk 的数的位置(即最小的下标 ii 满足 lirl \le i \le rai>ka_i > k)。如果区间内不存在这样的数,请输出 1-1

输入格式

第一行包含两个整数 n,mn, m,分别表示数列长度和操作次数。
第二行包含 nn 个整数,表示初始数列 a1,a2,,ana_1, a_2, \dots, a_n
接下来 mm 行,每行描述一个操作,格式如下:

  • 1 x v:表示将 axa_x 修改为 vv
  • 2 l r k:表示查询区间 [l,r][l, r] 内第一个大于 kk 的数的位置。

输出格式

对于每个查询操作,输出一行一个整数,表示第一个大于 kk 的数的位置;若不存在则输出 1-1

样例

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

数据范围与提示

  • 对于 100%100\% 的数据:1n,m1051 \le n, m \le 10^51x,l,rn1 \le x, l, r \le nlrl \le r1ai,v,k1091 \le a_i, v, k \le 10^9
  • 保证所有数值在 C++ int 范围内