HDU 多校第一場 Operation(線性基)

2022-07-26 11:36:13 字數 841 閱讀 6496

題意大概是求l-r區間異或最大值,很明顯是線性基,題中會有兩個操作,乙個是查詢l-r之間的異或最大值,另乙個是對於在當前陣列後加入乙個值,題意為了防止離線求解,操作的值特意加上了異或上乙個ans的條件

思路:通過對於線性基的性質,我們可以維護字首線性基,儲存每個元素的位置,在加入base[i]裡時,如果當前有值,在常規線性基處理的基礎上,將當前i位置所處的元素位置與當前加入元素的位置,進行比較,將位置較小的傳到下面。求解答案時,需要列舉當前線性基位置是否滿足大於l,然後進行常規求極值的操作。

思路正確性說明:通過對於l-r的異或最大值,我們可以知道,如果盡量儲存加入元素位置最大的,則對於線性基的每一位,與它異或過的線性基更高位置上的數字肯定都出現在它右側(否則它就會被插入在那個位置了)。

**:

#includeusing

namespace

std;

const

int maxn=1e6+7

;int

base[maxn][35

];int ti[maxn][35

];int

a[maxn];

void inse(int x,int

pos)

if(mm>ti[pos][i])

x^=base

[pos][i];}}

}int

main()

//for(int i=1;i<=n;i++)

//int ans=0

;

while(m--)

}printf(

"%d\n

",ans);

}else}}

}

view code

hdu 6299 多校第一場

題意 給出一些字串,重新組合,使括號的匹配數量最多 這道題場上沒能出,當時看了一眼,關於括號的,以為是個dp,就沒有再去做這道題。這道題事實上是個貪心,先把已經匹配好的括號數量統計出來。剩下的括號往兩邊堆,右括號往左邊堆,左括號往右邊堆。然後就是排序。左括號比右括號多的這種情況肯定要排在右括號比左括...

HDU6299(2018多校第一場)

bryce1010模板 兩個字串的排序可以分成四種情況 1 str1左少右多 vs str2 左多右少 str2排在str1前面 2 str1 左多右少 vs str2 左少右多 str1排在str2前面 3 str1 左少右多 vs str2 左少右多 按左括號的數量排序 4 其他情況按右括號的數...

2019HDU多校第一場

1002.operation 傳送 題意 給定乙個長度為 n 的數列,m 次操作,每次操作如下 0 l r 查詢區間 l,r 內若干個數的最大異或和。1 x 給數列末尾新增乙個數 x 資料範圍 1 n,m 5e5,1 a i 2 分析 開始直接考慮用線段樹維護區間線性基的並,然後每次查詢求區間線性基...