LG5283 異或粽子

2022-04-29 06:27:06 字數 758 閱讀 7309

共有\(n\)個數,選擇\(k\)個不同的\([l,r]\)區間,使得它們的異或和最大

$ 1 \leq n \leq 5 \times 10^5,k \leq 2 \times 10^5$

先會想到字首異或和,這樣求\([l,r]\)區間異或和只需要用\(pre[l-1]\oplus pre[r]\)以此減少運算次數。然後由於是異或,又會想到\(trie\),然後想一想,好像要用可持久化!!!完了太菜了不會。

但為了偷懶,必須思考。思考過後發現,不用可持久化,\([l,r]\)區間算\([l,r],[r,l]\)兩次,答案再除二就好了

#include using std::priority_queue;

const int n=500005;

long long trie[n<<5][2],a[n],x,ans;

int tot=1,n,k,size[n<<5];

struct note

void add(long long x)

size[u]++;

}long long query(long long x,int k){

long long ans=0;

int u=1;

for (int i=31;i>=0;i--){

int t=(x>>i)&1;

if (trie[u][t^1] && size[trie[u][t^1]]>=k)

u=trie[u][t^1],ans^=1ll《上海省選浪的太開心了,太菜了第二天\(99\)難受

洛谷P5283 異或粽子 Trie 堆

給出乙個序列,找到m mm個區間 li ri l i,r i li r i 使得這些區間的異或和最大。先做一遍字首異或,這樣問題就被轉換成找m mm對l,r l,rl,r使得 lx or r sum l xor r lxorr 盡量大。注意到a l xor a r a r xor a l a l x...

14938異或粽子

異或粽子 時間限制 2 sec 記憶體限制 512 mb 題目描述 因為考前一天發現t3是去年d班考過的題,所以liu runda決定臨時換題,他找到了十二省聯考的包,發現day1t1搬過來很合適,就開始抄題面.小粽是乙個喜歡吃粽子的好孩子。今天她在家裡自己做起了粽子。小粽面前有n 種互不相同的粽子...

十二省聯考 2019 異或粽子

題目鏈結 演算法 首先把字首異或和統計出來,再將得到的每乙個字首異或和 包括pre 0 0 塞進字典樹中,接下來有乙個貪心的思路 每當我拿著其中乙個異或和的值時,我在字典樹中盡可能找二進位制高位與其對應的位不相同的異或和,這樣兩者異或運算後,所得值最大。所以我們有了這樣乙個思路,對於每乙個pre i...