题解 | 【模板】整数域二分

【模板】整数域二分

https://www.nowcoder.com/practice/d483ab6bf19245518730a75c6ea108ae

import sys
input=sys.stdin.readline

def solve():
    n,q=map(int,input().split())
    nums=list(map(int,input().split()))
    nums.sort()
    ans=[]

    def query_right(tar):#计算坐标(包含)
        l,r=0,n
        while l<r:
            mid=(l+r)>>1
            if nums[mid]>tar:
                r=mid
            else:
                l=mid+1
        return l-1
    for _ in range(q):
        l,r=map(int,input().split())
        ans.append(query_right(r)-query_right(l-1))
    print("\n".join(map(str,ans)))
solve()

既然是模板题,那么实现一下手写二分

统计[l,r]的数量,二分查找需要数组单调性,所以先对数组排序

可以拆成左区间[-inf,l-1]与右区间[-inf,r]

query_right函数实现的是左闭右开的下标查找,找到第一个严格大于target的下标并减一即返回target最右面数字的下标

右区间-左区间即为答案

全部评论

相关推荐

04-02 10:09
门头沟学院 Java
用微笑面对困难:这里面问题还是很多的,我也不清楚为啥大家会感觉没啥问题。首先就是全栈开发实习9个月的内容都没有java实习生的内容多,1整个技术栈没看出太核心和难点的内容,感觉好像被拉过去打杂了,而且全栈基本上很容易被毙。里面能问的bug是在太多了比如L:继承 BaseMapper 可直接使用内置方法’。请问你的 BaseMapper 是如何扫描实体类注解如果瞬时产生 100 个上传任务,MySQL 的索引设计是否会有瓶颈?你做过分库分表或者索引优化吗?全栈的内容可以针对动态难点去搞,技能特长写在下面吧,你写了这么多技能,项目和实习体现了多少?你可以在项目里多做文章然后把这个放下去,从大致来看实习不算太水,有含金量你也要写上内容针对哨兵里面的节点变化能问出一万个问题,这个很容易就爆了。
提前批简历挂麻了怎么办
点赞 评论 收藏
分享
牛客41077653...:想问一下华为池子是不是很大呀
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务