首页 > 其他分享 >P3712 少女与战车

P3712 少女与战车

时间:2024-02-21 17:47:06浏览次数:19  
标签:少女 right log 复杂度 战车 P3712 mathcal 散块 left

我永远喜欢数据结构。

P5356 由乃打扑克加强版。看了神仙 @5k_sync_closer 的题解发现 \(len\le 10\) 可以忽略,是不是爆标了!5k 好闪,拜谢 5k!

果然根号数据结构照样可爱。

题目传送门

  • 给出 \(n\) 个点的有根树,定义一个点的深度为它到根简单路径上的边权和。有 \(m\) 次操作,每次询问子树内第 \(k\) 小的深度,或是讲某条边权值加 \(k\)。

  • \(n,m\le 10^5\)。

  • \(\text{3 s / 500 MB}\)。

设值域为 \(V\)。默认 \(\mathcal{O}(\log n)=\mathcal{O}(|V|)\)。

首先将子树拍平成 \(dfn\) 序,则问题就是区间加、查区间 \(k\) 小值。考虑分块,设块长为 \(B\)。

对于整块,维护初始数组 \(a\)、加标记 \(tag\) 以及排序后的数组 \(c\)。记 \(i\) 所在块为 \(bel_i\),我们要实时维护 \(a_i+tag_{bel_i}\) 为 \(i\) 这个位置的真实值,且对于一个整块的下标区间 \([l,r]\),\(c_l\sim c_r\) 为 \(a_l\sim a_r\) 排序后的结果。

修改时,整块修改标记、散块暴力重构。查询时,二分答案,然后求区间内有多少个小于等于它的数。

算法一

  • 修改时,暴力枚举整块标记加 \(k\),暴力枚举散块使用 std::stable_sort 重构散块。单次时间复杂度为 \(\mathcal{O}\left(B\log n+\dfrac{n}{B}\right)\)。

  • 查询的二分答案时,设二分的值为 \(mid\),散块暴力枚举,整块在排序的数组上二分最后一个真实值不超过 \(mid\) 的位置。然后块的起点到这个位置的数都要被统计。单次时间复杂度为 \(\mathcal{O}\left(\left(\dfrac{n}{B}\log n+B\right)\log n\right)\)。

  • 取 \(B=\mathcal{O}\left(\sqrt{n\log n}\right)\) 时,时间复杂度为 \(\mathcal{O}\left(n+m\sqrt{n\log n}\log n\right)\)。无法接受。

  • 空间复杂度为 \(\mathcal{O}(n)\)。

算法二

  • 修改时,整块仍然暴力标记加 \(k\)。考虑将散块的 \(c\) 数组对应的区间 \([l,r]\) 分成两个子序列:一个子序列内的原数下标不在本次修改的区间内,另一个则在。对于这两个子序列而言,它们都是单调非降的。可以归并排序。这样一来,单次时间复杂度变为 \(\mathcal{O}\left(B+\dfrac{n}{B}\right)\)。

  • 二分答案时,对于散块仍然采用类似的方式归并成一个长度为 \(\mathcal{O}(B)\) 的有序数组。不需要暴力枚举,直接在数组上二分。整块查询方式不变。这样查询时间复杂度为 \(\mathcal{O}\left(\left(\dfrac{n}{B}\log n+\log B\right)\log n\right)\)。

  • 取 \(B=\mathcal{O}\left(\sqrt{n}\log n\right)\) 时,时间复杂度为 \(\mathcal{O}\left(n+m\sqrt{n}\log n\right)\) 可以接受。

  • 空间复杂度为 \(\mathcal{O}(n)\)。

  • AC 记录

  • AC 代码

更多算法

P5356 题解区提到了时间复杂度 \(\mathcal{O}\left(n+m\sqrt{n\log n}\right)\)、\(\mathcal{O}\left(n+m\sqrt{n}\right)\)(好像有,可能是我看错了)的做法,空间复杂度不清楚。膜拜 DS 大神们,我这个数据结构萌新爬了。

标签:少女,right,log,复杂度,战车,P3712,mathcal,散块,left
From: https://www.cnblogs.com/MnZnOIerLzy/p/18025831

相关文章

  • 绝对虚无少女!
    背离的生命把我囚禁了,思考的界限我无法打破。逻辑的连锁在那阻断了,丝线终究没能伸进虚无。时间的锁链绞杀我的灵魂,卑屈的看着那一切的消逝。连痛苦的内心都是祂赋予,我始终是彼端某物的玩物。意识和物质终究是个谎言,「里面」是永恒的狭隘啊。吃掉苹果。把香蕉贴在墙上。......
  • 魔法少女LJJ 题解
    魔法少女LJJ题解这题纯属就是迷惑题。。为什么这么说?注意数据范围:对100%的数据\(0\leqm\leq400000\),\(c\leq7\)。\(c\leq7\)!!这意味着根本没有删除操作。就连样例也是错的。Solution这题的各种操作,用并查集+线段树合并完成。如果你是被题目数据范围晃飞的,建议......
  • Luogu P4924 [1007] 魔法少女小Scarlet
    [1007]魔法少女小Scarlet\(\color{cyan}link\)题目描述Scarlet最近学会了一个数组魔法,她会在\(n\timesn\)二维数组上将一个奇数阶方阵按照顺时针或者逆时针旋转\(90^\circ\)。首先,Scarlet会把\(1\)到\(n^2\)的正整数按照从左往右,从上至下的顺序填入初始的二维数组......
  • 洛谷题单指南-模拟和高精度-P4924 [1007] 魔法少女小Scarlet
    原题链接:https://www.luogu.com.cn/problem/P4924题意解读:根据题意,通过模拟法,枚举每一个要旋转的矩阵,执行旋转操作即可,关键点在于如何进行矩阵旋转。设定矩阵inta[][],临时矩阵intt[][]用于保存旋转后的矩阵,矩阵长度为len。先考虑要旋转的区域左上角是a[0][0]的情况,区域内每......
  • 玩转Redis:哨兵模式揭秘,带你骑上“哨兵战车”
    摘要:大家好!今天我们要聊一聊Redis的哨兵模式。说到Redis,相信很多人都对它的高性能、高可靠性留下了深刻的印象。而在这众多强大的功能中,哨兵模式无疑是一个备受关注的话题!哨兵模式在Redis中的作用就像是一支战车部队,能够时刻监控并保护我们的Redis集群。当集群中的某个主节点发生......
  • 门把手⭐魔法少女:新篇章!大混乱?鏖战微分方程~与Wronsky的日与夜
    什么,LaTeX炸了?都是cnblogs的锅!!!\[\newcommand{\d}{\mathrmd}\newcommand{\scr}{\mathscr}\newcommand{\bf}{\mathbf}\]忍不了,一拳把微分方程干爆!!!I.一些非线性微分方程的解法参数分离微分方程可写成\(p(x)\dx=q(y)\dy\)的方程可以在两侧同时积分,得到\(P(x)=Q(y)+C\)......
  • AI绘画:SD绘画实操过程-完美世界-火灵儿-少女制作教程(附资料及变现)
    资源介绍:大家好,我是小梦,最近一直研究AI绘画领域,总结了一些变现的方式,需要的可以来这里阅读下:AI绘画:无私分享我的AI绘画变现之路,普通人可实操可模仿都是自己经过实操,总结出来的,内容非常的干货,没有任何套路。不久前,耗费了半个月的时间给大家整理分享了StableDiffusion的全面教......
  • 魔法少女小圆短评
    魔法少女小圆小圆的大名早有耳闻只是由于梗小鬼的到处乱刷导致我对其印象不佳最近看了少歌mygo,对原创番产生了浓厚兴趣于是决定补一补魔圆评价不涉及剧透,只是一些感受很想把好作品分享给别人但是果然还是有AT-FIELD啊总结:二十一世纪最强原创动画,完全对得起神作称号......
  • [劳动光荣,拒绝偷菜]魔法少女武斗祭 1.62 汉化更名版
    我发现某些汉化组图片和文字汉化大量"引用"+不打招呼+不額外注明就发出所谓1.62汉化版我当时是这个1.62汉化的技术也就是他们原来那个会文字错误那个版是我的程序+解包器也就是我觉得我完全是这些人帮凶我有着不可推卸的责任!于是今天做了这个更名版希望大家劳动光荣,拒......
  • 少女歌剧短评
    《少女☆歌剧RevueStarlight》短评神作,这就是原创动画的魅力吗?可惜是补番,如果当时追了肯定体验更爽两天补完,体验极佳总体而言,这是一部注定小众而精美的作品,爱它的人觉得是神中神,对不上电波的人可能会看得一头雾水少歌包括诸多要素:校园、轻百、战斗、偶像……然而几个词是......