摘要: 题目链接 "BZOJ4103" 题解 一眼看过去是二维结构,实则未然需要树套树之类的数据结构 区域异或和,就一定是可持久化$trie$树 观察数据,$m$非常大,而$n$和$p$比较小,甚至可以每次询问都枚举$x_i$ 所以我们可以考虑对$y_i$建$trie$,每次询问取出对应区间的$x_i$在对 阅读全文
posted @ 2018-05-24 20:11 Mychael 阅读(161) 评论(0) 推荐(0) 编辑
摘要: 题目链接 "BZOJ5322" 题解 意思就是使有序的排列尽量少 就是使相同的数尽量少 然后大力贪心即可 C++ include include include include include include define REP(i,n) for (register int i = 1; i (a 阅读全文
posted @ 2018-05-24 16:52 Mychael 阅读(318) 评论(0) 推荐(0) 编辑
摘要: 题目链接 "BZOJ5323" 题解 有一些数是不能被别的数筛掉的 这些数出现最晚的位置就是该排列的$t(p)$ 所以我们只需找出所有这些数,线性筛一下即可,设有$m$个 然后枚举最后的位置 $$ans = \sum\limits_{i = m}^{n} m!(n m)!{i 1 \choose m 阅读全文
posted @ 2018-05-24 12:28 Mychael 阅读(269) 评论(0) 推荐(0) 编辑
摘要: 题目链接 "BZOJ4567" 题解 题意真是鬼畜= = 意思就是说我们应先将一个串的所有后缀都插入之后再插入这个串,产生代价为其到上一个后缀的距离 我们翻转一下串,转化为前缀,就可以建$trie$树来解决了 建好$trie$后单独取出单词节点,贪心先往子树小的节点编号即可 C++ include 阅读全文
posted @ 2018-05-24 09:50 Mychael 阅读(166) 评论(0) 推荐(0) 编辑
摘要: 题目链接 "BZOJ4569" 题解 倍增的思想很棒 题目实际上就是每次让我们合并两个区间对应位置的数,最后的答案$ans = 9 \times 10^{tot 1}$,$tot$是联通块数,因为要去前导$0$,首位不为$0$即可 如何快速合并两个区间? 倍增! 每次合并两个区间,我们就利用倍增分成 阅读全文
posted @ 2018-05-24 08:02 Mychael 阅读(161) 评论(0) 推荐(0) 编辑