HNOI2010 彈飛綿羊 題解(分塊)

2022-03-26 10:28:04 字數 667 閱讀 9673

前言:其實這個題是用lct做的,但蒟蒻因為太弱了,只會分塊qaq。

題目鏈結

題目大意:給定$n$個裝置,每個裝置有彈力係數$k_i$,即在這個位置上會被彈到$i+k_i$。現在有兩個操作:1.修改某個彈力裝置的彈力係數。2.問從$x$開始,彈幾次後所處位置大於$n$。

預處理在每個點需要被彈飛的次數$sum[i]$和到達的下乙個點$out[i]$。然後進行分塊。修改的時候只需要在所在塊內的$sum$和$out$即可。

每次詢問和修改的時間複雜度都是$o(\sqrt n)$。

**:

#includeusing

namespace

std;

const

int maxn=200005

;int

out[maxn],sum[maxn],num[maxn];

intn,m,block,tot;

inline

intread()

while(isdigit(ch))

return x*f;

}inline

int getpos(int

x)inline

void work(int l,intr)}

intmain()

else

}return0;

}

hnoi2010 彈飛綿羊

題目描述很明確,現在的目標是均攤兩個操作的複雜度 現在我們已知有兩種方法 1.每次用o 1 的時間修改k值,用o n 的時間直接模擬回答詢問 2.每次修改了k值後用o n 的時間更新所有答案,o 1 時間回答 均攤這兩種操作,可以這樣做 由於只可以從前往後跳,所以可以把跳躍路徑壓縮,更新時把壓縮的部...

HNOI 2010 彈飛綿羊

要求維護乙個 n 個節點的森林,實現 m個詢問,其中包括 n 200,000m 100,000 動態樹的入門題。只需要實現ac cess 操作以及維護子樹大小si ze即可。其實我做這道題是為了找找寫動態樹的感覺,發現了不少要注意的細節。總結地說,越是基本的函式就越不能打錯,不然就要花好多的時間去查...

HNOI2010彈飛綿羊

話說我是冒著巨大的風險a這道題的 xc說不讓上其他oj 這題其實很簡單,每個點如果他能往後跳,那就只能跳到唯一的乙個,這顯然是跟森林,用lct就好,維護下size。突然變短 include include define fo i,a,b for int i a i b i define lc c x...