先簡單講一下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...