P3203 HNOI2010 彈飛綿羊

2022-05-03 12:57:19 字數 1216 閱讀 5571

某天,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。

輸出格式:

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

輸入樣例#1: 複製

4

1 2 1 1

31 1

2 1 1

1 1

輸出樣例#1: 複製

2

3

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

#include#include

#include

#include

using

namespace

std;

const

int n=2e5+5

;inline

intread()

int f[n],c[n][2

],s[n];

inline

bool nroot(int

x)inline

void pushup(int

x)inline

void rotate(int

x)inline

void splay(int

x) pushup(x);

}inline

void access(int

x)int

opt;

intn,m,j,k;

intmain()

m=read();

while(m--)

else

}return0;

}

P3203 HNOI2010 彈飛綿羊

題目大意 有n個裝置,每個裝置設定初始彈力係數ki,當達到第i個裝置時,會往後彈ki步,達到第i ki個裝置,若不存在第i ki個裝置,則被彈飛。求從第i個裝置起步時,被彈幾次後會被彈飛。帶修改操作,下標0開始 分析 開始打算倒著跑一遍記錄每個位置彈飛要多少次,但是發現這樣做修改操作複雜度 為了減少...

P3203 HNOI2010 彈飛綿羊

p3203 hnoi2010 彈飛綿羊 本來以為是個水題,其實還是有思維性的 lct 上操作和模板一樣,顯然我們維護子樹大小 開始是想 link x,x val x 當 x val x n 時就不連,然後查詢 x 時就查詢右子樹大小 反例就不舉了隨手就是個反例吧反正這種辦法是錯的 正解 link x...

P3203 HNOI2010 彈飛綿羊(LCT)

p3203 hnoi2010 彈飛綿羊 lct板子 用乙個 p i 陣列維護每個點指向的下個點。每次修改時cut 1 link 1就解決了 被彈出界時新設乙個點,權為0,作為終點表示出界點。其他點點權為1。然後統計一下路徑就好辣 注意點的編號從0開始 includeinline void swap ...