Kimi    LeetCode 3901. 好子序列查询 Golang实现
根据搜索结果LeetCode 3901「好子序列查询」的 Go 实现如下---思路1. 只关心 p 的倍数如果 nums[i] 不是 p 的倍数它对 GCD 为 p 的子序列没有贡献在线段树中视为 0。2. 线段树维护所有 p 倍数的 GCD记为 g。- 若 g ! p则不存在好子序列。- 若 g p则所有 p 的倍数整体 GCD 已是 p。3. 长度严格小于 n- 若 cnt n并非所有元素都是 p 的倍数直接取所有 p 的倍数即可长度必然 n。- 若 cnt n所有元素都是 p 的倍数需要删一个元素后 GCD 仍为 p。- 关键结论若 n 6 且整体 GCD 为 p则一定可以删一个元素使 GCD 仍为 p。因此只需在 n 6 时暴力枚举删除位置。4. 线段树操作单点更新、区间查询 GCD。---Go 实现gofunc gcd(a, b int) int {for b ! 0 {a, b b, a%b}return a}type Node struct {l, r intg int}func NewNode(l, r int) *Node {return Node{l: l, r: r, g: 0}}type SegmentTree struct {tr []*Node}func NewSegmentTree(n int) *SegmentTree {tree : SegmentTree{tr: make([]*Node, n2)}tree.build(1, 1, n)return tree}func (st *SegmentTree) build(u, l, r int) {st.tr[u] NewNode(l, r)if l r {return}mid : (l r) 1st.build(u1, l, mid)st.build(u1|1, mid1, r)}func (st *SegmentTree) pushup(u int) {st.tr[u].g gcd(st.tr[u1].g, st.tr[u1|1].g)}func (st *SegmentTree) modify(u, x, v int) {if st.tr[u].l st.tr[u].r {st.tr[u].g vreturn}mid : (st.tr[u].l st.tr[u].r) 1if x mid {st.modify(u1, x, v)} else {st.modify(u1|1, x, v)}st.pushup(u)}func (st *SegmentTree) query(u, l, r int) int {if l r {return 0}if st.tr[u].l l st.tr[u].r r {return st.tr[u].g}mid : (st.tr[u].l st.tr[u].r) 1if r mid {return st.query(u1, l, r)}if l mid {return st.query(u1|1, l, r)}return gcd(st.query(u1, l, mid), st.query(u1|1, mid1, r))}func countGoodSubseq(nums []int, p int, queries [][]int) int {n : len(nums)tree : NewSegmentTree(n)cnt : 0for i, x : range nums {if x%p 0 {tree.modify(1, i1, x)cnt}}ans : 0for _, q : range queries {idx, val : q[0], q[1]if nums[idx]%p 0 {tree.modify(1, idx1, 0)cnt--}if val%p 0 {tree.modify(1, idx1, val)cnt}nums[idx] valif tree.tr[1].g ! p {continue}if cnt n || n 6 {anscontinue}for i : 1; i n; i {leftG : tree.query(1, 1, i-1)rightG : tree.query(1, i1, n)if gcd(leftG, rightG) p {ansbreak}}}return ans}---复杂度- 时间复杂度O((n q) \times \log n)其中 n \le 6 时的暴力枚举是常数级。- 空间复杂度O(n)。

相关新闻

华硕笔记本控制工具G-Helper上手全记录:3天告别Armoury Crate的卡顿

华硕笔记本控制工具G-Helper上手全记录:3天告别Armoury Crate的卡顿

华硕笔记本控制工具G-Helper上手全记录:3天告别Armoury Crate的卡顿 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops with nearly the same functionality. Works with ROG Zephyrus, Flow, TUF, Strix, Scar, ProArt, Vivobook…

2026/10/13 1:09:26 阅读更多 →
G-Helper 无法启动?这份从零开始的排查指南,帮你快速找回华硕控制工具

G-Helper 无法启动?这份从零开始的排查指南,帮你快速找回华硕控制工具

G-Helper 无法启动?这份从零开始的排查指南,帮你快速找回华硕控制工具 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops with nearly the same functionality. Works with ROG Zephyrus, Flow, TUF, Strix, Scar, Pro…

2026/10/12 14:23:38 阅读更多 →
讲高并发别先扔公式,先说队列为什么会长

讲高并发别先扔公式,先说队列为什么会长

讲高并发别先扔公式,先说队列为什么会长 高并发科普最容易出现两种极端:全是术语,或者只剩“加机器”。更好的入口是一个简单问题:任务来的速度长期超过处理速度,会发生什么?答案是等待越来越长&#xff0c…

2026/10/12 0:20:32 阅读更多 →

最新新闻

四轴机械臂关节反解:雅可比矩阵与牛顿迭代法完整实践

四轴机械臂关节反解:雅可比矩阵与牛顿迭代法完整实践

简介:机械臂关节反解是机器人学中的核心问题,这份资料聚焦四轴机械臂的逆运动学求解,结合国外经典文献与MATLAB仿真,面向机器人方向学生、研究者及入门工程师。压缩包内共2个文件,一份PDF为国外关节反解资料&#xff0…

2026/10/13 14:24:21 阅读更多 →
Open Code Review:一种面向知识沉淀的开源式代码评审实践

Open Code Review:一种面向知识沉淀的开源式代码评审实践

1. 项目概述:这不是代码检查,而是一场面向真实协作场景的开源式评审实践“open-code-review”这个词组乍看像某个工具名或平台代号,但实际它代表的是一种正在快速演进的工程文化范式——把传统封闭、单向、以“找错”为核心的代码审查&#x…

2026/10/13 14:24:21 阅读更多 →
开放代码审查实践:构建可落地的协作机制

开放代码审查实践:构建可落地的协作机制

1. 项目概述:这不是代码审查工具,而是一套可落地的开源协作实践体系 “open-code-review”这个标题乍看像某个新发布的开源工具,但实际拆解下来,它根本不是一款软件产品,而是一整套围绕代码审查(Code Revie…

2026/10/13 14:24:21 阅读更多 →
Java并发基石AQS:源码拆解锁与队列的底层原理

Java并发基石AQS:源码拆解锁与队列的底层原理

1. 别急着看代码:先搞懂AQS到底在解决什么麻烦我在读Java并发源码的时候,第一感受是:为什么一个叫AbstractQueuedSynchronizer的抽象类,能撑起几乎整个Java并发工具包的半边天。不信你翻开JDK看看,ReentrantLock、Sema…

2026/10/13 14:24:21 阅读更多 →
一张图理清Python、IPython、Jupyter与Anaconda的关系与分工

一张图理清Python、IPython、Jupyter与Anaconda的关系与分工

刚开始学Python的时候,身边几乎每个人都在装Anaconda,打开别人给的Demo又要求用Jupyter跑,偶尔还会看到有人敲IPython……当时我整个人是懵的:我明明已经装了Python,为什么还要再装这一堆东西?它们是同一个…

2026/10/13 14:24:20 阅读更多 →
SPWM三相六路互补输出与调频调压:死区、载波比与V/F控制详解

SPWM三相六路互补输出与调频调压:死区、载波比与V/F控制详解

简介:面向STM32F103C8T6三相电机驱动与变频控制场景,该资源提供基于高级定时器TIM1查表法生成三相六路互补SPWM的完整工程。代码生成相位互差120的六路PWM,可配置死区时间,并通过恒压频比策略实现调频调压,适用于逆变器…

2026/10/13 14:23:19 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 21:05:09 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 14:48:49 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →