首页 > 其他分享 >Ynoi

Ynoi

时间:2024-01-13 18:55:25浏览次数:16  
标签:10 le log 离线 Ynoi sqrt rightarrow

P4688 [Ynoi2016] 掉进兔子洞

序列,静态,求三个区间的可重集的交的大小,离线,\(n,Q\le 10^5\),3s,500MB

缺乏性质 \(\rightarrow\) bitset

静态区间 \(\rightarrow\) 莫队化为单点改

bitset 支持取交,\(x\) 重复 \(cnt_x\) 次即可,空间 \(O(n^2/w)\),时间 \(O(n\sqrt n+{n^2\over w})\),分三次处理减小空间常数

P4690 [Ynoi2016] 镜中的昆虫

序列,区间赋值,区间数颜色,离线,\(n,Q\le 10^5\),1s,64MB

数颜色 \(\rightarrow\) 维护 pre

珂朵莉树 \(\rightarrow\) pre 只改变 \(O(Q)\) 次

转化:单点改 pre,查询 \([l,r]\) 内 pre 小于 \(l\) 的数量

  1. 树套树,在线,空间 \(O(n\log n)\),时间 \(O(n\log^2 n)\),过不去
  2. CDQ,离线,空间 \(O(n)\),时间 \(O(n\log^2 n)\),正解

P5064 [Ynoi2014] 等这场战争结束之后

图,动态加边,回退到某历史版本,查询某个连通块中权值第 \(k\) 小,离线。\(n,Q\le 10^5\),500ms,20MB

回退历史版本 & 可离线 \(\rightarrow\) dfs 操作树转为撤销

第 \(k\) 小 & 可合并 \(\rightarrow\) 值域分块 或 bitset

  1. 值域分块

    值域每 \(B\) 个分成一块,按块离线,记录每个连通块点数。

    • 合并、撤销连通块:暴力 \(O({n^2\over B}\log n)\),注意到并查集操作对每个值域块相同,预处理可 \(O(n^2/B)\)。
    • 查询连通块第 \(k\) 小:
      • 枚举值域内每个数判断,\(O(nB\log n)\)。
      • 每个并查集开桶,\(O(nB)\),空间 \(O(nB)\),\(B\) 需要开很小。
      • 使用链表维护,可以是有序链表归并(难写)或每次把链表所有数拿出来 nth_element,\(O(nB)\)。

    总时间复杂度 \(O(n\sqrt{n\log n})\) 或 \(O(n\sqrt{n})\),空间线性。

  2. bitset 压位

    查询 bitset 可直接 \(O(n/w)\)。

    不能开 \(n\) 个 bitset \(\rightarrow\) 对于点数小于 \(n/w\) 的连通块用链表维护,同时至多存在 \(w\) 个 bitset,空间线性。

    链表查询,合并同上。链表并入 bitset 可启发式暴力。

    总时间复杂度 \(O(n^2/w)\),空间线性。

P5354 [Ynoi2017] 由乃的 OJ

树,每个点的效果为 \(\operatorname{and}/\operatorname{or}/\operatorname{xor}\) 一个数,单点改,询问 \([0,z]\) 中所有数经过路径操作得到的最大值,无需离线。\(n,Q\le 10^5\),值域 \(2^{64}\),250ms,128MB。

二进制操作 \(\rightarrow\) 拆位

二进制复合 \(\rightarrow\) 压位处理复合矩阵,同时处理 \(k\) 位的复合,\(O(k)\rightarrow O(1)\)

总时间复杂度 \(O(n\log^2n+nk)\)

P6109 [Ynoi2009] rprmq1

二维平面,先修改后查询,矩形加,矩形求 \(\max\)。\(n\le 5\times 10^4,Q\le 5\times 10^5\),4s,512MB。

矩阵 \(\rightarrow\) 将一维时间化,离线问题转为在线问题

修改,询问在一段时间区间生效 \(\rightarrow\) 猫树转为对一段后缀有效(即修改后无需撤销,询问等价于查历史信息和)

区间加历史最值即可,时间复杂度 \(O(n\log^2n+Q\log n)\)

P6780 [Ynoi2009] pmrllcsrms

序列,单点改,求区间长度不超过 \(c\) 的最大字段和,其中 \(c\) 为全局定值,无需离线。\(n,Q\le 10^6\),6s,512MB。

长度不超过 \(c\) \(\rightarrow\) 每 \(c\) 个位置分一块,询问分为每块内全部或两相邻块之间

相邻块后前缀长度和不超过 \(c\) \(\rightarrow\) 直角三角形模式,分成一个矩形和两个小直角三角形

时间复杂度 \(O(n\log n)\)

P6783 [Ynoi2008] rrusq

二维平面,\(n\) 个带权点,\(m\) 个矩形,\(Q\) 次询问区间 \([l,r]\) 内的矩形并中点权之和,离线。\(n,m\le 10^5,Q\le 10^6\),4s,128MB。

静态区间,难以增量 \(\rightarrow\) 扫右维护左

点出现在区间并中 \(\rightarrow\) 扫右端点,维护每个点最后出现时间

KD-Tree,每次暴力收回子树内的出现时间 tag 即可

询问使用 \(O(1)-O(\sqrt n)\) 的数组维护

时间复杂度 \(O(n\sqrt Q+Q\sqrt n)\)

P7446 [Ynoi2007] rfplca

序列,区间减,询问 \(fa\) 数组形成的树上某两个点的 LCA,无需离线。\(n,Q\le 4\times 10^5\),保证 \(fa_i<i\),2.5s,64MB。

形式奇怪 \(\rightarrow\) 考虑分块

询问 LCA \(\rightarrow\) 不断跳 \(fa\)

不断进行重复操作 \(\rightarrow\) 记录每个点跳出块后的第一个位置

散块直接重构,整块 \(\sqrt n\) 次后全部出块,直接打 tag,询问 trivial,时间复杂度 \(O(n\sqrt n)\)

P7447 [Ynoi2007] rgxsxrs

序列,区间大于 \(x\) 的数减 \(x\),区间和与最小最大值,无需离线。\(n,Q\le 5\times 10^5,a_i\le 10^9\),6s,64MB。

和值域有关 \(\rightarrow\) 值域倍增分块(?)

  1. 块大于 \(x\),打标记或降块,降块至多 \(\log V\) 次,产生 \(\log n\) 的复杂度后必然降块
  2. 块等于 \(x\),暴力找到所有需要减小的 \(a_i\),单个 \(a_i\) 同块内至多减小 \(b\) 次(\(b\) 为倍增底数)

时间复杂度 \(O(nb\log_bV\log n)\)。空间底层分块后线性。

P7722 [Ynoi2007] tmpq

三个序列 \(a,b,c\),单点改 \(a\),询问有几个 \(i<j<k\le r\) 满足 \(b_{a_i}=a_j=c_{a_k}\),离线。\(n\le 2\times 10^5,Q\le 5\times 10^4\),4s,64MB。

阴间条件 \(\rightarrow\) 单点改 \(a,b,c\),询问 \(b_i=a_j=c_k\)

颜色相关 \(\rightarrow\) 次数大小分治,小者暴力,大者维护

小颜色暴力重新 dp,\(O(Q\sqrt n)\) 次区间加,\(O(Q)\) 次单点查

大颜色维护动态 dp,分块维护块内前缀 dp 结果及前缀块 dp 结果,单点改 \(O(\sqrt n)\),查询 前缀块+块内前缀=\(O(1)\)

总时间复杂度 \(O(Q\sqrt n)\),空间离线做到线性

P7880 [Ynoi2006] rldcot

树,边带权(可以为负),静态,\(Q\) 次询问 \([l,r]\) 内的点对有几种不同的 \(\operatorname{lca}\) 带权深度,离线。注意不保证 \(fa_i\le i\)。\(n\le 10^5,Q\le 5\times 10^5\),500ms,512MB。

合法子区间计数 \(\rightarrow\) 考虑有用点对

树上有用点对 \(\rightarrow\) 重剖,由轻子树合并上来,有用点对 \(O(n\log n)\) 对

问题转化为给定 \(O(n\log n)\) 对带权点对,求区间内存在哪些权值。

静态区间问题 \(\rightarrow\) 扫右维护左,转为在线问题

给前缀放上一个颜色,求单点颜色数,树状数组即可。时间复杂度 \(O(n\log^2 n+Q\log n)\)。

P7881 [Ynoi2006] rmpq

二维平面,抽象信息类,半平面乘,单点查,强制在线。\(Q\le 10^5,x_i,y_i\le 10^9\),操作次数 \(2\times 10^7\),2s,512MB。

无法 KD-Tree(值域过大且无法离线)。

很想离线(?)\(\rightarrow\) 根号重构。

问题变成预处理 \(B\) 次修改后每个位置的答案。

发现易于用 \(O(k^2)\) 的时间合并两个大小为 \(k\) 的子问题,所以递归两个子问题就可以做到 \(O(B^2)\) 处理。

总时间复杂度 \(O(nB+{n^2\over B})=O(n\sqrt n)\)。

标签:10,le,log,离线,Ynoi,sqrt,rightarrow
From: https://www.cnblogs.com/Charlie-Vinnie/p/17962768

相关文章

  • 洛谷 P5311 [Ynoi2011] 成都七中
    洛谷传送门转化一下题意,变成求\(x\)在只经过编号\(\in[l,r]\)的点,能走到多少种颜色。考虑建出点分树。一个结论是原树上的一个连通块,一定存在一个点,使得它在点分树上的子树完全包含这个连通块的所有点。证明考虑点分治的过程,一个连通块如果没被其中一个点剖开就一定在同一......
  • P9994 [Ynoi Easy Round 2024] TEST_132 题解
    题解怎么都是用暴力日过去的啊。思路考虑根号分治,设阈值为\(B\)。对于第二维出现次数超过\(B\)的,我们可以在修改时暴力更改,这部分复杂度为\(O(\frac{nm}{B})\)。对于第二维出现次数小于\(B\)的,我们可以在修改是打标记,查询时遍历一遍,这部分的复杂度为\(O(mb)\)。大多数......
  • P9995 [Ynoi2000] rspcn 题解
    思路比较典的ODT题目。发现排序是一个非常有性质的操作。它对区间的更改与颜色段均摊差不多。那么我们可以想到用ODT来维护这一整个序列。具体的,区间排序操作可以用ODT维护每次排序产生的段,每段用线段树维护排序后的结果。每次修改就可以进行线段树的分裂与合并。如......
  • P9991 [Ynoi Easy Round 2023] TEST_107 题解
    思路题目即要求删除区间中的一个或多个颜色。考虑假如枚举删除颜色\(k\)。那么在\(l,r\)中的答案为:\[\max_{i=1}^{m+1}a_i-a_{i-1}\]其中\(a_i\)为颜色\(k\)在\(l\simr\)中的出现位置,\(a_{0}=l,a_{m+1}=r\)。可以分类讨论。答案为\(a_1-l\),那么只需要维护\(......
  • 洛谷 P9058 [Ynoi2004] rpmtdq
    洛谷传送门类比P9062[Ynoi2002]AdaptiveHsearch&Lsearch处理区间最近点对的思路,尝试只保留可能有贡献的点对。处理树上路径容易想到点分治。设点\(u\)到分治中心的距离为\(a_u\)。我们有\(\text{dis}(u,v)\lea_u+a_v\)。考虑一个点对\((u,v)\)什么时候一定没......
  • 题解 P9993【[Ynoi Easy Round 2024] TEST_133】
    就硬把线段树3和数列分块入门2揉到一起出。维护原数组\(a\)及其历史最大值\(hist\),对每个块,维护块内\(a\)升序排序后结果\(p\)、块内\(a\)升序排序后历史最大值前缀和\(prehist\)、块加标记\(add\)、块历史和加标记\(histadd\)。下传标记和区间修改操作仿照线......
  • [Ynoi2007]rfplca/[CF1491H] Yuezheng Ling and Dynamic Tree
    题目描述给定一棵大小为\(n\)的\(1\)为根节点的树,树用如下方式给出:输入\(a_2,a_3,\dots,a_n\),保证\(1\leqa_i<i\),将\(a_i\)与\(i\)连边形成一棵树。接下来有\(m\)次操作,操作有两种:1lrx令\(a_i=\max(a_i-x,1)(l\leqi\leqr)\)。2uv查询在当前的\(a\)......
  • [Ynoi2004] rpmtdq 题解
    人生第一发\(Ynoi\)的题,写一篇题解庆祝一下传送门我们可以发现,对于二元组\((x,y)\),若存在一个\(dist(i,j)\ledist(x,y),x<i<j<y\)那么答案肯定不是二元组\((x,y)\)我们可以考虑把这些肯定不是的点剔除掉考虑怎么找,我们可以先点分治,求出每个点......
  • [Ynoi2005] qwq
    原问题比较类似\(\text{ZJOI2020}\)序列,可以划归为一个线性规划的形式,考虑将线性规划对偶,不难发现等价于求一个序列\(b\),使得对于任意\(1\leqslantl\leqslantr\leqslantn,r-l+1\leqslantm\)均满足\(\sum_{i=l}^{r}b_{i}\leqslant1\),最大化\(\sum_{i=1}^{n}a_{i}b_{i}......
  • P5048 [Ynoi2019 模拟赛] 题解
    题意给定\(n\)个数,有\(m\)个询问,每个询问给定\(l\)和\(r\),求出区间\(l\)到\(r\)中的最小众数出现次数,强制在线。数据范围:\(n\le500000\),空间限制:\(62.5MB\)。思路这道题的弱化版是蒲公英,这道题加强的地方在于数据范围。正常的分块求区间众数的空间复杂度是\(O(n......