从0开始学算法——第十四天(数组与搜索练习)

写在开头的话

学习了今天的基础知识,让我们来做道题来练练手吧。(题目是别的地方扒来的,参考答案是我自己写的,肯定不是最优解,有更好的方法欢迎评论区交流)

题目一------整数二分

第一题参考答案(Python版)

python 复制代码
import sys
import bisect

def main():
    data = sys.stdin.read().split()
    it = iter(data)
    n = int(next(it))
    q = int(next(it))
    A = [int(next(it)) for _ in range(n)]

    out_lines = []
    for _ in range(q):
        t = int(next(it))
        l = int(next(it))
        r = int(next(it))
        x = int(next(it))

        if t == 1:      # 等于 x 的最左边下标
            low = bisect.bisect_left(A, x) + 1   # 全局第一个 >= x 的下标(1‑based)
            pos = max(low, l)
            if pos <= r and A[pos-1] == x:
                out_lines.append(str(pos))
            else:
                out_lines.append("-1")

        elif t == 2:    # 等于 x 的最右边下标
            high = bisect.bisect_right(A, x) + 1  # 全局第一个 > x 的下标(1‑based)
            pos = min(high-1, r)
            if pos >= l and A[pos-1] == x:
                out_lines.append(str(pos))
            else:
                out_lines.append("-1")

        elif t == 3:    # 第一个 >= x 的下标
            low = bisect.bisect_left(A, x) + 1
            pos = max(low, l)
            if pos <= r:
                out_lines.append(str(pos))
            else:
                out_lines.append("-1")

        else:           # t == 4,第一个 > x 的下标
            high = bisect.bisect_right(A, x) + 1
            pos = max(high, l)
            if pos <= r:
                out_lines.append(str(pos))
            else:
                out_lines.append("-1")

    sys.stdout.write("\n".join(out_lines))

if __name__ == "__main__":
    main()
相关推荐
jtymyxmz9 分钟前
《Maya 2024 超级学习手册》3.4.9 实例:制作锤子模型
学习·maya
QiZhang | UESTC10 分钟前
学习日记day66
学习
mjhcsp14 分钟前
[笔记] 线性规划 学习笔记
笔记·学习
Linging_2415 分钟前
PGSQL与Mysql对比学习
数据库·学习·mysql·postgresql
MicroTech202517 分钟前
微算法科技(NASDAQ :MLGO)量子生成对抗网络(QGAN)技术,为网络安全防御提供了全新的技术路径
科技·算法·生成对抗网络
2501_9377983918 分钟前
2026企业AI数字资产管理平台评测:谁在定义下一代无形资产?
笔记
dulu~dulu19 分钟前
英语改错知识点总结
笔记·英语·自用·英语改错
YuTaoShao19 分钟前
【LeetCode 每日一题】3507. 移除最小数对使数组有序 I
算法·leetcode·职场和发展
budapest24 分钟前
高效的“3C协议”学习法
学习
自不量力的A同学28 分钟前
Qwen3-TTS 全家桶开源上线
笔记