洛谷
維護乙個字首異或和\(s_i\)
對於乙個詢問操作\(l\)、\(r\)、\(x\)
就是等價於求乙個位置\(p\)(\(l\leq p \leq r)\)使得\(s_nxors_xorx\)最大
可將此問題轉化為求\(p\)使\(s_\)
\(xor\)
\(s_n xor x\)最大
先將後半部分求出然後在可持久化\(trie\)上貪心即可
#include#include#include#include#include#includeusing namespace std;
inline int gi()
const int max_n = 600005;
struct trie t[max_n * 24];
int s[max_n], rt[max_n], n, m, tot;
void insert(int i, int k, int p, int q)
int query(int o, int val, int k, int limit)
int main ()
for (int i = 1; i <= m; i++) else
} return 0;
}
P4735 最大異或和
給定乙個非負整數序列,初始長度為n。有m個操作,有以下兩種操作型別 a x 新增操作,表示在序列末尾新增乙個數x,序列的長度n 1。q l r x 詢問操作,你需要找到乙個位置p,滿足l p r,使得 a p a p 1 a n x最大,輸出最大是多少。輸入格式 第一行包含兩個整數 n,m,含義如問...
Luogu P4735 最大異或和
題目 建可持久化01trie。每次建乙個新版本把序列的每個字首和插進去。新增操作亦如此。查詢的話就看每個數字取反的一側在01trie的這個區間內是否出現過 也就是 sum 是否相等 然後跳兒子。這裡蘊含了高位貪心的思想。includeusing namespace std const int n 3...
P4735 最大異或和
題目鏈結 給定乙個非負整數序列,初始長度為n。有m個操作,有以下兩種操作型別 a x 新增操作,表示在序列末尾新增乙個數x,序列的長度n 1。q l r x 詢問操作,你需要找到乙個位置p,滿足l p r,使得 a p a p 1 a n x最大,輸出最大是多少。輸入格式 第一行包含兩個整數n,m,...