這題是cf 1100f原題,場上一堆人做出來了,然後我線段樹線性基時間也過不去,空間也過不去
看了題解後發現是個很容易的套路
我們對1...i的陣列維護乙個b[i]的字首和線性基,但是線性基中的數字,我們每一位都要記錄乙個pos[k]表示p[k]是由第pos[k]個數字填進去的,在插入的時候,我們讓k從高往低優先插入當前位置大的數字,就算當前p[i]已經有數字了,如果pos[k]《當前插入數字的id,那麼我們把p[i]和插入的x交換,因為要讓更靠右的數字盡可能插入在更高位。
這樣我們求l,r中線性基最大值,就從去b[r]中,從高到底,如果當前pos[k]>=l,那麼說明p[i]是由l-r中的數字異或出來的,那麼我們就可以考慮是否對答案res進行異或p[k]。
#include#define maxl 1000010
using namespace std;
int n,m,ans;
int a[maxl];
struct lb
inline void insert(int x,int id)
x^=p[i];
} }inline int getmax(int l)
}b[maxl];
inline void prework()
}inline void mainwork()
else
}}inline void print()
int main()
return 0;
}
hdu多校題解
給定 n 求 sum limits sum mu d frac sum frac 再令 h n sum frac 則有 g n frac sum mu d frac h frac 推導 f 和 g 的關係 f n f sum limits frac sum limits g n g f n f 2 ...
hdu6070 2017hdu多校第四場
這道題是跟code force 834d很相像的一道題,題意說的是要求區間裡面不同數的個數除區間長度的最小值,首先先想到乙個公式si ze l r r l 1 size l,r 指的是l到r區間裡有多少個不同的數。我們可以列舉每個數,對於每個數來說,如果以這個數作為新的右端點,那麼左端點到上一次出現...
HDU 5818 多校 7 模擬
題意 對棧的操作,有兩個棧 a b然後接下來n組操作包括入棧,出棧,合併棧。合併棧按入棧的時間順序進行排序。官方題解 比較簡單巧妙的乙個做法是引入乙個新的棧 c 每次合併的時候就把a和 b 合併到 c上,然後把 a 和 b都清空.pu sh還是按正常做,po p 注意當遇到要pop的棧為空時,因為題...