/ fuboat / 题库 /

[NOI2017 模拟] 区间第 k 小

[NOI2017 模拟] 区间第 k 小

问题描述

给定一个长度为 nn 的序列和一个常数 ww, 所给序列中的任意一个数 xx 满足 0x<n0 \leq x < n.

对于一个序列 a1,a2,...,ana_1, a_2, ... , a_n, 定义区间 [l,r][l, r] 为序列 al,al+1,...,ara_l, a_{l+1}, ... , a_r.
现在每次给你一个询问 (l,r,k)(l,r,k), 表示对所给序列询问区间 [l,r][l,r] 中第 kk 小的数.

但是需要注意的是, 如果这段区间中的某一个数 xx 出现次数超过了 ww 次, 则在求第 kk 小的数时应将所有的数字 xx 视为数字 nn.

即: 询问时将区间中所有出现次数超过 ww 的数字视为数字 nn.

举例说明:

询问的区间中的数为 [0,0,0,7,8,8],w=2,n=9[0,0,0,7,8,8], w = 2, n = 9, 该区间应视为 [9,9,9,7,8,8][9,9,9,7,8,8];

询问的区间中的数为 [9,7,8,2,3,3],w=3,n=7[9,7,8,2,3,3], w = 3, n = 7, 该区间应视为 [9,7,8,2,3,3][9,7,8,2,3,3];

询问的区间中的数为 [9,7,5,5,6,6],w=1,n=8[9,7,5,5,6,6], w = 1, n = 8, 该区间应视为 [9,7,8,8,8,8][9,7,8,8,8,8];

输入格式

注意, 本题部分测试点 强制在线 .

第一行四个整数 n,w,q,optn, w, q, opt, 其中 qq 表示询问的个数, optopt 为强制在线的参数.

第二行 nn 个整数 a1,a2,...,ana_1, a_2, ... , a_n, 表示序列中的每一个数.

接下来 qq 行, 每行三个正整数 l,r,kl, r, k, 表示询问区间 [l,r][l,r] 在根据题目要求转化后的第 kk 小.

注意这里的 l,r,kl,r,k 是经过加密的. 记上一次询问的答案为 lastanslastans (初始值为 00), 将 l,r,kl, r, k 分别异或 opt×lastansopt \times lastans 后即为本次询问. 保证询问合法且有解.

输出格式

qq 行, 每行一个数, 依次表示每个询问的答案.

数据范围

对于 100%100\% 的数据, 满足 0ai<n105,0<q,w105,0opt10 \leq a_i < n \leq 10^5, 0 < q, w \leq 10^5, 0 \leq opt \leq 1.

信息

难度
9
分类
(无)
标签
递交数
13
已通过
1
通过率
8%
上传者