BZOJ 2002 彈飛綿羊

2022-08-12 06:12:11 字數 828 閱讀 4135

一列n個數,a[i]表示向後a[i]個,問第k個數進行多少次向後跳躍會飛出去.

i連向i+a[i],那麼我們建立乙個森林,i是i+a[i]的乙個子節點,如果i+a[i]>n,那麼i連向null.這樣對於節點k,問多少次飛出去,就是向上走多少個到null,也就是深度是多少,直接lct處理.

注意:1.這裡的link並不以lct中普遍的link.普通的link是將兩個不想連的點連在一起,這樣兩棵樹也就連在了一起.這裡的link其實是改變父親節點的意思.

1 #include 2

using

namespace

std;34

const

int maxn=200000+5;5

intn,m;67

struct

node

11bool d()

12bool c()

13void setc(node* x,bool d)

14void push_up()

15 }* null,*t[maxn];

16void rot(node*x)

24void splay(node*x)

30void access(node*x)

36splay(t);37}

38void link(node* x,node*y)

42int

main()

50 scanf("

%d",&m);

51for(int i=1;i<=m;i++)

58else63}

64return0;

65 }

view code

bzoj2002 彈飛綿羊

lct裸題 給出一棵樹,有修改及詢問,修改操作為修改乙個節點的父親,詢問乙個節點到根的點數。詢問及修改前只需access一遍即可。include include include include include include define rep i,x,y for int i x i y i de...

BZOJ2002 彈飛綿羊

這題可以用分塊暴力做,這裡給出正解lct的 對於每乙個彈射器i k相當於i的父親,大於n的全部歸到n 1上。這樣對於修改操作就像於換了個父親,我們要記錄下上一次的父親因為在splay中父親可能會改變。對於查詢操作就相當於把n 1mroot到根,因為你新增時會更新,不能確保n 1的位置。而答案就是xs...

bzoj2002 彈飛綿羊

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