有n
nn個裝置,每個裝置會把羊往後彈a[i
]a[i]
a[i]
,要求支援一下操作:
這道題不說是分塊基本就沒思路了。
但是一知道是分塊就很好解了。
我們分成n
\sqrt n
n個塊,每乙個彈射裝置維護兩個值:
w [i
]w[i]
w[i]
,彈出這個塊之後回到哪乙個彈射裝置。
s [i
]s[i]
s[i]
,要多少次才能彈出這個塊。
那麼對於每乙個操作:
如果是1
11操作,那麼就從點x
xx開始,相當於會彈s[x
]s[x]
s[x]
次到w [x
]w[x]
w[x]
,那麼再把w[x
]w[x]
w[x]
當作x
xx來繼續求。
每個塊最多經過一次,有n
\sqrt n
n個塊,所以時間複雜度為o(n
)o(\sqrt n)
o(n
)如果是2
22操作,那麼就把這個塊暴力重新初始化一遍。這個塊最多有n
\sqrt n
n個元素,時間複雜度o(n
)o(\sqrt n)
o(n
)總時間複雜度為o(q
n)
o(q\sqrt n)
o(qn)
。其中q
qq為詢問個數。
#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 彈飛綿羊 分塊
有nn 個裝置,每個裝置會把羊往後彈a i a i 要求支援一下操作 這道題不說是分塊基本就沒思路了。但是一知道是分塊就很好解了。我們分成nn 個塊,每乙個彈射裝置維護兩個值 w i w i 彈出這個塊之後回到哪乙個彈射裝置。s i s i 要多少次才能彈出這個塊。那麼對於每乙個操作 如果是1 1操...
P3203 彈飛綿羊 分塊
觀察資料範圍,發現可以分塊。只需要處理每個點跳出所在塊後的位置和次數即可。目的是為了加速查詢並降低修改複雜度。對於修改,重構整個塊內資訊即可。時間複雜度正確的一批 具體實現也挺簡單。注意重構時從後往前貢獻即可。include include include include include inclu...