洛谷P3203 彈飛綿羊 分塊

2022-09-03 04:03:08 字數 1180 閱讀 8383

有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...