bzoj 3211 樹狀陣列 並查集

2021-07-26 13:22:52 字數 2266 閱讀 2977

題意:

1、詢問[l,r]區間和

2、修改[l,r]區間的delta:dalta[i] -> int(sqrt(delta[i]))

思路:

1、區間求和和區間修改我們可以考慮相應的資料結構:線段樹或樹狀陣列,

這裡我們選擇樹狀陣列

2、開根號的性質:

(1)1 或 0 開根號後數值和對答案的貢獻不變,即開根號操作對0 或 1 無意義,可以直接跳過只處理delta>1

對此,用並查集維護,f[i]表示i及i右面第乙個大於1的數(注意每次賦f[i]的時候都要get_father),只對這些數進行修改

(2)delta[i]<=10^9,最多隻需要開五次根號就可以變成1

3、修改:(1)dalta[i] ->int(sqrt(delta[i]))

(2)並不能直接讓樹狀陣列c[i]->int(sqrt(c[i]))

i位置的修改對答案的影響為: -(delta[i]-int(sqrt(delta[i])))

4、注意:long long

BZOJ3211 花神遊歷各國 並查集 樹狀陣列

zhouzhendong 有n個數形成乙個序列。m次操作。有兩種,分別是 1.區間開根 取整 2.區間求和 這題做法大概我知道的有兩種,一種是線段樹,一種是並查集 樹狀陣列。兩者都基於乙個事實 任何乙個數被開根很少的次數就變成1了,然後不變了。所以我們可以暴力解決這個開根的問題。線段樹就打一下laz...

BZOJ 3211 花神遊歷各國 樹狀陣列 並查集

題目大意 給定乙個序列,提供下列操作 1.將 l.r 區間內每個數a i 變為sqrt a i 2.查詢 l,r 區間的和 根號是不支援區間修改的,於是我們選擇單點修改區間查詢的樹狀陣列,但是這樣是o n 2 的,怎麼辦?我們發現乙個數x最多開loglogx次根號就會變為1 也就是乙個int範圍內的...

BZOJ 3211 花神遊歷各國 樹狀陣列 並查集

題目大意 花神對每乙個國家有乙個喜愛程度,有的時候他會對連續的一段國家進行訪問,求他的喜愛程度的和 有的時候他會對連續的一段國家產生厭惡,喜愛程度變成sqrt x 下取整。思路 乍一看好像是rmq問題,用線段樹就可以水過,但是開根號的標記怎麼下傳?這是乙個嚴重的問題,所以我們要換乙個思路。注意到開根...