hdu 4630 No Pain No Game

    题目大意,给定一个5万个数字的排列,然后给定5万个区间查询,其中要求在a,b中选出两个不同的数字使得gcd(a,b)达到最大。

    这道题目对于我来说还是很新颖的,之前对于线段树的训练非常有限,所以对于这道题目没有很好的方法,觉得正解是这么的神奇。不说废话了。

方法:对于5万的查询,肯定是要去离线处理的,先把所有的查询按照r的大小排序,从左端开始处理这个序列,将每一个数字更新进去,怎么处理出结果呢,用一个数组prex记录含有这个数字的倍数的最优端的位置,为什么要这么记录,因为,一旦这个区间内有超过1个数字是这个数字的倍数,那么这个就是可能的解,然后我们记录一个ans数组,同时用线段树来维护,ans数组记录的内容是这个位置上的数字和右端现在处理到的区间内能够产生的最大值,然后每个添加进一个数字之后,我们就对于这个数字的所有约数进行更新,采用的线段树的单点更新,处理每一个询问采用的是区间最值得查询,代码并不是特别难写。

    这个思想对于我这种接触这类的题目不多的来说确实是非常的先进,在一类题目上可以得到广泛的推广。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值