「十二省联考」贰〇壹玖
异或粽子
之前大假期集训的时候好像做过,但是已经忘了,可能是水过去的
做之前建议先做一下NOI2010超级钢琴,跟这道题的思路是一样的
要求的是这若干个区间贡献的前 \(k\) 大,不妨枚举每一个左端点,用 \(RMQ\) (超级钢琴) 或者可持久化 \(01Trie\) (异或粽子)维护出贡献最大的右端点,放到一个大根堆里,堆里每个元素 \(Max(i,l,r)\) 表示以 \(i\) 为左端点,右端点在 \([l,r]\) 的最大贡献
每次取出堆顶元素 \(Max(i,l,r)\),并求出最大贡献的位置 \(t\),更新答案,并将 \(Max(i,l,t-1)\) 和 \(Max(i,t+1,r)\) 放入堆里
比较新颖的思路,如果求若干个区间前 \(k\) 大时,没准会用到
字符串问题
骗分过样例
皮配
春节十二响
应该算是这套题里面最简单的了吧,但我还是没有想到正解
对于每个节点开一个优先队列,直接 \(DFS\),走到一个节点 \(u\),将它的所有儿子贪心地合并,最后再把自己的值 \(push\) 进去
不过合并的时候要启发式合并,把小的并到大的里面,复杂度是 \(\Theta (n\log^2n)\) 的