崴的線段樹
這題水嗎?不!一點都不水(建議改紫)
第一眼沒看出來
異或有優秀的性質:
a⊕a=0b⊕a⊕a=b
考慮前綴和:
g(n)=i=1⨁nf(i)ans=g(r)⊕g(l−1)
考慮求前綴和:
觀察線段樹,發現∀1≤t≤2k−1, f(2k+2t+1)=f(2k+2t),因爲此變動只會讓左子樹多一個點,而右子樹不變
一波異或猛如虎,現在只剩
g(n)=⎩⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎧(i=1⨁⌊log2n⌋−1f2k⊕f2k+1)⊕fn,(i=1⨁⌊log2n⌋f2k⊕f2k+1),(i=1⨁⌊log2n⌋f2k⊕f2k+1)⊕fn,n=2⌊log2n⌋,n=2⌊log2n⌋+1,n>2⌊log2n⌋+1,
那,碼就完了
因爲顯然f2k=f2k−1×2+1=2k+1−1,f2k+1=2k+1+1
而對於f(n),易知遞歸fn=2dep+f2n