bzoj2002 彈飛綿羊 分塊orLCT

2021-07-10 02:40:34 字數 760 閱讀 3101

先簡單講一下lct做法,每個點以它的到達點為父節點(沒有到達點就連向根),結果就是深度。然後修改就是改變父親,乙個cut再乙個link就好了。

然後是分塊。每個點維護它到達它所在塊外面的點,及步數,預處理o(n)。查詢時o(n/m)。修改時只需要修改x所在塊在x前面的那些點即可,時間o(m)。因此總時間複雜度o(m*(n/m+m)+n)=o(mn^0.5+n)(取m=n^0.5)

ac**如下:

#include#include#include#include#include#define n 200005

using namespace std;

int n,m,a[n],nxt[n],len[n],blg[n],l[5005],r[5005];

int read()

return x;

}int main()

r[m]=n;

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

for (j=l[i]; j<=r[i]; j++) blg[j]=i;

for (i=n; i; i--)

else if (x>r[blg[i]])

else

} int cas=read();

while (cas--) else

else if (tmp>r[t])

else

}} }

return 0;

}

by lych

2016.2.23

BZOJ 2002 彈飛綿羊 分塊

傳送門ber 不會寫lct 分塊水過 記錄多少次能跳出自己的塊,和跳到的點是哪個 修改時更改本塊x之前的部分 統計時模擬一遍就可以了 lct題解可以看這個人 如下 include include include define n 200050 using namespace std inline i...

bzoj 2002 彈飛綿羊 分塊

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

bzoj2002 彈飛綿羊

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