CF1887C Minimum Array
题目描述
给定一个长度为 $n$ 的整数数组 $a$。然后对其顺序执行 $q$ 次如下操作:
- 选择下标 $l$ 和 $r$($1 \le l \le r \le n$)以及一个整数 $x$;
- 将 $x$ 加到数组 $a$ 的区间 $[l, r]$ 的所有元素上。更正式地说,对所有 $l \le i \le r$,令 $a_i := a_i + x$。
令 $b_j$ 表示在执行前 $j$ 次操作后得到的数组 $a$($0 \le j \le q$)。注意,$b_0$ 是未进行任何操作时的数组 $a$。
你需要在所有数组 $b_j$ 中找到字典序最小的数组。
$^\dagger$ 如果存在某个下标 $i$ 使得 $x_i < y_i$,且对于所有 $j < i$ 都有 $x_j = y_j$,则数组 $x$ 的字典序小于数组 $y$。换句话说,对于第一个不同的位置 $i$,若 $x_i < y_i$,则 $x$ 的字典序小于 $y$。
输入格式
每组测试数据包含多个测试用例。第一行包含一个整数 $t$($1 \le t \le 5 \cdot 10^5$),表示测试用例的数量。接下来是每个测试用例的描述。
每个测试用例的第一行包含一个整数 $n$($1 \le n \le 5 \cdot 10^5$),表示数组 $a$ 的长度。
第二行包含 $n$ 个整数 $a_1, a_2, \ldots, a_n$($-10^9 \le a_i \le 10^9$),表示数组 $a$ 的元素。
第三行包含一个整数 $q$($0 \le q \le 5 \cdot 10^5$),表示对数组进行的操作次数。
接下来的 $q$ 行,每行包含三个整数 $l_j$、$r_j$ 和 $x_j$($1 \le l_j \le r_j \le n, -10^9 \le x_j \le 10^9$),表示每次操作的描述。操作按给定顺序执行。
保证所有测试用例中 $n$ 的总和以及 $q$ 的总和不超过 $5 \cdot 10^5$。
输出格式
对于每个测试用例,输出所有数组 $b_j$ 中字典序最小的数组。
说明/提示
在第一个测试用例中:
- $b_0 = [1,2,3,4]$;
- $b_1 = [1,2,3,4]$;
- $b_2 = [-99,-98,-97,4]$。
因此,字典序最小的数组是 $b_2$。
在第二个测试用例中,字典序最小的数组是 $b_0$。
由 ChatGPT 4.1 翻译