zoukankan      html  css  js  c++  java
  • 二分小技巧

    有一些题目,常常会用到二分,但无良的出题人总是会卡人们的二分。。。比方说你每次二分总要分满log次,而且还总要分n次,这样效率就变成了n*log(n),很是GG。但是思考发现我们的二分存在一个小问题,就是说右端点总是被卡死的,如果解决这个瓶颈,便能实现不被卡。

    而能二分说明它一定有二分性质,也就是说我们可以来次倒着的二分确定它的届。

    假设说最低是l,先试试l+1,再试试l+2^1,再试试l+2^2,再试试l+2^3……知道你找到了一个不合法的r=l+2^k,好的,你就把它当r,l=l+2^(k-1)(因为之前确定是合法的了),来二分,和普通二分无异。这样可以处理掉极端数据,由于你确定r的过程也是单log(n)的,所以理论复杂度没有太大变化。

    当然,要注意的是,你确定二分方案可行的check不能复杂度太高!常数是很可怕的,有时候并不一定能接受。不要每个二分都这么打,有可能会聪明反被聪明误。

  • 相关阅读:
    Java ES api 查询例子
    leveldb学习
    Viewstamp Replication协议
    PacificA协议
    vhost架构
    数据分片方法
    常见分布式存储系统架构分析
    数据存储(B+树 vs LSM树)
    paxos算法理解
    Raft协议理解
  • 原文地址:https://www.cnblogs.com/Atoner/p/8111355.html
Copyright © 2011-2022 走看看