P3812 模板 線性基

2021-10-10 07:14:38 字數 1354 閱讀 5965

n 給定乙個長度為n

nn的序列,要從中選出若干個數,使得它們的異或值最大,輸出這個最大值

資料範圍:n≤50

n\leq 50

n≤50 sol

utio

nsolution

soluti

on線性基的異或值域和原序列的異或值域相同,考慮構造線性基,每次比較是否需要異或,這樣一定不會更劣

時間複雜度:o(n

log⁡n)

o(n\log n)

o(nlogn)co

decode

code

#include

#include

#include

#include

#define ll long long

using

namespace std;

int n;

ll a[61]

,tmp[61]

;bool ***;

inline

void

insert

(ll x)

else x^

=a[i]

;return

(void

)(***=

true);

}inline

bool

check

(ll x)

inline ll qmax

(ll res=0)

inline ll qmin()

inline ll query

(ll k,ll res=0,

int cnt=0)

if(k>=

(1ll

<

)return-1

;for

(register

int i=

0;i((k>>i)&1

) res^

=tmp[i]

;return res;

}inline ll read()

signed

main()

P3812 模板 線性基

線性基可以解決的問題 給定n個整數 數字可能重複 求在這些數中選取任意個,使得他們的異或和最大。然後這道題也是一道模板題了。什麼是線性基呢?就是乙個去求解異或和最值的問題,為什麼可以求異或和最大呢,這裡需要用到了異或的性質了。a b c則有a c b以及a b c。所以我們距離9 10 12 11這...

P3812 模板 線性基

線性基是什麼?你可以理解為將乙個序列處理完之後得到的產物,並且有如下性質 1.原序列裡面的任意乙個數都可以由線性基裡面的一些數異或得到。2.線性基裡面的任意一些數異或起來都不能得到0 3.線性基裡面的數的個數唯一,並且在保持性質一的前提下,數的個數是最少的 因此,線性基可以計算一段序列中異或和最大,...

P3812 模板 線性基

p3812 模板 線性基 給定n個整數 數字可能重複 求在這些數中選取任意個,使得他們的異或和最大 把所有數insert進入線性基,把線性基中所有元素xor起來 ans include typedef long long ll using namespace std inline int read ...