有nn
個裝置,每個裝置會把羊往後彈a[i
]a[i
],要求支援一下操作:
這道題不說是分塊基本就沒思路了。
但是一知道是分塊就很好解了。
我們分成nn
個塊,每乙個彈射裝置維護兩個值:w[
i]w[
i],彈出這個塊之後回到哪乙個彈射裝置。s[
i]s[
i],要多少次才能彈出這個塊。
那麼對於每乙個操作:
如果是1
1操作,那麼就從點x
x開始,相當於會彈s[x
]s[x
]次到w[x
]w[x
],那麼再把w[x
]w[x
]當作x
x來繼續求。
每個塊最多經過一次,有nn
個塊,所以時間複雜度為o(n
)o(n
)如果是2
2操作,那麼就把這個塊暴力重新初始化一遍。這個塊最多有nn
個元素,時間複雜度o(n
)o(n
)總時間複雜度為o(q
n)o(
qn)
。其中q
q為詢問個數。
#include
#include
using
namespace std;
const
int n=
200100
;int n,q,t,x,y,l[n]
,r[n]
,a[n]
,w[n]
,s[n]
,pos[n]
;int
ask(
int x)
return sum;
}void
change
(int x,
int y)
intmain()
if(r[t]
for(
int i=
1;i<=t;i++
)for
(int j=r[i]
;j>=l[i]
;j--
)scanf
("%d"
,&q)
;while
(q--
)else
}return0;
}
洛谷 P3203 彈飛綿羊 分塊
題目鏈結 據說這道題要用一道叫做lct的資料結構,然而我不會。一排有n個彈簧裝置,從第 i i 個可一往後跳k i role presentation style position relative k i k i 步。分塊首先都要先從暴力開始想起 我們記錄從任意乙個點出發,下一次能跳到 這樣的話我...
洛谷P3203 彈飛綿羊 分塊
有n nn個裝置,每個裝置會把羊往後彈a i a i a i 要求支援一下操作 這道題不說是分塊基本就沒思路了。但是一知道是分塊就很好解了。我們分成n sqrt n n 個塊,每乙個彈射裝置維護兩個值 w i w i w i 彈出這個塊之後回到哪乙個彈射裝置。s i s i s i 要多少次才能彈出...
P3203 彈飛綿羊 分塊
觀察資料範圍,發現可以分塊。只需要處理每個點跳出所在塊後的位置和次數即可。目的是為了加速查詢並降低修改複雜度。對於修改,重構整個塊內資訊即可。時間複雜度正確的一批 具體實現也挺簡單。注意重構時從後往前貢獻即可。include include include include include inclu...