首页 > 其他分享 >「杂题乱写」Ynoi

「杂题乱写」Ynoi

时间:2023-11-03 21:22:18浏览次数:31  
标签:right 标记 乱写 杂题 sum Ynoi 整块 散块 left

「杂题乱写」Ynoi

点击查看目录

目录

由于 Ynoi 道道卡常且常数受一些常量影响较大,为方便表示复杂度,本文记阈值为 \(B\),块长为 \(L\),块数为 \(C\) . 三者都比较接近 \(\sqrt{n}\) 但是需要根据具体常数调整 .

P7710 [Ynoi2077] stdmxeypz

考虑将问题转化到 dfn 序列上,子树修改转化为区间修改,考虑分块维护 . 散块是容易直接处理的,如何处理整块?

感觉很可以根号分值!设阈值为 \(B\),对于 \(x>B\),修改的点的数量不超过 \(\frac{n}{B}\) 但是并不方便直接暴力修改,考虑开一个标记数组 \(g_{i, j}\) 表示 \(i\) 的子树内与 \(i\) 距离为 \(j\) 的点的标记;对于 \(x\le B\),可以直接打上一个标记 \(f_{i, j}\) 表示该块内所有 \(dep_u\equiv j\bmod(i)\) 的点 \(u\) 的标记 . 查询时把所在块的标记跑一边加上 .

注意到根号分值的阈值不必和块长一样,否则不会 TLE 会 MLE .

预处理 \(O\left(n\right)\),修改 \(O\left(L + \min\left(C, \dfrac{n}{B}\right)\right)\),查询 \(O\left(B + C\right)\) .

Luogu Submission .

P5356 [Ynoi2017] 由乃打扑克

你发现 k-th 很难,但是 rank 好像更可做一点,于是二分,维护区间 rank .

不难想到对每个块排序,区间修改整块打标记,散块直接重构;区间 rank 整块 upper_bound,散块暴力跑一遍 .

但是感觉这个散块直接重构直接重构太耗时了,怎么办呢?发现一个块内没更改的部分是有序的,更改的部分也是有序的,那么考虑归并排序就把复杂度由 \(O(L\log L)\) 降到了 \(O(L)\) .

预处理 \(O\left(n\log L\right)\),修改 \(O\left(L + C\right)\),查询 \(O\left(\log V\left(L + C\log L\right)\right)\)(内层 \(\log\) 来源于常数较小的 upper_bound) .

Luogu Submission .

P5309 [Ynoi2011] 初始化

和 stdmxeypz 有点像吧!为啥我不是先做的这个题?

依旧是根号分值,不过发现「保证 \(y\le x\)」,意味着修改是全局修改,不用对每个块都开一个标记数组 .

但是区间查询跑完所有标记是 \(O(B^2)\) 的,非常慢,于是考虑维护标记标记的前后缀和,遍历标记时只用枚举 \(i\) 不必枚举 \(j\) .

卡常卡不动了,rk3,呜呜 .

可以直接把 \(B\) 设为 \(L\) .

预处理 \(O\left(n\right)\),修改 \(O\left(\min\left(B, \dfrac{n}{B}\right)\right)\),查询 \(O\left(L + C\right)\) .

Luogu Submission .

P5046 [Ynoi2019 模拟赛] Yuno loves sqrt technology I

最卡常但是也是最喜欢的一个题!不过两者没有联系 .

首先从拆贡献入手:整块与整块之间,散块和整块之间,两个散块之间,散块和自己 .

思考过程太抽象了我还是不引导性讲解了 .

设 \(pre_{i}\) 为 \(i\) 所在块的左端点到它的逆序对个数,\(suf_{i}\) 右端点,这样不用 BIT,\(sum_{i, j}\) 表示块 \(i\sim j\) 的逆序对数量 . 然后是一个对于卡常相当重要的 \(f_{i, j}\) 表示 \(1\sim j\) 中的所有数与块 \(i\) 之间的逆序对数。(换成这个写法才过的,拜谢 @crimson000

预处理时,对每个块内排一遍序,因为归并排序可以求逆序对数,这样方便归并 . \(pre\) 和 \(suf\) 是容易处理的,\(f\) 考虑在对整个数列排序后进行归并排序 . \(sum\) 可以直接拼起来,即 \(sum_{i, j - 1} + sum_{i + 1, j} - sum_{i + 1, j - 1}\) 加上 \(i\) 和 \(j\) 之间的贡献,可以用 \(f\) 求 .

回到查询:

  • 整块与整块之间:\(sum\) 已经预处理出来了 .
  • 散块和整块之间:利用 \(f\) 数组差分求出 .
  • 两个散块之间:归并排序 .
  • 散块和自己:\(pre\) 和 \(suf\),不过左右端点在同一个块时要归并一下去除多余贡献 .

虽然分讨但是没有太复杂的细节,每个地方都有一定趣味,更趣味的是题意非常典 .

预处理 \(O\left(n\log L + Cn + C^2 \right)\),查询 \(O\left(L + C\right)\) .

Luogu Submission .

标签:right,标记,乱写,杂题,sum,Ynoi,整块,散块,left
From: https://www.cnblogs.com/K8He/p/Ynoi.html

相关文章

  • 杂题练习
    stl众所周知一般来说,随着社会经济的不断发展,stl越来越成为一款强大的工具。著名cp选手i_wish_a_gilrfriend曾说过:stl,启动!无敌山鸡王说:我在学习了算法近一年后才了解stl,这是我的巨大损失。五星上将麦克阿瑟曾说过,如果上帝不让我使用stl,那我将用枪指向上帝。下面是练习使用stl......
  • 「Note」CF 杂题集 6
    前言难度:CF2600-2700(有一道是2500)别问我为啥没有1到5。\(\color{blueviolet}{CF1473F}\)此题是坏题,他卡你空间。每一个元素有选或不选两种状态,并且有依赖项,元素的贡献有正负,数据范围不大,可以自然联系到最大权闭合子图,采用最小割模型。建模方式如下:对于一个正权点\(u......
  • P5070 [Ynoi2015] 即便看不到未来
    题意给定一个序列,静态区间查询区间的长度为\(1\to10\)的极长值域连续段个数。Sol考虑离线下来跑扫描线。枚举右端点,维护每个左端点的答案。不难想到,\(i\)对\(lst[i]\)是没有贡献的,考虑右端点为\(i-1\),若此时的\(l\lelst[i]\)。\(i\)不作贡献。所以我们把值域上......
  • 容斥与简单反演乱写
    #defineTBDToBeDone......
  • 【杂题乱写】AtCoder-ARC114
    AtCoder-ARC114_ANotcoprime\(50\)内的质数只有\(15\)个,可能的答案也就只有\(2^{15}\)个,直接枚举。提交记录:Submission-AtCoderAtCoder-ARC114_BSpecialSubsets就是\(i\)与\(f_i\)连边,每个连通块都是基环树,一定能剥叶子变成环,所以答案就是连通块非空子集个数。......
  • DP技巧与DP杂题
    DP常用技巧增加维数交换答案与状态可行解转最优解删掉本质相同的状态对部分状态\(dp\)遇到转移顺序的困难,考虑记忆化搜索遇到转移细节过多的问题,考虑从\(i\rightarrowi+1\)而不是\(i-1\rightarrowi\)考虑状态时,先把需要记下来的都记一遍,再考虑优化DP杂题CF83......
  • P6109 [Ynoi2009] rprmq1 题解-猫树+Segment Tree Beats
    20231025P6109[Ynoi2009]rprmq1题解-猫树+SegmentTreeBeats不愧是学长出的题。。。让我更深刻地理解了猫树。Statement传送门有一个\(n\timesn\)的矩阵\(a\),初始全是\(0\),有\(m\)次修改操作和\(q\)次查询操作,先进行所有修改操作,然后进行所有查询操作。一次修......
  • 信息安全杂题选讲
          ......
  • 软件工厂杂题选讲
                                ......
  • 杂题记 2
    写在前面:题目难度高,大部分题个人认为的实际难度不低于洛谷的紫题。\(\color{lightblue}{\texttt{CF1848F.VikaandWiki}}\)\(\text{link}\)。提示:考虑第\(i\)次会变成啥。$\texttt{solution}$下边设\(a_k\)为实际中的\(a_{k\bmodn}\)。首先根据样例猜测一定有解。......