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 #include2view codeusing
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 }
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。將乙個運算物件的...