当前位置: 首页 > news >正文

Leetcode3161. 物块放置查询(Go语言的红黑树 + 线段树)

题目截图

在这里插入图片描述

题目分析

每次1操作将会分裂成两块区间长度,以最近右端点记录左侧区间的长度即可
因此涉及到单点更新和区间查询
然后左右侧最近端点则使用redBlackTree,也就是python中的sortedlist

ac code

type seg []int// 把 i 处的值改成 val
func (t seg) update(o, l, r, i, val int) {if l == r {t[o] = valreturn}m := (l + r) >> 1if i <= m {t.update(o<<1, l, m, i, val)} else {t.update(o<<1|1, m+1, r, i, val)}t[o] = max(t[o<<1], t[o<<1|1])
}// 查询 [0,R] 中的最大值
func (t seg) query(o, l, r, R int) int {if r <= R {return t[o]}m := (l + r) >> 1if R <= m {return t.query(o<<1, l, m, R)}return max(t[o<<1], t.query(o<<1|1, m+1, r, R))
}func getResults(queries [][]int) (ans []bool) {m := 0for _, q := range queries {m = max(m, q[1])}m++set := redblacktree.New[int, struct{}]() // kv对,v就这样摆着先set.Put(0, struct{}{}) // 哨兵set.Put(m, struct{}{})t := make(seg, 2<<bits.Len(uint(m)))for _, q := range queries {x := q[1]pre, _ := set.Floor(x - 1) // x 左侧最近障碍物的位置if q[0] == 1 {nxt, _ := set.Ceiling(x) // x 右侧最近障碍物的位置set.Put(x, struct{}{})t.update(1, 0, m, x, x-pre.Key)       // 更新 d[x] = x - pret.update(1, 0, m, nxt.Key, nxt.Key-x) // 更新 d[nxt] = nxt - x} else {// 最大长度要么是 [0,pre] 中的最大 d,要么是 [pre,x] 这一段的长度maxGap := max(t.query(1, 0, m, pre.Key), x-pre.Key)ans = append(ans, maxGap >= q[2])}}return
}
http://www.lryc.cn/news/356785.html

相关文章:

  • 基于springboot实现医疗挂号管理系统项目【项目源码+论文说明】
  • ScrumMaster认证机构及CSM、PSM、RSM价值比较
  • 加氢站压缩液驱比例泵放大器
  • MyBatis系统学习篇 - MyBatis逆向工程
  • SpringCloud的Config配置中心,为什么要分Server服务端和Client客户端?
  • 「数据结构」队列
  • Python01 注释,关键字,变量,数据类型,格式化输出
  • 基于单片机智能防触电装置的研究与设计
  • 机械行业工程设计资质乙级需要哪些人员
  • vivado改变波形图窗口颜色
  • 蓝桥杯练习系统(算法训练)ALGO-932 低阶行列式计算
  • 四川古力未来科技抖音小店安全靠谱,购物新体验
  • 深入理解Seata:分布式事务的解决方案
  • 【TC8】如何测试IOP中PHY芯片的Llink-up time
  • java大学城水电管理系统源码(springboot)
  • LAMP源码编译安装——CentOS7
  • oracle 还原被覆盖的视图
  • go语言同一包中的同一变量实现不同平台设置不同的默认值 //go:build 编译语法使用示例
  • 校园周边美食探索及分享平台,基于 SpringBoot+Vue+MySQL 开发的前后端分离的校园周边美食探索及分享平台设计实现
  • Discourse 编辑没有办法显示更多的 JS 错误
  • CSS实现一个雨滴滑落效果
  • vue2+echarts地图下钻+地图遮盖物散点
  • 关于C++的特殊类定制
  • Linux备份脚本
  • 【Unity】实现轮盘抽奖
  • 面下对象之overload与override
  • 大数据之Hive函数大全
  • 宝塔下应该用 Memcached 还是 Redis?
  • 恢复视频3个攻略:从不同情况下的恢复方法到实践!
  • 从git上拉取项目进行操作