出题人真疯了?????笔试题又出数据结构,上次默写HLD这次默写主席树是吧????t1贪心,t2dp,都算简单题吧,写的很顺。t3 求一个数组有多少子区间,使得区间端点和大于区间最大值,n1e5,值域1e6,262mb!!!!!!!考虑在笛卡尔树上做,那么就是在每个节点上求有多少跨越最大值的区间且区间端点的和大于最大值一个做法是考虑这个最大值把区间分成两部分,枚举小的那部分,设枚举到的为x,查询大的那部分有多少满足值大于max-x,这个显然可以直接上主席树做,枚举的复杂度于在笛卡尔树上枚举小的子树(其实不太等价,但是差不多就是这个意思),复杂度等于树上启发式合并,总体时间O(nlog^2),空间O(nlogn)然后坑点来了,首先上面那个枚举其实有一点conner case,不太好写,其次这个空间其实是开不下1e6的主席树的,你需要完全动态开点,初始树都不建来卡一下常,或者写离散化赛时被卡mle了,没调完。贵司是真的只招火箭毛毛虫高手吗????upd:和队友聊了下,队友说可以先递归大子树,在再这个节点上做操作,这样就不需要做主席树的复杂操作了,可以直接上普通线段树/树状数组或者pbds::tree,不会mle