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

qoj14458. 调色滤镜

qoj14458. 调色滤镜

平面 \([1,10^9]\times[1,10^9]\) 上有 \(n\) 个点,点 \(i\) 位于 \((x,y)\),有颜色 \(c_i\in [0,9]\)

\(q\) 次操作,每次对平面上一个矩形范围内的点的颜色作用映射 \(f:[0,9]\rightarrow[0,9]\)

保证矩形两两之间要么包含要么不交

要求求出每个点在 \(q\) 次操作后的颜色。

\[n\le 5\times 10^4,q\le 2\times 10^5 \]


首先由于矩形之间两两不交,不难发现他们之间的包含构成了一个森林的结构。

我们加入第 \(q+1\) 操作,覆盖整个平面,\(f=x\rightarrow x\)。显然不影响答案。

那么这时就构成了一颗以 \(q+1\) 为根的树。

那么怎么建树呢?具体来说,我们扫描线。

在一个 set 中维护当前截面上的所有矩形的上下边界。

当我们遇到一个矩形 \(i\) 的左边界时,我们查询其上边界的后继,设其为矩形 \(j\) 的边 \(j'\)

  • 假如 \(j'\) 是一个上边界,那么 \(j\) 就是 \(i\) 的父亲。
  • 假如 \(j'\) 是一个下边界,那么 \(j\) 就是 \(i\) 的兄弟,意味着 \(j\) 的父亲是 \(i\) 的父亲。

类似地,当我们遇到一个点 \(i\),我们查询 \(y_i\) 的后继 \(j'\)

  • 假如它是 \(j\) 的上边界,那么点 \(i\) 位于矩形 \(j\) 内。
  • 假如它是 \(j\) 的下边界,那么点 \(i\) 位于矩阵 \(j\) 的父亲内。

假如一个点 \(i\) 位于矩形 \(j\) 内,说明有且仅有 \(j\) 的祖先对 \(i\) 产生影响。

我们对生成的整棵树进行 dfs,那么通过 dfs 到一个点时所有操作的映射复合,我们可以 \(O(1)\) 地确定答案。

矩形的 dfn 序不一定等于插入顺序,所以这实际上要求一个支持从中间插入删除的数据结构维护映射复合。那么线段树就可以完成这样的操作。

总时间复杂度 \(O(nd\log n+q\log n)\),其中 \(d=10\)


code

http://www.jsqmd.com/news/24953/

相关文章:

  • 第8天(中等题 不定长滑动窗口、哈希表)
  • P10259 [COCI 2023/2024 #5] Piratski kod
  • 巧用 using 作用域(IDisposable)的生命周期包装特性 实现前后置处理
  • 2025.10.27训练记录
  • 软考复习总结
  • ? #6
  • 鲜花:不会说明你有抑郁症3
  • 算法竞赛知识点速通手册
  • ROS1 go2 vlp16 局部避障--3 篇 - 教程
  • 25.10.28随笔NOIP模拟赛总结
  • 第二十八篇
  • P8269 [USACO22OPEN] Visits S
  • Luogu P13925 [POKATT 2024] 联合猫国 / The Paw-litical Game 题解 [ 蓝 ] [ 线性 DP ] [ 种类数观察 ]
  • 深入解析:【STM32项目开源】基于STM32的独居老人监护系统
  • CSP-S 41多校 9
  • 【25.10.28】模拟赛
  • CSP-S模拟41
  • Linux双中文编码笔记
  • C++类和对象(1) - 详解
  • 人工智能之编程基础 Python 入门:第二章 Python 的编辑器 VS Code
  • 2019 福建省队集训录
  • AIX multibos bootlist
  • 记录一次nginx能通但是请求一直不了的问题
  • 【嵌入式】PWM DAC的滤波器设计
  • 被称作遗憾之物 爬满了脊骨 又把控了痛楚 被称作无用之物 修筑了唯一的通路
  • neovim在windwos11下snack.nvim的问题
  • 完整教程:Java 集合 “List + Set”面试清单(含超通俗生活案例与深度理解)
  • 禁用 IPython 历史记录 history.sqlite
  • Luogu P7914 [CSP-S 2021] 括号序列 题解 [ 蓝 ] [ 区间 DP ] [ 前缀和优化 ] [ 调试技巧 ]
  • 扩展BaseMapper类 - 详解