BZOJ2002 彈飛綿羊

2022-03-27 07:14:17 字數 1078 閱讀 2548

這題可以用分塊暴力做,這裡給出正解lct的**。

對於每乙個彈射器i+k相當於i的父親,大於n的全部歸到n+1上。

這樣對於修改操作就像於換了個父親,我們要記錄下上一次的父親因為在splay中父親可能會改變。

對於查詢操作就相當於把n+1mroot到根,因為你新增時會更新,不能確保n+1的位置。

而答案就是xsplay到根後左兒子的大小,因為你access操作是帶著當前splay中比他淺的點一起上去的(一開始這裡沒有想明白)

具體實現看**吧

by:大奕哥

1 #include2

using

namespace

std;

3const

int n=2e5+5;4

int size[n],c[n][2

],rev[n],fa[n],nex[n],n,m;

5bool isroot(int x)

6void pushdown(intx)7

13return;14

}15void update(int

x)16

20void rotate(int

x)21

30int

s[n];

31void splay(int

x)32

44rotate(x);45}

46return;47

}48void access(int

x)49

57return;58

}59void mroot(int

x)60

63void link(int x,int

y)64

67void cut(int x,int

y)68

71int

main()

7281 size[n+1]=1

;82 scanf("

%d",&m);

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

8495

else

96101

}102

return0;

103 }

bzoj2002 彈飛綿羊

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

BZOJ 2002 彈飛綿羊

一列n個數,a i 表示向後a i 個,問第k個數進行多少次向後跳躍會飛出去.i連向i a i 那麼我們建立乙個森林,i是i a i 的乙個子節點,如果i a i n,那麼i連向null.這樣對於節點k,問多少次飛出去,就是向上走多少個到null,也就是深度是多少,直接lct處理.注意 1.這裡的l...

bzoj2002 彈飛綿羊

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