毒瘤数据结构题型
[Ynoi2013] 大学 & P3987 我永远喜欢珂朵莉
给一个长为 \(n\) 的非负整数序列 \(a\) ,支持以下两个操作:
1 l r x
:把区间 \([l,r]\) 中所有是 \(x\) 倍数的数 \(/x\)2 l r
:查询区间 \([l,r]\) 的和
本题强制在线。
\(1\le n,m\le 10^5, 0\le a_i\le 5\times 10^5, 1\le x\le 5\times 10^5\)
时间限制:\(1.5s\)
空间限制:\(512MB\)
模板
\(\color{blue}{\text{平衡树}}\)
洛谷P3369 【模板】普通平衡树
您需要写一种数据结构,支持以下操作:
- 插入 \(x\)
- 删除 \(x\) (若有多个 \(x\) ,则只删除1个)
- 查询 \(x\) 的排名 (排名定义为比当前数小的数的个数+1)
- 查询排名为 \(x\) 的数
- 求 \(x\) 的前驱 (前驱定义为小于 \(x\) ,且最大的数)
- 求 \(x\) 的后继 (后继定义为大于 \(x\) ,且最小的数)
数据范围 \(1\le n\le 10^5, |x|\le 10^7\)
时间限制 \(1.00\ s\)
空间限制 \(128\ MB\)
我的代码
洛谷P3391 【模板】文艺平衡树
您需要写一种数据结构,支持翻转一个区间 \([l,r]\) 。
数据范围 \(1\le n,m\le 10^5, 1\le l\le r\le n\)
时间限制 \(1.00\ s\)
空间限制 \(128\ MB\)
我的代码
\(\color{blue}{\text{珂朵莉树}}\)
CF896C Willem, Chtholly and Seniorious
请你写一种奇怪的数据结构,支持以下 4 种操作:
- \(l\ r\ x\):将 \([l,r]\) 区间所有数加上 \(x\)
- \(l\ r\ x\):将 \([l,r]\) 区间所有数改成 \(x\)
- \(l\ r\ x\):输出将 \([l,r]\) 区间从小到大排序后的第 \(x\) 个数是多少(即求区间第 \(x\) 小,保证 \(1\le x\le r-l+1\))
- \(l\ r\ x\ y\):输出 \([l,r]\) 区间每个数字的 \(x\) 次方的和模 \(y\) 的值(即 \(\sum_{i=l}^{r} a_i^x\))
这道题的输入格式比较特殊,需要选手通过 \(seed\) 自己生成输入数据。
数据范围 \(1\le n,m\le 10^5,0\le seed\le 10^9+7,1\le vmax\le 10^9\),\(vmax\)是随机数的上限。
时间限制 \(2.00\ s\)
空间限制 \(256\ MB\)
毒瘤题们
\(\color{red}{\text{毒瘤.分块}}\)
Ynoi2019模拟赛 Yuno loves sqrt technology I
Description
给定一个长度为 \(n\) 的排列,有 \(m\) 次询问,每次查询一个区间的逆序对数。
本题强制在线,每次查询的数要 \(xor\) 上 \(lastans\)。
数据范围 \(1\le n,m \le 10^5\)
时间限制 \(1.00\ s\)
空间限制 \(512\ MB\)
Solution
标签 分块,预处理
时间复杂度 \(O(n\sqrt{n})\)
定义几个数组:
\(pre[i]\) 表示 \(i\) 到其所在块的块首这段区间的逆序对数
\(suf[i]\) 表示 \(i\) 到其所在块的块尾这段区间的逆序对数
\(F[i][j]\) 表示块 \(i\) 到 \(j\) 这一整段区间的逆序对数
\(f[i][j]\) 表示 \(a_1,a_2,\dots , a_i\) 能与第 \(j\) 块的数字产生多少逆序对,注意这里不计算第 \(j\) 块内部数字和第 \(j\) 块数字的贡献。
计算方法的话,就是对于每个块都和所有数来一次归并。
那么 \(pre[i], suf[i]\) 可以用树状数组解决,这一段复杂度 \(O(nlogS)\) 。
\(F[i][j] = F[i][j - 1] + F[i + 1][j] - F[i + 1][j - 1] + (i 所在块和 j 所在块的贡献)\),这一段贡献可以用归并排序解决。
Ynoi2019模拟赛 Yuno loves sqrt technology III
给定一个长度为 \(n\) 的序列,有 \(m\) 次查询,每次查询一个区间的众数的出现次数。
本题强制在线,每次输入的数要 \(xor\) 上 \(lastans\) 。
数据范围 \(1\le n,m\le 5\times 10^5, 0\le a_i\le 10^9\)
时间限制 \(2.00\ s\)
空间限制 \(64\ MB\)
\(\color{red}{\text{莫队}}\)
洛谷P3674 小清新人渣的本愿
给定一个序列 \(a\) ,长度为 \(n\) ,有 \(m\) 次操作。有 \(3\) 种操作:
- 查询一个区间内是否可以选出两个数,它们的差为 \(x\);
- 查询一个区间内是否可以选出两个数,它们的和为 \(x\);
- 查询一个区间内是否可以选出两个数,它们的积为 \(x\)。
选出的这两个数可以是同一个位置上的数。
数据范围 令\(c\)为每次的\(x\)和\(a_i\)中的最大值,\(1\le n,m,c\le 10^5\)。
时间限制 \(3.00\ s\)
空间限制 \(128\ MB\)
\(\color{red}{\text{Fhq_treap}}\)
Ynoi2014Day2T2 人人本着正义之名
给定一个长度为 \(n\) 的 \(01\) 序列 \(a\) ,有 \(m\) 个操作:
\(1\ l\ r\): 把区间 \([l,r]\) 的数变成 \(0\) 。
\(2\ l\ r\): 把区间 \([l,r]\) 的数变成 \(1\) 。
\(3\ l\ r\): \([l,r-1]\) 内所有数 \(a_i\) ,变为 \(a_i\ or\ a_{i+1}\) ,这些数同时进行该操作。
\(4\ l\ r\): \([l+1,r]\) 内所有数 \(a_i\) ,变为 \(a_i\ or\ a_{i-1}\) ,这些数同时进行该操作。
\(5\ l\ r\): \([l,r-1]\) 内所有数 \(a_i\) ,变为 \(a_i\ and\ a_{i+1}\) ,这些数同时进行该操作。
\(6\ l\ r\): \([l+1,r]\) 内所有数 \(a_i\) ,变为 \(a_i\ and\ a_{i-1}\) ,这些数同时进行该操作。
\(7\ l\ r\): 查询区间 \([l,r]\) 的和。
数据范围 \(1\le n,m\le 10^6, 0\le a_i\le 1\) 。 \(30\%\) 的数据保证操作和序列均随机生成。
时间限制 \(5.00\ s\)
空间限制 \(128\ MB\)
\(\color{red}{\text{线段树}}\)
CF446C DZY Loves Fibonacci Numbers
已知斐波那契数列 \(fib[1] = 1, fib[2] = 1\) ,\(fib[n] = fib[n-1] + fib[n-2](n>2)\) 。
给定一个长度为 \(n\) 的序列 \(a\) ,\(m\) 次操作,有 \(2\) 种操作类型:
- 区间加 \([l,r]\) ,即 \(a_i+=fib[i-l+1](l\le i\le r)\) 。
- 求区间 \([l,r]\) 的和。
数据范围 \(1\le n,m\le 300000, 1\le a_i\le 10^9,1\le l\le r\le n\)
时间限制 \(4.00\ s\)
空间限制 \(256\ MB\)
我的代码
\(\color{red}{\text{平衡树 & 线段树}}\)
Ynoi2016Day1T3 镜中的昆虫
维护一个长为 \(n\) 的序列 \(a\) ,有 \(m\) 次操作,两种类型:
- 将区间 \([l,r]\) 的值修改为 \(x\)
- 询问区间 \([l,r]\) 出现了多少种不同的数,也就是说同一个数出现多次只算一个
数据范围 \(1\le n,m\le 10^5, 1\le a_i\le 10^9\)
时间限制 \(1.00\ s\)
空间限制 \(64\ MB\)
Ynoi2019模拟赛 Yuno loves sqrt technology II
Description
给定一个长度为 \(n\) 的排列,有 \(m\) 次查询,每次查询一个区间的逆序对数。
数据范围 \(1\le n,m\le 10^5, 1 \le a_i\le 10^9\)
时间限制 \(300\ ms\)
空间限制 \(32\ MB\)
Solution
莫队二次离线板子。复杂度\(O(n\sqrt{n})\)。
出题人:我们已经有了低于 \(n^{1.5}\) 的做法
Ynoi2018Day1T1 五彩斑斓的世界
给定一个长为 \(n\) 的序列 \(a\) ,有 \(m\) 次操作,操作有两种:
- 把区间 \([l,r]\) 中大于 \(x\) 的数减去 \(x\)
- 查询区间 \([l,r]\) 中 \(x\) 的出现次数。
数据范围 \(1\le n,m,x,a_i\le 5\times 10^5, 1\le l\le r\le n\)
时间限制 \(12.00\ s\)
空间限制 \(64\ MB\)
Ynoi2018Day1T3 天降之物
给定一个长为 \(n\) 的序列 \(a\) ,有 \(m\) 个操作,操作有两种:
- 把序列中所有值为 \(x\) 的数值变为 \(y\)
- 找出一个位置 \(i\) 满足 \(a_i=x\),找出一个位置 \(j\) 满足 \(a_j=y\),使得 \(|i-j|\) 最小,并输出 \(|i-j|\)
本题强制在线,每次输入的 \(opt,x,y\) 中 \(x\) 和 \(y\) 要 \(xor\) 上 \(lastans\) 。
数据范围 所有数都在 \([0,10^5]\) 内,每次操作的值不超过 \(n\)
时间限制 \(500\ ms\)
空间限制 \(256\ MB\)
Ynoi2018Day1T3 未来日记
给定一个长为 \(n\) 的序列 \(a\) ,有 \(m\) 次操作:
- 把区间 \([l,r]\) 内所有的 \(x\) 变成 \(y\)
- 查询区间 \([l,r]\) 内第 \(k\) 小值
数据范围 \(1\le n,m,a_i\le 10^5\)
时间限制 \(2.00\ s\)
空间限制 \(512\ MB\)
Ynoi2018Day2T2 GOSICK
给定一个序列 \(a\) ,每次询问给一个区间 \([l,r]\) ,查询 \(l\le i,j\le r\) 且 \(a_i\) 是 \(a_j\) 倍数的二元组 \((i,j)\) 的个数。
数据范围 \(1\le n,m,a_i\le 5\times 10^5, 1\le l\le r\le n\)
时间限制 \(5.00\ s\)
空间限制 \(512\ MB\)
Ynoi2018Day2T3 駄作
给定一颗 \(n\) 个节点的树,结点标号从 \(1\) 到 \(n\) 。定义 \(dis(a,b)\) 表示 \(a\) 到 \(b\) 的最短距离。
有 \(m\) 个询问,每组询问包含参数 \(p_0,d_0,p_1,d_1\) ,求
数据范围 \(1\le n,m\le 10^5\)
时间限制 \(4.00\ s\)
空间限制 \(256\ MB\)