題解 彈飛綿羊 HNOI2015

2022-08-12 16:18:14 字數 2242 閱讀 9449

lct 模板題,分塊也很優秀。

分塊做法

維護每個點到第一次跳到下乙個塊時的跳躍次數,並記錄其跳到下乙個塊的第乙個點。

注意常見的分塊玄學操作 n = min(sqrt(n), 100) 和 n = sqrt(n)*1.23 。

1 #include 2 #include 3 #include 4

5using

namespace

std;67

const

int _n = 220000;8

9int

n, n, m;

10int

a[_n], f[_n], des[_n];

1112 inline int dn(int v)

1314 inline int up(int v)

1516

intmain()

1739 printf("

%d\n

", cnt);

40 } else47}

4849

return0;

50 }

view code

lct做法

1 #include 2 #include 3

4using

namespace

std;56

const

int _n = 220000;7

8 typedef long

long

ll;9

10 stacks;

11ll sum[_n], l[_n], r[_n], dad[_n], rev[_n], j[_n], w[_n];

1213 inline void update(ll x)

1415 inline bool isroot(ll x)

1617

void

zig(ll x)

1827

28void

zag(ll x)

2938

39 inline void

pushdown(ll x)

44return;45

}4647void

splay(ll x)

48 else61}

6263

return;64

}6566void

access(ll x)

6773

return;74

}7576 ll findroot(ll x)

7778

void makeroot(ll x)

7980

void cut(ll x, ll y)

8182

void link(ll x, ll y)

8384

intmain()

85 else

if (ins == 2

) 110

}111

return0;

112 }

view code

nkoj2381

p2381【hnoi2010】彈飛綿羊

時間限制 : 10000 ms   空間限制 : 265536 kb

問題描述

某天,lostmonkey發明了一種超級彈力裝置,為了在他的綿羊朋友面前顯擺,他邀請小綿羊一起玩個遊戲。遊戲一開始,lostmonkey在地上沿著一條直線擺上n個裝置,每個裝置設定初始彈力係數ki,當綿羊達到第i個裝置時,它會往後彈ki步,達到第i+ki個裝置,若不存在第i+ki個裝置,則綿羊被彈飛。綿羊想知道當它從第i個裝置起步時,被彈幾次後會被彈飛。為了使得遊戲更有趣,lostmonkey可以修改某個彈力裝置的彈力係數,任何時候彈力係數均為正整數。

輸入格式

第一行包含乙個整數n,表示地上有n個裝置,裝置的編號從0到n-1,

接下來一行有n個正整數,依次為那n個裝置的初始彈力係數。

第三行有乙個正整數m,接下來m行每行至少有兩個數i、j,若i=1,你要輸出從j出發被彈幾次後被彈飛,若i=2則還會再輸入乙個正整數k,表示第j個彈力裝置的係數被修改成k。

對於20%的資料n,m<=10000,對於100%的資料n<=200000,m<=100000

輸出格式

對於每個i=1的情況,你都要輸出乙個需要的步數,佔一行。

樣例輸入

4 1 2 1 1 

31 1

2 1 1

1 1樣例輸出23

**  hzoi

HNOI2010 彈飛綿羊 題解(分塊)

前言 其實這個題是用lct做的,但蒟蒻因為太弱了,只會分塊qaq。題目鏈結 題目大意 給定 n 個裝置,每個裝置有彈力係數 k i 即在這個位置上會被彈到 i k i 現在有兩個操作 1.修改某個彈力裝置的彈力係數。2.問從 x 開始,彈幾次後所處位置大於 n 預處理在每個點需要被彈飛的次數 sum...

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即可。其實我做這道題是為了找找寫動態樹的感覺,發現了不少要注意的細節。總結地說,越是基本的函式就越不能打錯,不然就要花好多的時間去查...