【题解】牛客挑战赛46
T1 奇怪的计算器
按顺序扫过去,把每个数抠出来,然后先把连续的异或操作算出来,然后从左到右加减即可。
时间复杂度
T2 最小的指数
暴力枚举所有的 ,算出指数min,记除去这些质因子剩下的数为
。
对于 ,指数一定
。
- 若指数min
,显然
,只需检验
即可。
- 若指数min
,显然
,只需检验
即可。
- 若指数min
,显然
或
,所以依旧只需检验
即可,注意需要满足
不是完全平方数,否则这个其实是指数min=4 。
时间复杂度 ,常数
左右。
T3 排列
先考虑如何处理长为 ,逆序对数
的排列数。
用 表示长为
逆序对数为
的排列数,则考虑新加入
新增的逆序对数,
有 ,发现第二维是连续的区间,可以前缀和优化到
。
回到本题,超级逆序对要求 ,我们发现唯一的困难就是无法判断
和
的位置关系,所以考虑新加入一维。
用 表示长为
超级逆序对数为
且数字
的位置在
的排列数。
转移可通过比较 的位置和
得到类似上述的
转移式,前缀和优化即可优化到
。
时间复杂度
空间复杂度
T4 数列
判断区间 是否满足条件,等价于判断
和
中每种数出现次数差是否都是
的倍数。
因此只需要计算每个前缀的答案即可,但发现并不是特别好维护。
考虑哈希,对于数 赋一个随机哈希值
,记
表示
出现的次数模
,则前缀哈希值
。
加上 unordered_map 即可做到 ,不放心的话也可直接 map 做到
。
时间复杂度 或
T5 反演
其中 ,
。
本题即求
由于 ,所以可行的
只有
个,逐一枚举即可。
复杂度
T6 柠檬树
的做法:
若要使 内的点两两连通,则将这些点按照
序排序后
(记为 ,满足
),答案即为
,其中
考虑将询问离线跑莫队。
对于区间从 到
,其实只有一个新的点
插入了
序列中,显然是可以用
维护的。
每次插入,不妨设 ,则
要减去相邻两边的
,并加上两个新的
。
区间从 到
删除时类似。
的做法:
答案即为 内的点到根的链并减去
到根的链长,不难发现前面这部分可以用
简单维护,即可做到
。
存在 的做法,搬一下lxl的原话(orz lxl)
直接启发式合并一下,维护子树和子树补的两两极近匹配,这样 个点
次查询的矩阵数点,考虑前驱后继用
维护,然后一个多叉树平衡。
因为修改 次,搞一个
深度
叉的树,就可以做到
了。