题意

一个序列,Q 次询问一个区间 [l,r],进行 k 轮冒泡后,求子区间 [x,y] 的和。(N<=1e6,Q<=5e5)

冒泡定义为:

for i = 1 to n-1:
if a[i] > a[i + 1]:
swap(a[i], a[i + 1])

考场想法:

经典转 01。

11011100011100011111
1011100011100011111+1
011100011100011111+11
01100011100011111+111
0100011100011111+1111
000011100011111+11111
00001100011111+111111
0000100011111+1111111
000000011111+11111111
00000001111+111111111
0000000111+1111111111
000000011+11111111111
00000001+111111111111

考场上傻乎乎地考虑求后缀和然后差分,结果调不出来。

题解

被套路毁了!转牛魔 01!

19260817
12608179
12061789
10216789
01126789
01126789
01126789
01126789

看前缀,其实就是 [l,l+x-1+k] 的前 x 小。可持久化权值线段树搞定。

posted on   Zaunese  阅读(67)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 【杂谈】分布式事务——高大上的无用知识?
历史上的今天:
2023-10-21 2023.8.17-9.17模拟总结



点击右上角即可分享
微信分享提示