luogu 模擬題 赤夜

2021-08-10 12:54:39 字數 1799 閱讀 5272

做法一:對於每乙個點的修改,順序改變一下是不會影響結果的。我們離線做,可以乙個點乙個點的修改。

(還是過不了啊,仍然t)qwq。

做法二:

我們盡量把實際的操作搞成標記,不操作,以降低複雜度。

我們用三個陣列實現。

pushup[x]表示x周圍的點對x的影響,tag[x]記錄的是x這個點操作的次數,sontag[x]表示的是x所有的兒子節點的操作次數。

那麼修改時:pu

shup

[x]+

=siz

[x] pus

hup[

x]+=

siz[

x]tag[x]+

+,so

ntag

[f[x

]]++

t ag

[x]+

+,so

ntag

[f[x

]]++

pushup[

f[x]

]+=2

(x和f

[x]都

會加一)

p us

hup[

f[x]

]+=2

(x和f

[x]都

會加一)

pushup[

f[f[

x]]]

+=1 pus

hup[

f[f[

x]]]

+=1查詢時: an

s+=p

ushu

p[x]

+2∗t

ag[f

[x]]

+tag

[f[f

[x]]

]+so

ntag

[f[x

]]−t

ag[x

] ans

+=pu

shup

[x]+

2∗ta

g[f[

x]]+

tag[

f[f[

x]]]

+son

tag[

f[x]

]−ta

g[x]

分別是自己上面操作時產生的和,父親每操作一次自己的和就會+2(父親和自己個佔1),爺爺每操作一次自己會+1(只有父親的1),加上父親的其他兒子每操作一次就會使父親+1,父親又在x周圍。

總的來說就是操作自己的貢獻+操作其他點對自己產生的貢獻。

時間複雜度o(n+m)。

需要讀入優化。

#include

#include

#include

#include

#include

#define ll long long

using

namespace

std;

const

int n=1e5+77;

int n,m,siz[n],f[n];

ll ans,pushup[n],tag[n],sontag[n];

long

long read()

return res;

}int main()

for(int x,i=1;i<=m;i++)

printf("%lld\n",ans);

return

0;}

Android夜神模擬器

android sdk雖然也自帶了模擬器,但是那速度會讓你懷疑人生,並且不穩定經常卡死異常。夜神模擬器可以說是android模擬器裡面的乙個神器。2.夜神安卓模擬器 夜神模擬器 是全新一代的安卓模擬器,與傳統安卓模擬器相比,基於android4.4.2,相容x86 amd,在效能 穩定性 相容性等方...

appium 夜神模擬器

1 安裝android sdk,配置環境變數 1 建立android home 2 sdk的platform tools和tool的路徑新增到path 變數內 這兩個目錄在你通過sdk manager安裝更新android sdk tools和android sdk platform tools之後...

模擬 玩具謎題 luogu 1563

小南有一套可愛的玩具小人,它們各有不同的職業。有一天,這些玩具小人把小南的眼鏡藏了起來。小南發現玩具小人們圍成了乙個圈,它們有的面朝圈內,有的面朝圈外。如下圖 這時singer告訴小南乙個謎題 眼鏡藏在我左數第3個玩具小人的右數第11個玩具小人的左數第22個玩具小人那裡。小南發現,這個謎題中玩具小人...