异或粽子
之前大假期集训的时候好像做过,但是已经忘了,可能是水过去的
做之前建议先做一下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 (nlog^2n)) 的