牛牛數數 線性基 二分

2021-10-16 02:51:17 字數 2556 閱讀 5784

保證答案在long long內。

處理完線性基之後,就可以使用其性質4:

求任意子集xor最大值: 把線性基中所有元素xor起來

求任意子集xor最小值: 等於最小的主元

查詢x是否在值域中: 如果x能插入線性基,則x不能被當前線性基xor出來

查詢第k小的值: 把k進行二進位制分解,把1對應位置的主元xor起來;注意這裡第0小就是0

求任意子集與x進行xor的最大值:從高->低貪心,若xor上a[j]能變大就xor

n

2^2n後一

個排名(

2n−1

)−第一

個大於k

的排名+

1最後乙個排名(2^-1) - 第乙個大於k的排名 + 1

最後乙個排名

(2n−

1)−第

乙個大於

k的排名+1。

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define go(i, l, r) for(int i = (l), i##end = (int)(r); i <= i##end; ++i)

#define god(i, r, l) for(int i = (r), i##end = (int)(l); i >= i##end; --i)

#define ios ios_base::sync_with_stdio(0),cin.tie(0),cout.tie(0)

#define debug_in freopen("in.txt","r",stdin)

#define debug_out freopen("out.txt","w",stdout);

#define pb push_back

#define all(x) x.begin(),x.end()

#define fs first

#define sc second

using

namespace std;

typedef

long

long ll;

typedef

unsigned

long

long ull;

typedef pair pii;

const ll maxn =

1e6+10;

const ll maxm =

1e6+10;

const ll inf_int =

1e8;

const ll inf_ll =

1e17

;template

<

class

t>

void

read

(t &x)

while

(ch>=

'0'&&ch<=

'9') s=s*

10+ch-

'0',ch=

getchar()

; x = s*w;

}template

<

classh,

class..

. t>

void

read

(h& h, t&..

. t)

voidpt(

)template

<

classh,

class..

. t>

void

pt(h h,t.

.. t)

//--------------------------------------------

int n,l =62;

ll k;

ll a[maxn]

;int zero =0;

bool

insert

(ll x)

for(

int k = j -

1;k>=

0;k--)}

for(

int k = l;k>j;k--)}

a[j]

= x;

return1;

}return0;

}ll judge

(ll mid)

mid/=2

;}return ans;

}void

solve

(int cnt)

else l = mid+1;

}if(ans >= total)

puts

("0");

else

}int

main()

solve

(cnt)

;return0;

}

二分思想(整數數列上的二分 實數域上的二分)

其實對於二分來說,我們可以分為兩類 1 整數域上的二分 2 實數域上的二分 但是總的二分的條件都是一樣的 需要序列具有單調性。1 整數域上的二分,分三步 其中mid最好是 1 而不是 2,因為 1 是向下取整,而 2是向0取整,在負數時很有用 1 通過分析具體問題,確定左右半段哪乙個是可行區間,以及...

線性查詢 二分查詢

在陣列中找出某個值a 線性查詢 二分查詢 線性查詢就是乙個個比較,找出那個值a。二分查詢是針對有序數列,找出中間值nid與a比較,mid a,從mid左邊小於mid的值中查詢,這樣依次縮小查詢空間,找到該值。線性查詢法 value 3 array 1,2,3,4,5,6,7 def ls ary,v...

線性向量 二分查詢

範圍區間 lo,hi 查詢 e 返回 下標 t 通用型別 function binarysearch t arr,t e,int lo,int hi else if arr mid e else return mid return 1 沒找到 改版 範圍區間 lo,hi 查詢 e 返回 下標 t 通...