从大牛代码中发现的一个有趣算法。。

今天看CF,读大牛代码发现了了一个有趣的算法,研究了半天大概明白是了是什么意思。

算法主要解决这样一个问题

有N对数,(a0,b0),(a1,b1)......用O(NlgN)复杂度排序预处理后可以在O(lgm)复杂度内知

所有比第i个数的a值小的数的b值的极值。(M是ai,bi的最大值)

试想,两个数x,y,x能在lg(x)的复杂度内到达到达状态Sx集合,和状态集合Tx;y则对应Sy和Ty

其中S和T都用二进制表示。而且满足如果x < y则有Sy ∩ Tx != ∅。这样就能解决上面的问题。

具体的方法有不唯一。列出两种

第一种

Sx = {x = x | (x+1)}  

Tx =  {x = x&(x+1)-1}

第二种

Sx = {x = x & (x-1)}

Tx = {x = (x | (x-1)) + 1} 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值