洛谷P3203 彈飛綿羊 分塊

2021-09-02 17:30:48 字數 1413 閱讀 2294

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