HDU6579系列題解

2021-09-25 13:16:52 字數 1979 閱讀 3532

題目鏈結

題目大意:

給你乙個長度為n的數列,有m次操作,操作有兩種:

在數列末尾插入乙個數

查詢區間的子集異或最大值

\le≤ 5e5,m ≤

\le≤ 5e5,所有數值域[0, 2

302^

230]。

難度:ag

分析:線性基可以處理的操作是:

在數列末尾插入乙個數

查詢全域性的子集異或最大值

由於線性基的長度很短,因此我們可以將數列所有字首的線性基儲存下來。1到x的線性基可以由1到x-1的線性基通過插入a[x]來求得,這樣,我們就可以查詢字首區間的子集異或最大值。現在問題的關鍵在於,查詢區間 [l, r] 時,如何避免 [1, l-1] 的干擾。

考慮線性基的插入過程,如果線性基當前位上已經有值,我們就不能把待插入的值放入這一位,因此線性基上每一位的數,都是對應位上在原數列最左側的數字。現在我們改變策略,使得線性基上每一位的數,都變成對應位上在原數列最右側的數字。實現這個策略的方法是:我們額外儲存線性基上每一位數在原數列中的位置,插入的時候,如果對應位上的數在原數列中更靠左,就用待插入的數和它交換。基於這種策略,我們在查詢區間 [l, r] 時,可以在區間 [1, r] 對應的線性基中查詢,對於線性基上每一位的數,如果它在原陣列**現的位置比 l 更靠右,就考慮它對答案的貢獻,否則直接跳過這一位。

這個做法的正確性也很顯然,通過改變策略,使線性基上每一位數變成對應位上在原數列最右側的數字,可以看成線性基插入數字的順序變反,完全不影響線性基的性質。同時,將線性基上所有在原陣列中的位置比 x 更靠左的數字刪除,可以視為區間 [1, l-1] 的數字還沒有被插入線性基。

複雜度:o((n + m) logx),n為初始數列長度,m為操作次數,x為值域大小。

**:

# include

# define maxn 1000005

# define maxm 35

using

namespace std;

struct lb

void

add(

int x)

for(

int i =

31; i >=0;

--i)

if(x >> i)

else

x ^= a[n]

[i];}}

}int

query

(int l,

int r)};

lb b;

intmain()

int lastans =

0, opt, x, y;

for(

int i =

0; i < m;

++i)

else

b.add(x ^ lastans);}

}return0;

}

擴充套件1:

給你乙個數列,有兩種操作:

在數列末尾插入乙個數

查詢某個字首區間的子集異或最大值

原題的弱化版,從原題的解法中,我們應該學到此題的兩種解法。

第一種就是,我們儲存該數列的所有字首區間的線性基,這種做法的空間複雜度較高,存在被卡空間的可能。

第二種方法是,我們只儲存乙個線性基,每次向線性基插入乙個數時,額外記錄一下插入的數在原數列的位置,查詢區間 [1, r] 的時候,對於線性基每一位上的數,如果它在原數列的位置比r更靠左,才考慮它對答案的貢獻,否則直接跳過這一位。

擴充套件2:codeforces 1100f

給你乙個數列,有兩種操作(操作可以離線):

在數列末尾插入乙個數

查詢區間的子集異或最大值

擴充套件3:洛谷 p4839

給你一排n個桶,每個桶能裝任意個數,有兩種操作:

往某個桶中放入乙個數

查詢乙個區間內所有桶中數字的子集異或最大值

這個題並沒有什麼很好的做法,只能用線段樹維護線性基,時間複雜度o(m * logn * log2

^22x),n為數列長度,m為操作次數,x為值域。

HDU6579 區間線性基

顯然有乙個線段樹套線性基的做法,但肯定會t飛 於是我們考慮字首和的思想維護,p i j p i j p i j 表示以i ii為右端點,1 11為左端點的線性基的第j jj位,但是我們如果直接按順序插入數的話,那麼顯然左邊的數優先順序高於右邊的數,我們考慮如何使右邊的數的優先順序高於左邊 可能不太嚴...

題解 hdu 素數判定

素數判定 題目描述 對於表示式n 2 n 41,當n在 x,y 範圍內取整數值時 包括x,y 39 xinput 輸入資料有多組,每組佔一行,由兩個整數x,y組成,當x 0,y 0時,表示輸入結束,該行不做處理。output 對於每個給定範圍內的取值,如果表示式的值都為素數,則輸出 ok 否則請輸出...

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 ...