DP(Nietzsche)的hu测 T3(规律?主席树)

版权属于DP,想要引用此题(包括题面)的朋友请联系博主

这里写图片描述
这里写图片描述

分析:
这道是结论题

A or B+A and B=A+B A   o r   B + A   a n d   B = A + B

假设我们找到区间中最大的数 A A
则在ta旁边的任意一个数小于ta,A or B+A and B=A+B<A+A
也就是说,我们选择两个数,不如只选择A优秀
同理,我们可以用归纳法扩展到整个序列
因此答案就是区间最大值

tip

这道题是原创题,结果就出了这么大的锅。。。
我竟然想用线段树维护区间最大值
完全是多余,没有修改操作,询问超多,直接RMQ即可

自己还是太弱了,对于算法和数据结构的理解非常不到位,很有可能知道解法却因选错实现方法而成千古恨,高度警惕。。。


在出题人DP的深切致歉后,DP又搬出了一道题:

改成or+GCD

20%
暴力

另外20%
n2 n 2 暴力预处理区间值插到主席树上然后查询
按照区间右端点建立主席树,主席树中是左端点,维护最大值
n2log+Mlog n 2 l o g + M l o g

另外20%
并不是所有区间的值都有价值,
如果以 R R 为右端点的区间[L1,R]
存在 [L2,R]>[L1,R] [ L 2 , R ] > [ L 1 , R ] L2>L1 L 2 > L 1 [L1,R] [ L 1 , R ] 没有价值
随机数据下每个右端点的有价值区间不会比log多(事实上不随机也是如此)
n2 n 2 求取所有区间的值,再把有价值的插入主席树
n2+(n+m)log n 2 + ( n + m ) l o g

100%
第3个做法中, n2 n 2 找到所有区间的值太暴力了,
考虑是不是可以不找出所有区间的值,直接找出需要插入的值
考虑对于同一个右端点,在左移左端点扩大区间时
如果只是 or o r 的话,ta是单调不降
如果只是 GCD G C D 的话,ta是单调不升
对于 or+GCD o r + G C D 而言
考虑每一次 or o r 发生增加的时候左端点的位置,这样的位置最多有 log l o g 个,
两个这样的位置之间的左端点位置所代表的区间值的大小只受 GCD G C D 支配是不升
所以ta们都不如右边的那个or增加的位置优,这样我们只要找的这样的or发生增加的位置插入主席树即可
找法是维护 f[k] f [ k ] 为位置 i i 及其之前的所有位置中最后一个(二进制k位为1)的位置

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值