BZOJ4103 異或運算

2022-07-27 14:09:26 字數 1354 閱讀 4861

time limit: 20 sec  memory limit: 512 mb

給定長度為n的數列x=和長度為m的數列y=,令矩陣a中第i行第j列的值aij=xi xor  yj,每次詢問給定矩形區域i∈[u,d],j∈[l,r],找出第k大的aij。

第一行包含兩個正整數n,m,分別表示兩個數列的長度

第二行包含n個非負整數xi

第三行包含m個非負整數yj

第四行包含乙個正整數p,表示詢問次數

隨後p行,每行均包含5個正整數,用來描述一次詢問,每行包含五個正整數u,d,l,r,k,含義如題意所述。

共p行,每行包含乙個非負整數,表示此次詢問的答案。

3 31 2 4

7 6 5

31 2 1 2 2

1 2 1 3 4

2 3 2 3 465

1對於100%的資料,0<=xi,yj<2^31,

1<=u<=d<=n<=1000,

1<=l<=r<=m<=300000,

1<=k<=(d-u+1)*(r-l+1),

1<=p<=500

對n暴力,m建可持久化trie

bzoj+1,您的最佳選擇

1 #include2

using

namespace

std;

3 template inline void read(_t &_x)

10 typedef long

long

ll;11

const

int maxn = 1010;12

const

int maxm = 300010;13

const

int dep = 30;14

struct

trie t[maxm * 32

];17

intn, m, p, cnt;

18int

root[maxm], x[maxn], y[maxm];

19int query(int u, int d, int l, int r, int

k) 30

if (tot >=k)

36 res += 1

<

37 } else

43 k -=tot;44}

45}46return

res;47}

48void update(int r1, int &r2, int v, int

dep)

53int

main()

65return0;

66 }

view code

BZOJ4103 異或運算

抱佛腳 首先想到查詢第k大的異或值可以按為確定,方法類似平衡樹查第k大 然後,就跑到字首和上去死磕了 然而明明一顆可持久化trie樹就可以解決的 然後n p 32 2過了以後表示老夫怎麼這麼慢阿,於是發現別人是n p 32的,每次記下來就好,不用再跑一遍的 1 include2 using name...

異或運算 有趣的異或運算

異或運算可以看做是沒有進製的加法,按位異或運算,相同為0,不同為1。0 0 0 0 1 1 1 0 1 1 1 0 觀察運算結果我們發現,當與0做異或運算時,另一元值不變 而與1做異或運算時,另一元值值取反。根據以上異或運算的特徵,可以有以下用途,除方便直觀外,運算效能也更加優異。1 變數重置0 假...

(與運算) (或運算) (異或運算)

即 兩個運算元同為 1 的時候為1 0 0 0 1 0 1 0 1 1 1 1 1 即 兩個運算元中至少有乙個為 1 的時候為1 0 0 0 0 1 1 1 0 1 1 1 0 即 兩個運算元不同的時候為1 運算規則 1 0 0 1 即 對乙個二進位制數按位取反,即將0變1,1變0。將乙個運算物件的...