P3203 HNOI2010 彈飛綿羊

2021-09-24 09:56:12 字數 795 閱讀 6807

題目大意:有n個裝置,每個裝置設定初始彈力係數ki,當達到第i個裝置時,會往後彈ki步,達到第i+ki個裝置,若不存在第i+ki個裝置,則被彈飛。求從第i個裝置起步時,被彈幾次後會被彈飛。帶修改操作,下標0開始

分析:開始打算倒著跑一遍記錄每個位置彈飛要多少次,但是發現這樣做修改操作複雜度**.

為了減少修改複雜度我們可以用分塊的思想,將其分成n

\sqrt n

n​塊,修改時只要對乙個塊進行操作.

下面是**:

#include

#define in(b) scanf("%d",&b)

using namespace std;

const

int n=

3e5+10;

int num,bel[n]

,l[n]

,r[n]

,len,a[n]

,to[n]

,step[n]

;void

update

(int i)

//修改塊}}

void

build

(int n)

//構造塊

for(

int i=

1;i<=num;i++)}

intquery

(int x,

int n)

//查詢答案

return ans;

}int

main()

else

}return0;

}/**/

P3203 HNOI2010 彈飛綿羊

某天,lostmonkey發明了一種超級彈力裝置,為了在他的綿羊朋友面前顯擺,他邀請小綿羊一起玩個遊戲。遊戲一開始,lostmonkey在地上沿著一條直線擺上n個裝置,每個裝置設定初始彈力係數ki,當綿羊達到第i個裝置時,它會往後彈ki步,達到第i ki個裝置,若不存在第i ki個裝置,則綿羊被彈飛...

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 ...