【NAOI】真的是签到题吗
背景
OI不能没有签到题,就像 \(309\) 不能没有数据删除!
题目描述
有 \(T\) 组询问,每组问题如下:
是否存在 \(3\) 个长度为 \(n\) 的 \([0,n)\) 的排列 \(a,b,c\),使得 \(a_i+b_i=c_i\mod n\)。
你需要对每个询问做出回答,若可以,则输出 YES,无解则输出 NO。
\(1\le T\le 10^6,1\le n\le 10^9\)
题解
遇到取模考虑奇偶性,不要想太复杂,考虑 \(n\) 为奇数的时候直接 \(a=b=~0,1,2,3,4,…\),\(c=~{0,2,4,…,n-1,1,3,5,…}\)。
偶数发现不好写,考虑证明无解,首先去掉取模,发现两端和对 \(n\) 取模不相等,易证无解。
【NAOI】球棍模型(easy version)
题目描述
现在桃子有 \(n\) 个球和 \(n-1\) 个棍,他要给小夏做一个球棍模型。
每颗球都对应的权值 \(w\),最终桃子想让这些球棍组成一棵无根树,两棵树不同,当且仅当其边集不同。树的价值等于所有点的价值的权值的度数加上一个数的次方的乘积。形式化的,我们有这个式子:
现在,桃子想知道这个值的期望对 \(10^9+7\) 取模的结果。请你告诉她,你可千万不能撒谎。
\(n\le 10^6\)。
对于 \(50\%\) 的数据满足 \(x=0\)。
同时有 \(n=2,3,4,10,100,10^4,10^5\) 的部分分。
题解
\(prufer\) 序板子题,我们有如下式子:
直接做就完了。
【NAOI】OI不是这样的
背景
你为啥直接过啊?!😨OI不是这样!😡你应该多刷几个月,然后提升OI的好感度。👿偶尔给大题谈研究,然后在那个特殊节日时候跟知识点有特殊好感。最后在某个题目内心神秘事件中,直接解题,题目同意被做对,然后题目给看他的特殊CG啊。你怎么直接上来过了!?🤯OI里根本不是这样!😱我不接受!!😭
题目描述
给一棵树,每个点有编号,现在有一种树 \(f(l,r)\),形如把编号在 \([l,r]\) 之间的点连成的最小生成树。
然后给一些询问,形如 \(q(L_i,R_i)\)。你要回答有多少种不同的 \(f(l,r)\),其中 \(L_i\le l\le r\le R_i\)。
称 \(f\) 相同,当且仅当其包含的点集相同。
对于所有测试数据,保证:
- \(1\le n,q\le 5\times 10^5\);
- \(1\le L_i\le R_i\le n\);
- \(1\le x,y\le n\),保证输入的边构成树。
题解
考虑每种 \(f(l,r)\) 的性质,必然 \(l\) 不变的情况下 \(r\) 递增,则 \(f(l,r)\) 的树是不变小的。有点单调的感觉,所以考虑找到每种树的分界点 \((l,r)\)。这里有个结论,就是这个 \(l,r\) 一定都是最小生成树的叶子,证明显然。
然后考虑每个点作为这种 \(l\) 或者 \(r\) 的最远扩展距离。这里我们可以这么想:对于 \(l\) 来说,如果把 \(l\) 当成根,那么必须经过 \(l\) 当且仅当 \(l\) 有至少 \(2\) 个子树有点,所以我们把这个东西放到 \(dfs\) 序上就是区间最大值了,枚举子树找到第二大就是答案。从小到大扫描每个点即可,\(r\) 的做法类似。
接下来考虑计算答案,我们设每个点能拓展的左右端点为 \(L_i,R_i\),询问区间为 \(l,r\),我们要找的两个叶子从小到大为为 \(x,y\)。那么我们要求的点对满足如下限制:
考虑扫描 \(y\),用线段树维护。具体来说线段树每个节点维护一个值 \(w_i\) 表示以 \(i\) 为左端点,右端点不超过 \(y\) 的树种类。我们维护一个 \(tag_i=[R_i\ge y]\) 那么一次扫描的增加会使得 \([l_y,y]\) 中的点变为 \(w_i+tag_i\)。发现 \(tag_i\) 只会改变一次,所以可以暴力修改 \(tag_i\),询问就是求区间和,线段树上每个节点维护 \(sumw,sumtag\) 就可以了。
【NAOI】套圈游戏
背景
\(309\) 机房正在举办套圈比赛,你要来参加吗,好礼多多!
题目描述
作为 \(oier\),我们的套圈游戏与普通的版本肯定略有不同。具体来说,有很多数字排成一排形成一个序列 \(a\),此时你会得到很多个圈,一个圈能套中一个区间,而同一个位置不能被套中多遍,也至少被套中一遍。
的为了拿到奖励,你要保证你所有圈中所套中的所有数字的 \(mex\) 相同。拿到的奖励就是你套圈的个数。为了多薅数据删除的羊毛,你打算最大化你的圈数。不仅如此,你还好奇你获得这种奖励的方案数,以便你在赛场上玩出花。你很强,所以方案数只用对 \(10^9+7\) 取模就可以了。
\(1\le n\le 10^6,a_i\le 10^6\)。
同时存在 \(n=5,10,25,10^2,10^3,10^4,10^5\),和 \(a_i\le 10\) 的部分分。
题解:
这题可以做到 \(O(n)\),具体如下:
首先我们有一个性质就是所有小区间的 \(mex\) 等于原来序列的 \(mex\) 证明如下:
假设我们可以取出所有区间的 \(mex\) 都不是原区间的 \(mex\) 的一种方案,现在设原序列 \(mex=x_1\) 现在所有区间的 \(mex=x_2\)。
那么一定有一个区间既有 \(x_1\) 和 \(x_2\),所以原假设不成立。
所以所有小区间的 \(mex\) 等于原来序列的 \(mex\)。
有了这个性质之后我们看一下怎么求最大段数,这个可以贪心。
我们先求出原序列的 \(mex\) 那么判断一个区间是否合法的方法就是看这个区间有没有包含所有小于 \(mex\) 的数。
接下来我们可以用一个类似单调队列的东西维护每一个颜色的最晚出现时间。这样我们就可以求出来对于每一个点,最早满足成段的位置。
然后我们就可以贪心了,发现区间越早结束一定不劣,所以我们直接暴力跳下一个最早结束位置就可以了。
然后是第二问,我们显然可以想到一个 dp, \(f_{i,j}\) 表示从左往右递推到了第 \(i\) 个点,现在 \(i\) 点作为第 \(j\) 段的结束点的方案数。这个东西是 \(O(n^3)\) 的,可以用前缀和优化到 \(O(n^2)\)。
接下来考虑优化,我们发现有很多状态是多余的,而转移在前缀和优化后是\(O(1)\) 的。所以考虑优化状态数。
我们发现如果一个状态要对最终的答案有贡献,那么\(f_{i,j}\) 中的 \(j\) 一定为我们贪心算出来的最优区间的区间数或者最优区间数 \(-1\)。
为什么,我们来证明一下:
假如我们有一个比当前最优区间下的区间次数小 \(2\) 即以上的答案,若要对答案有贡献,则需要在后续的数中创造多余原来最优区间多 \(2\) 的区间数,这与我们最开始的贪心矛盾。
所以假设错误,我们有了上述的结论。
所以我们可以靠这一点把状态数变为只有 \(2n\) 个,而且我们依旧可以用前缀和转移。最终复杂度 \(O(n)\)。
【NAOI】 EGO
背景
要相信 浪漫 一如 初见
请笑着 向我 道别
最后这一页 就让它无言
我会在扉页 等待你续写 起点

题目描述
阿那克萨戈拉斯在如我所书中找到了这样一个情节,他觉得很有意思,于是同你分享。
旁白:
记忆的网编织出了一棵有根的大树,而 \(phila093\) 正在完成因果的回收。
每个点都有其因果的数值,而且其时刻可能发生独立的变化呢。不仅如此,某些点的因果可能是负的,也许是虚构史学家干的吧。
故事的另一位作者:
伙伴,这是命运的邂逅吗,还是久别重逢呢?好让人心跳加速啊。
现在我要将注定的史诗完成回收,我会站在这颗树的一个点上开始这一切。
具体来说呀,我要找到这颗子树里尽量多的因果并将其回收,但是呀,如果一个点的记忆被收集了,其父亲点的记忆一定要被收集呀,要不然,人家可是找不到那份珍藏的记忆的。
为了完成这个伟业,你可一定要帮助人家找到这个答案啊。
这一定是一个不同以往的浪漫故事,你也是这么想的,对吧?
形式化题意
给定一颗 \(n\) 个节点有根树,第 \(i\) 节点权值为 \(a_i\)。
在这个树上支持一种询问:
- 给定节点 \(u\) 和参数 \(x\),假如 所有节点点权加 \(x\),在这种情况下,求: 对于所有完全在 \(u\) 子树内并包含 \(u\) 的连通点集,权值之和最大可能为多少?
对于 \(30\%\) 的数据,满足 \(1\le n,m\le 10^3\),\(|a_i|,|x|\le 10^8\),保证 \(1\le u\le n\)。
对于 \(100\%\) 的数据,满足 \(1\le n,m\le 10^6\),\(|a_i|,|x|\le 10^8\),保证 \(1\le u\le n\)。
题解
我们首先考虑设当前的询问是 \(x\),然后考虑 \(O(nm)\) 的暴力 DP。
发现式子是:
然后我们考虑怎么算这个东西。
我们考虑建一个森林。对于每一个原树的状态,只对所有满足 \(f_u \ge 0\) 的点连一条连向原树上父亲的边,那么就能得到一个森林。显然我们只会不断加边。
然后我们意识到如果我们对这个森林跑刚才的 DP,只需要这样:
注意到这个式子就是加上 \(x\) 之后的子树和,其实就是这个子树不加 \(x\) 的子树和加上 \(x\) 乘上子树大小。那么我们只要能够对于每一个 \(x\) 快速求出子树形态,基本上就能快速处理这个东西了。
然后我们考虑把 \(x\) 递增排序,那么显然 \(f_u\) 也是单调递增的。
因此对于每一个点 \(\max(f_v, 0)\) 是取 \(f_v\) 还是 \(0\) 显然只会变化一次。
因此每一条边只会从 断 变成 连 一次,只要能够快速找到所有这样的边即可。
考虑维护一个 std::set,每一个点对应一个权值 \(val\) 表示 \(x\ge val\) 时这个点是取 \(f_u\) 的,
然后考虑这个 \(val\) 是什么,我们显然可以列一个方程:
因此
其中 \(sz, sum\) 分别表示子树大小和子树和。
考虑我们每连一条边,都只会改变集合中 \(\mathcal{O}(1)\) 个元素的这两个值,而且在原树上相当于一个链修改。
因此我们再加上一个单点修改区间查询的数据结构就行了。
得到复杂度 \(\mathcal{O}((n+m)\log n)\)。
【NAOI】Xaleid◆scopiX
题目背景

不知道你有没有发现一个现象,在史诗中学,大部分老师每天的穿衣都是不同的!
现在一位老师找到了机房神犇,她认为自己最近的的穿衣计划很不合理,想要花一些时间来修改这个计划。而自己要上的课又很多,晚上回家了还要做备课等工作,所以没有太多的时间换衣服,所以她认为修改次数要尽量小。
机房神犇总会帮老师解决各种各样的问题,这次他也愉快的解决了这个问问题。不仅如此,他想到了这个问题的一个变式,也轻松的写完了。
你作为史诗中学的一位 \(oier\),在翻找前辈的学习笔记时找到了这道题,请尝试解决它。
题目描述
老师有 \(m_{1}\) 件衣服,计划表为长为 \(n\) 的序列 \(a\),则 \(a_i\) 为 \([1,m_{1}]\) 中的整数,表示当天穿的是哪一件衣服。保证老师的衣服至少有两件。
你每次修改可以将 \(a_i\) 修改为 \([1,x]\)中任何一个整数。\(x\) 满足 \(x\in [m_{1},m_{2}]\) 。对于一个序列 \(a\),它的困难程度定义为:使得 \(a_1,a_2,\cdots,a_n\) 中任意相邻两个数都不同的最小操作次数。设这个值为 \(f(a,x)\)。
对于序列 \(a\),请你求出:
由于答案会很大,所以答案模 \(100000007\)。
对于 \(100\%\) 的数据,\(1\le n\le 2\times10^5\),\(2\le m_{1}\le m_{2}\le 10^9\)。
题解
直接对一个子段暴力是典题。若 \(x=2\) 序列只有可能 \(1,2\) 交替,枚举两种情况算操作次数最小值即可。对于 \(m>2\),一段长度为 \(l\) 的极长同色段最少需要操作 \(\lfloor l/2\rfloor\) 次,全加起来就是答案。
然后考虑原题,你需要对所有子段求和。对于 \(x>2\) 是简单的,原序列中的同色段只有以下四种情况:
- 作为一段前缀出现。
- 作为一段后缀出现。
- 完整出现。
- 自己把子段包含住。
都是好统计的,可以做到线性。难的是 \(x=2\)。首先你套路性将奇数位翻转,那么一个子段的操作次数就是 \(1\) 的个数与 \(2\) 的个数的最小值。设这俩为 \(c_1,c_2\)。你实际上会发现:
所以你将所有 \(2\) 替换成 \(-1\),问题转化为所有子段和的绝对值之和。前缀和一下变成任意两数差的绝对值之和,排个序做就好了。容易发现值域是 \([-n,n]\),桶排可以做到线性,没啥必要就是了。
【NAOI】 球棍模型(hard version)
题目描述
现在桃子有 \(n\) 个球和 \(n-1\) 个棍,他要给小夏做一个球棍模型。
每颗球都对应的权值 \(w\),最终桃子想让这些球棍组成一棵无根树,两棵树不同,当且仅当其边集不同。一棵树有两种价值:
第一种等于所有点的价值的权值的度数加上一个数的次方的乘积。形式化的,我们有这个式子:
第二种等于所有点的价值的权值的度数加上一个数的次方的和。形式化的,我们有这个式子:
现在,桃子有 \(q\) 个询问,每个询问如下:
先输入一个数字 \(opt\) 表示询问种类。
如果 \(opt=1\) 那么接下来会输入两个数字 \(pos,x\) 代表把 \(w_{pos}\) 改为 \(x\)。
如果 \(opt=2\) 那么接下来会输入两个数字 \(l,r\)。请告诉她 \([l,r]\) 区间中的球和 \(r-l\) 根棍组成的树的第一种值的期望对 \(10^9+7\) 取模的结果。
如果 \(opt=3\) 那么接下来会输入两个数字 \(l,r\)。请告诉她 \([l,r]\) 区间中的球和 \(r-l\) 根棍组成的树的第二种值的期望对 \(10^9+7\) 取模的结果。特殊的,此时 \(r-l+1\) 的种类数不超过 \(k\) 个(\(k\le 20\)),并会提前给出。
请你告诉她正确的答案哦,你可千万不能撒谎。
数据规模与约定
对于 \(100\%\) 的数据满足:
\(2\le n,pos,q\le 2\times 10^5,1\le opt \le 3,2\le c_{i-1}<c_i\le n,1\le k\le20,1\le a_i,x\le 2\times 10^5\)。
存在 \(n,q\le 2,3,10,20,500,10000\) 的部分分。
题解
第一个问在简单版中已经解决了,考虑下第二个问题,我们还是有如下式子
分别代表 \(opt=2\) 和 \(opt=3\) 下区间询问的答案,发现第一个可以直接维护,但是第二个没法,考虑直接预处理所有种类的第二类答案,然后就可以直接套上线段树查询了。