qwb VS 去汙棒 可持續化01字典樹

2021-08-07 15:54:08 字數 2067 閱讀 2839

problem i: qwb vs 去汙棒

time limit: 2 sec memory limit: 256 mb

submit: 95 solved: 36

[submit][status][web board]

description

qwb表白學姐失敗後,鬱鬱寡歡,整天坐在太陽底下賞月。在外人看來,他每天自言自語,其實他在和自己的影子「去汙棒」聊天。

去汙棒和qwb互相出題考驗對方,去汙棒問了qwb這樣乙個問題:

現已知乙個有n個正整數的序列a[1],a[2]…a[n],接下來有m個操作

操作一共有兩種:

1.在序列末尾新增乙個數x。

2.查詢suf[p] xor x的最大值,其中xor是異或 ,l<=p<=r,

suf[t]表示從t開始的字尾的異或和,即suf[t]=a[t] xor a[t+1] xor …xor a[len],len為序列長度。

input

第一行乙個整數t(<=5),表示一共有t組資料。

每組資料第一行兩個整數n(<=200000),m(<=200000),意義如上所述。

隨後一行有n個數,表示初始序列。

隨後m行,每行表示乙個操作。

操作有兩種,1: x 表示在末尾新增乙個x,2: l r x表示查詢suf[p] xor x的最大值,其中l<= p <= r,

所有數及x不超過224 且保證所有操作合法。

output

每組測試資料的第一行輸出」case x:」,x為資料組數的標號,從1開始。

接下來,對每個操作2輸出一行答案。

sample input

1 5 5

1 2 3 4 5

2 1 3 4

1 10

1 7

2 4 4 5

2 1 5 19

sample output

case 1:

6 9

31hint

這種涉及到可持續的增添元素而且頻繁的求最值的,用脫機會比較方便。然後如果學過trie樹來處理數的異或的話,會知道,數的異或最大值,只要往異或的相反方向走就好。

對於這種持續刪減修改,明顯是可持續結構,可以保留上乙個邊界的值。

每個結點儲存的是乙個字尾和 然後利用 x^(y^k)=(x^y)^k 來得到結果。 x指的是 p[i].x y指的是字尾和。但是對於後面的操作1(在末尾增加元素),字尾和也加了進去,所以需要用異或刪掉 這個是k。

可持續化就是有這麼乙個優點,你能得到所有的區間變化的情況。

而且從中選出最優的

還是太難,即使明白原理也不想不到。

#include 

using

namespace

std;

const

int n=400010;

struct trie

;trie l[n*27];

int tot,root[n];

int suf[n],arr[n];

int ans[n];

int n,m;

struct node

p[n];

void init()

void update(int &cur,int ori,int step,int n,int v)

int find(int s,int e,int step,int n)

else

return find(l[s].nxt[t],l[e].nxt[t],step-1,n);

}int main()

for(int i=1;i<=m;i++)

else

if(p[i].ops==2)

}suf[n+1]=0;

for(int i=n;i>=1;i--)

int last=0;

int sz=0;

printf("case %d:\n", cc);

for(int i=m;i>=1;i--)

else

}for(int i=sz;i>=1;i--)

}}

可持續監測直線度測量儀持續檢測鈦棒尺寸

棒材測徑儀採用的是3台測徑儀,通過演算法計算得到直線度的尺寸,3台測徑儀選用雙路測徑儀,來實現2個方向的外徑測量,3台測徑儀,總共可以測量6組直徑資料。測量時系統根據測頭1和測頭3的測量的上 下兩個邊沿位置值擬合一條直線,位置2的測量值與該直線的偏差即為位置2的直線度誤差。上下沿的直線度誤差的平均值...

hdu2665 可持續化線段樹

a的第一道可持續化線段樹。我是看這個看懂的 可持續化線段樹,主要思想就是利用歷史資訊,減少時間和記憶體花銷。比方有兩棵線段樹,但是他們只有乙個節點資訊不同。仔細一想,在這兩顆線段樹上,對應的 l,r 節點 只有log n 個節點不同。那麼,除了不同的節點,其他節點資訊,他們完全可以共用。關於這題解法...

01Trie 可持久化01Trie學習筆記

之前一直不把trie當回事,直到今天看了篇部落格,據說01trie可以當平衡樹使?然後就學了學,發現和權值線段樹也沒什麼區別 01trie 權值線段樹的本質是一棵01trie 01trie就是把數字的二進位制位從高到低當做字串扔進trie裡 巨佬一眼就能看出,把最高位是0的當做左兒子,最高位是1的當...