A. 簽到
通過一些分析可以發現,實際上最終的可能答案就是在所有點中選擇奇數或偶數個點使得點權異或和最大。
異或和最大可以很自然的想到線性基,然後的問題就是如何處理奇偶的限制。
考慮給每個數加上一個極大的二進制位,然後通過改變這個初始值在這一位上的數可以使得最終的最大值的奇偶性確定。
B. 樹(tree)
一眼分塊,然後直接開始碼,碼完本機跑了10s,當場就自閉了。然後卡了卡常就本機1.5s了。。
正解的做法是考慮線段樹分治,然後對於每個區間建出來虛樹更新答案。
還有一種做法是點分治,就是在分治重心考慮子樹中每個子孫的貢獻,線段樹上查詢即可。
C. 區間(interval)
可以發現是個數顏色,然後強制在線,內存極小,所以也許可以想到bitset。
考慮對於得到每個區間的bitset,一種想法是給序列分個塊,然後整塊預處理,散塊暴力合併。
發現如果預處理出任意兩個整塊直接的bitset空間就死了,然後這個區間又可以合併,所以考慮整個st表。
然後分塊大小可以簡單計算出$n/64$是最優的,然後直接暴力就行了。