权值线段树找前驱后继
问题是我们要在的区间内找第一个在前面/后面出现的值。
这个可以转化为在权值线段树上找前驱后继。
前驱问题的具体解决方法是。
如果在当前区间的左半边那么答案一定在左区间,于是递归到左区间寻找。
否则优先在右区间进行寻找,如果找到答案的话就返回,否则再在左区间寻找。
int getpre(int l, int r, int o1, int o2, int pos) { if (!(tr[o2] - tr[o1])) return 0; if (l == r) return l; int mid = (l + r) >> 1; if (pos <= mid) return getpre(l, mid, ls[o1], ls[o2], pos); int t = getpre(mid + 1, r, rs[o1], rs[o2], pos); if (t) return t; return getpre(l, mid, ls[o1], ls[o2], pos); }
查询后继类似。
int getnxt(int l, int r, int o1, int o2, int pos) { if (!(tr[o2] - tr[o1])) return 0; if (l == r) return l; int mid = (l + r) >> 1; if (pos > mid) return getnxt(mid + 1, r, rs[o1], rs[o2], pos); int t = getnxt(l, mid, ls[o1], ls[o2], pos); if (t) return t; return getnxt(mid + 1, r, rs[o1], rs[o2], pos); }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!