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

CF1824D 题解

\(\sum\limits _ {i = l} ^ r \sum\limits _ {j = x} ^ y g(i,j)\)

离线询问,扫描线 \(j\),线段树维护 \(g(i)\),那么,转换为求解 \(x\) 时刻到 \(y\) 时刻,线段树区间 \([l,r]\) 的区间和的历史和。

考虑扫描线 \(j \leftarrow j + 1\) 时,会如何变化。

我们设一个辅助数组 \(s_i\) 表示一个位置是否是这个值的最后一次出现。那么 \(g(i)\) 相当于说 \(\ge i\)\(s = 1\) 的最小下标。

而我们 \(j\) 移动时,\(s_{pre_j}\leftarrow 0, s_j \leftarrow 1\)

然后,我们就要在 \(g\) 的这个线段树上对本身 \(pre_{a_j}\) 到上一个 \(1\) 的位置中这些值都变成 \(pre_{a_j}\) 的后一个 \(1\),并且把 \(j\) 的位置修改成 \(j\)

其中 \(pre_i\) 表示满足 \(a_j = i\) 的最大的 \(j\)

线段树要支持:区间推平,区间查询历史和。

维护一个向量 \(\begin {bmatrix} hsum, sum, len\end{bmatrix}\)

修改矩阵:

\[\begin{bmatrix}1 & 0 & 0\\0 & 0 & 0\\0 & v & 1\\\end{bmatrix} \]

更新历史和矩阵:

\[\begin{bmatrix}1 & 0 & 0\\1 & 1 & 0\\0 & 0 & 1\end{bmatrix} \]

我们需要查询当前某个数前面/后面第一个 \(s=1\) 的位置,那么我们需要维护下标集合,用一个 std::set 即可。

http://www.rkmt.cn/news/23274.html

相关文章:

  • CF1059 Codeforces Round 1059 (Div. 3) 游记
  • 10月17日记
  • aaaaaa
  • 思科关键漏洞警报:TACACS+认证缺陷可导致网络完全暴露
  • ysyx学习:移植rt-thread
  • 综合性题目
  • 实用指南:从入门到精通:Django的深度探索之旅
  • CF Global Round 29(#2147) 总结
  • 2025.10.16NOIP模拟
  • 2025年终极公众号排版神器排行榜 最新案例研究权威测评
  • 10.17 —— (VP) 2021icpc沈阳
  • uml
  • UpdateSourceTrigger和Mode的区别
  • 3DVG的当前面临的挑战和问题 - 教程
  • NOIP2020 T2
  • Alex-VGG3
  • 操作系统应用构建(十二)RustDesk 用户服务器搭建——东方仙盟筑基期
  • 10/17
  • NOIP2021 T2
  • 从零开始实现简易版Netty(九) MyNetty 实现池化内存的线程本地缓存
  • ubuntu 主机创建虚拟 ip,应对容器内部配置了宿主固定 ip,宿主迁移网络环境后容器报错
  • 2025权威报告:微信编辑器排版Top 10工具推荐(全链路解决方案)
  • 洛谷 P10149
  • ubuntu配置vsftpd
  • 时序数据库 Apache IoTDB 等你“打卡”!2025 OSCAR 开源产业大会完整版议程揭晓
  • 洛谷 P12865
  • ubuntu清理内存缓存
  • 单线程如何撑起百万连接?I/O多路复用:现代网络架构的基石
  • 10.17 CSP-S模拟33 改题记录
  • 包装类(基本数据类型对应的引用数据类型)