毒瘤数据结构题型

[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 【模板】普通平衡树

您需要写一种数据结构,支持以下操作:

  1. 插入 \(x\)
  2. 删除 \(x\) (若有多个 \(x\) ,则只删除1个)
  3. 查询 \(x\) 的排名 (排名定义为比当前数小的数的个数+1)
  4. 查询排名为 \(x\) 的数
  5. \(x\) 的前驱 (前驱定义为小于 \(x\) ,且最大的数)
  6. \(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 种操作:

  1. \(l\ r\ x\):将 \([l,r]\) 区间所有数加上 \(x\)
  2. \(l\ r\ x\):将 \([l,r]\) 区间所有数改成 \(x\)
  3. \(l\ r\ x\):输出将 \([l,r]\) 区间从小到大排序后的第 \(x\) 个数是多少(即求区间第 \(x\) 小,保证 \(1\le x\le r-l+1\)
  4. \(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\) 种操作:

  1. 查询一个区间内是否可以选出两个数,它们的\(x\)
  2. 查询一个区间内是否可以选出两个数,它们的\(x\)
  3. 查询一个区间内是否可以选出两个数,它们的\(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\) 种操作类型:

  1. 区间加 \([l,r]\) ,即 \(a_i+=fib[i-l+1](l\le i\le r)\)
  2. 求区间 \([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\) 次操作,两种类型:

  1. 将区间 \([l,r]\) 的值修改为 \(x\)
  2. 询问区间 \([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\) 次操作,操作有两种:

  1. 把区间 \([l,r]\) 中大于 \(x\) 的数减去 \(x\)
  2. 查询区间 \([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\) 个操作,操作有两种:

  1. 把序列中所有值为 \(x\) 的数值变为 \(y\)
  2. 找出一个位置 \(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\) 次操作:

  1. 把区间 \([l,r]\) 内所有的 \(x\) 变成 \(y\)
  2. 查询区间 \([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\) ,求

\[\sum\limits_{d(p_0,a)\le d_0} \sum\limits_{d(p_1,b)\le d_1} d(a,b) \]

数据范围 \(1\le n,m\le 10^5\)
时间限制 \(4.00\ s\)
空间限制 \(256\ MB\)

posted @ 2020-04-30 22:40  wlzhouzhuan  阅读(471)  评论(0)    收藏  举报