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

洛谷 P6578

洛谷 P6578

将小于等于 \(x\) 的看作 \(1\),大于 \(x\) 的看作 \(0\),相当于如果有一个长度为 \(k\) 的极长 \(1\) 子串,有 \(k(k + 1)/2\) 的贡献。

先考虑没有修改的情况,把修改按 \(x\) 从小到达排序,直接用线段树维护答案即可。

有了修改不太好做了,考虑分块。对于每个整块,实际只有 \(O(B)\)\(01\) 序列。对于每个块只关心当只有这个块时的贡献和左右两端的极长 "1" 段的长度,维护这些信息,拼上散块是很好合并的。

如何维护呢?其实三个信息只有第一个比较困难,我们从全 \(0\) 开始,一个一个把数变成 \(1\),相当于合并相邻两段,对于每一段在开头标记结尾的位置,结尾标记开头的位置即可 \(O(1)\) 合并。

修改直接暴力重构整个块即可。

查询时,需要找到 \(x\) 在每个块中对应哪种 \(01\) 序列,需要二分一下。

所以总时间复杂度为 \(O(nB + \frac{n^2}{B} \log B)\),总时间复杂度是带了半个 \(\log\), 可以通过根号重构去掉 ,但可能更慢。

因为要考虑常数,块长和理论最佳有差距,实测取 \(B = 600 \sim 700\) 比较合适。

似乎是第一个几乎独立想出来的黑题。

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

相关文章:

  • Client Requirements Customization
  • 元学习框架下的终身推理能力动态调整
  • 基于LSTM的剩余寿命预测附Matlab代码
  • AI上下文工程解密:提示工程架构师的终极指南
  • weixin209基于微信小程序投票评选系统的设计与实现ssm(源码)_kaic
  • 完整教程:OpenCV(二十):位运算
  • 基于区间值模糊综合评价的生鲜猪肉供应链安全风险评价附Matlab代码
  • Python 字符串
  • Python3 列表详解
  • 提示工程架构师性能建模研究:实用技巧汇总
  • STM32 NAND Flash:控制器实战指南
  • DeepSeek和豆包可以广告投流吗? - 品牌2025
  • Linux操作系统学习,Ubuntu操作系统
  • 寒假学习(14)(HAL库5)
  • 第七十八篇-CentOS-7+安装cmake-3.24.3
  • 【claude】2026年推特最火的10个Claude Skills——Vibe Video的Remotion霸榜
  • 关于排障
  • SOAP 简介
  • vs2013工具库v120分享
  • 【claude】震惊!140万AI代理建立“甲壳教“,Claude成功驾驭火星车400米
  • Day37-20260205
  • TypeScript 测验
  • 跳过 MLOps:通过 Cloud Connect 使用 EIS 为自管理 Elasticsearch 提供托管云推理
  • 介绍 Elastic Workflows:用于 Elasticsearch 的原生自动化
  • Highcharts 配置说明
  • 三面阿里,四面京东,終拿offer!Java面经分享!
  • Maven 依赖管理
  • 【Linux命令大全】009.备份压缩之zip命令(实操篇)
  • Elasticsearch:使用 Base64 编码字符串加速向量摄取
  • Python 条件语句