【题解】牛客挑战赛46

T1 奇怪的计算器

按顺序扫过去,把每个数抠出来,然后先把连续的异或操作算出来,然后从左到右加减即可。

时间复杂度

T2 最小的指数

暴力枚举所有的 ,算出指数min,记除去这些质因子剩下的数为

对于 ,指数一定

  • 若指数min ,显然 ,只需检验 即可。
  • 若指数min ,显然 ,只需检验 即可。
  • 若指数min ,显然 ,所以依旧只需检验 即可,注意需要满足 不是完全平方数,否则这个其实是指数min=4 。

时间复杂度 ,常数 左右。

参考代码

T3 排列

先考虑如何处理长为 ,逆序对数 的排列数。

表示长为 逆序对数为 的排列数,则考虑新加入 新增的逆序对数,

,发现第二维是连续的区间,可以前缀和优化到

回到本题,超级逆序对要求 ,我们发现唯一的困难就是无法判断 的位置关系,所以考虑新加入一维。

表示长为 超级逆序对数为 且数字 的位置在 的排列数。

转移可通过比较 的位置和 得到类似上述的 转移式,前缀和优化即可优化到

时间复杂度

空间复杂度

参考代码

T4 数列

判断区间 是否满足条件,等价于判断 中每种数出现次数差是否都是 的倍数。

因此只需要计算每个前缀的答案即可,但发现并不是特别好维护。

考虑哈希,对于数 赋一个随机哈希值 ,记 表示 出现的次数模 ,则前缀哈希值

加上 unordered_map 即可做到 ,不放心的话也可直接 map 做到

时间复杂度

参考代码

T5 反演

其中

本题即求

由于 ,所以可行的 只有 个,逐一枚举即可。

复杂度

参考代码

T6 柠檬树

的做法:

若要使 内的点两两连通,则将这些点按照 序排序后

(记为 ,满足 ),答案即为 ,其中

考虑将询问离线跑莫队

对于区间从 ,其实只有一个新的点 插入了 序列中,显然是可以用 维护的。

每次插入,不妨设 ,则 要减去相邻两边的 ,并加上两个新的

区间从 删除时类似。

的做法:

答案即为 内的点到根的链并减去 到根的链长,不难发现前面这部分可以用 简单维护,即可做到

存在 的做法,搬一下lxl的原话(orz lxl)

直接启发式合并一下,维护子树和子树补的两两极近匹配,这样 个点 次查询的矩阵数点,考虑前驱后继用 维护,然后一个多叉树平衡。

因为修改 次,搞一个 深度 叉的树,就可以做到 了。

全部评论
谢楼主分享,学到很多,下次也来牛客搬原题! b:https://blog.csdn.net/pall_scall/article/details/97969403 f:https://ac.nowcoder.com/acm/problem/23058
5 回复 分享
发布于 2020-12-14 12:54
顺便谢个罪:A题在造数据的时候不小心把 strlen(s) 开到了 1.4e6 ,F题的st表只开了 $O(2^{17})$ 导致 $n>10^5$ 的数据会挂... dbq /kel
4 回复 分享
发布于 2020-12-14 10:45
F一定要维护size值吗,我觉得只要深度就好了,但是就是过不去,有没有巨巨帮忙看看的
1 回复 分享
发布于 2020-12-16 17:38
😍Alan!!!
点赞 回复 分享
发布于 2020-12-14 11:43
[l,r] 内的点到根的链的链长要怎么维护啊,我怎么怎么维护都不对
点赞 回复 分享
发布于 2020-12-14 18:33
出题人可以说一下E题第一个式子咋推的吗,d(i * j) 化成后面那两个求和号 第二行的 d(x) 应该是 h(x) 吧
点赞 回复 分享
发布于 2020-12-15 18:21

相关推荐

头像
10-16 09:58
已编辑
门头沟学院 Java
点赞 评论 收藏
分享
牛客737698141号:他们可以看到在线简历的。。。估计不合适直接就拒了
点赞 评论 收藏
分享
5 2 评论
分享
牛客网
牛客企业服务