「十二省联考」贰〇壹玖

异或粽子

之前大假期集训的时候好像做过,但是已经忘了,可能是水过去的

做之前建议先做一下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)\)

希望

posted @ 2021-04-01 06:35  Rubyonlу  阅读(66)  评论(1编辑  收藏  举报