2024江苏省大学生程序设计竞赛JSCPC题解(E、I、K、H)

E. Divide

首先,将一个数字xxx不断进行/2/2/2操作最终会变成000, 这个操作只会执行log(x)log(x)log(x)次。因此可以将原数组a1,a2,...,ana_1, a_2, ..., a_na1,a2,...,an分解为a1,a1/2,a1/4,...,0,a2,a2/2,a2/4,...,0,...,an,an/2,an/4,...,0a_1, a_1/2, a_1/4, ..., 0, a_2, a_2/2, a_2/4, ..., 0, ..., a_n, a_n/2, a_n/4, ..., 0a1,a1/2,a1/4,...,0,a2,a2/2,a2/4,...,0,...,an,an/2,an/4,...,0

考虑将每个数的下标作为第一维度,其真实数值作为第二维度。则以上数组再转化为(1,a1),(1,a1/2),...,(1,a1/4),(1,0),(2,a2),(2,a2/2),(2,a2/4),...,(2,0),...,(n,an),(n,an/2),(n,an/4),...,(n,0)(1, a_1), (1, a_1/2), ..., (1, a_1/4), (1, 0), (2, a_2), (2, a_2/2), (2, a_2/4), ..., (2, 0), ..., (n, a_n), (n, a_n/2), (n, a_n/4), ..., (n, 0)(1,a1),(1,a1/2),...,(1,a1/4),(1,0),(2,a2),(2,a2/2),(2,a2/4),...,(2,0),...,(n,an),(n,an/2),(n,an/4),...,(n,0)

可以发现,求[l,r][l, r][l,r]中每次将最大值/2/2/2,执行kkk次后的最大值等价于求上述二维度数组的第二维度的第k+1k + 1k+1大值(可重集,即倒序排完序后的第k+1k + 1k+1个元素),这可以用主席树维护。

评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值