做法一:對於每乙個點的修改,順序改變一下是不會影響結果的。我們離線做,可以乙個點乙個點的修改。
(還是過不了啊,仍然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個玩具小人那裡。小南發現,這個謎題中玩具小人...