【题目描述】
在看了 jiry_2 的课件《Segment Tree Beats!》后,小 O 深深沉迷于这种能单次 O(logn) 支持区间与一个数取 min/max,查询区间和等信息的数据结构,于是他决定做一道与区间与 一个数取 min/max 的好题。
这题是这样的:你得到了一个长度为 n 的数列{ai},要求支持以下 2 种操作:第一种是给 定 L,R,X,要求把区间中比 X 小的数字全部修改为 X;第二种是给定 L,R,K,X,查询区间中比 X 小的最小的 K 个数,并且将它们升序输出,没有则输出-1。
小 O 觉得这题太简单了,于是把这题丢给了你,请你帮忙实现。
下发文件中有 jiry_2 的课件《Segment Tree Beats!》,不保证其与解题有关。(其实真的没关)
【输入格式】
第一行一个数字 n 表示数列长度,
第二行 n 个数字分别表示 a1....an,
第三行一个数字 m 表示操作次数,
接下来 m 行每行表示一次操作,
第一个数 op 表示操作类型,op 可能是 1 或 2,
如果 op=1,后面有 L,R,X 三个正整数表示把区间[L,R]中比 X 小的数字全部改成 X
如果 op=2,后面有 L,R,X,K 四个正整数表示查询区间[L,R]中比 X 小的最小的 K 个数
【输出格式】
对于每个 op=2,输出一行,
如果比 X 小的数达到了 K 个,升序输出最小的 K 个数,
如果比 X 小的数小于 K 个,输出一行一