1. 程式人生 > >正睿 2019 省選附加賽 Day3 T2 功夫派

正睿 2019 省選附加賽 Day3 T2 功夫派

對於每一種數字,把它離散化成一個隨機的數字。
考慮用異或來解決這個問題。
因為異或具有一個性質,異或奇數次為原數,偶數次為0。
考慮如何去判斷一個區間合法。
如果把這個區間所有數字,除了第一次出現以外的數字都異或起來,如果得到的數字為0,則說明區間合法。
從右向左列舉答案的左端點,考慮去維護區間異或和,f[i]表示以i為右端點的異或和。
當左端點向左移動一位後,發現可以令下一個位置為這個數字的位置不再是第一次出現。
因此,所有右端點在nxt右邊的位置都需要異或這個數字。
然後查詢答案的時候,去查詢從i到n有多少個數字為0。

總結一下,發現需要一個支援區間異或,區間查詢有多少個數字為x的資料結構。
這個問題可以用分塊+trie樹來解決