PKUWC2018 Minimax 線段樹合併

2021-10-06 22:36:03 字數 3284 閱讀 7845

題意:給定一棵n

nn個點的二叉樹,葉子的權值輸入給定且互不相同,非葉子結點i

ii的權值有p

ip_i

pi​的概率為兒子結點權值最大值,1−p

i1-p_i

1−pi

​的概率為最小值。求根結點取每種值的概率。模998244353

998244353

998244

353。

n ≤3

×105

n\leq 3\times 10^5

n≤3×10

5這都能線段樹合併……覺了

設f (u

,x

)f(u,x)

f(u,x)

為u

uu點值為x

xx的概率,l,r

l,rl,

r為它的左右兒子

容易寫出

f (u

,x)=

px[f

(l,x

)∑i=

1x−1

f(r,

i)+f

(r,x

)∑i=

1x−1

f(l,

i)]+

(1−p

x)[f

(l,x

)∑i=

x+1m

f(r,

i)+f

(r,x

)∑i=

x+1m

f(l,

i)

]f(u,x)=p_x[f(l,x)\sum_^f(r,i)+f(r,x)\sum_^f(l,i)]+(1-p_x)[f(l,x)\sum_^mf(r,i)+f(r,x)\sum_^mf(l,i)]

f(u,x)

=px​

[f(l

,x)i

=1∑x

−1​f

(r,i

)+f(

r,x)

i=1∑

x−1​

f(l,

i)]+

(1−p

x​)[

f(l,

x)i=

x+1∑

m​f(

r,i)

+f(r

,x)i

=x+1

∑m​f

(l,i

)]考慮線段樹合併

設當前合併的區間是[l,

r]

[l,r]

[l,r

],在遞迴的時候順便維護兩個線段樹結點[1,

l−1]

[1,l-1]

[1,l−1

]和[r+1

,m

][r+1,m]

[r+1,m

]的和,乘到f(l

,x

)f(l,x)

f(l,x)

和f (r

,x

)f(r,x)

f(r,x)

上面,維護乙個乘法標記。

文字不太好講清楚,建議直接看**。

複雜度o(n

log⁡n)

o(n\log n)

o(nlogn)

#include

#include

#include

#include

#include

#define maxn 300005

using

namespace std;

inline

intread()

const

int mod=

998244353

;typedef

long

long ll;

inline

intqpow

(int a,

int p)

return ans;

}namespace sgt

inline

void

pushmul

(int x,

int v)

inline

void

pushdown

(int x)

}inline

intnewnode()

void

insert

(int

& x,

int l,

int r,

int k)

intmerge

(int x,

int y,

int l,

int r,

int xmul,

int ymul,

int v)

void

getans

(int x,

int l,

int r,

int*

&ans)

}using sgt::insert;

using sgt::merge;

using sgt::getans;

int rt[maxn]

,ch[maxn][2

],p[maxn]

,v[maxn]

,m;void

dfs(

int u)

int ans[maxn]

;int

main()

int t=

qpow

(10000

,mod-2)

;for

(int i=

1;i<=n;i++

)sort

(v+1

,v+m+1)

;for

(int i=

1;i<=n;i++)if

(!ch[i][0

])p[i]

=lower_bound

(v+1

,v+m+

1,p[i]

)-v;

dfs(1)

;int

* p=ans+1;

getans

(rt[1]

,1,m,p)

;int res=0;

for(

int i=

1;i<=m;i++

) res=

(res+

(ll)i*v[i]

%mod*ans[i]

%mod*ans[i]

)%mod;

printf

("%d\n"

,res)

;return0;

}

PKUWC2018 隨機遊走

loj 2542.pkuwc 2018 隨機遊走 最值反演 樹上期望dp 其實不是很難啦 min max容斥既視感 設f x 表示從x走到s中第乙個點的期望步數 f x 1 d x f fa x 1 d x f ch x 1 這個有環 利用f x a f fa x b的套路代換 得到a,b的遞推式 ...

PKUWC2018 隨機演算法

題意 給定乙個圖 n 20 定義乙個求最大獨立集的隨機化演算法 產生乙個排列,依次加入,能加入就加入 求得到最大獨立集的概率 本質就是計數題 每個點有三種狀態 考慮過且在獨立集中,考慮過未在獨立集中,未考慮 本來在集合裡的點不能知道有哪些,而且不能加入的點的排列也不好確定。乙個好的方法是 把考慮過的...

PKUWC2018 隨機演算法

題目 思博狀壓寫不出是不是沒救了呀 首先我們直接狀壓當前最大獨立集的大小顯然是不對的,因為我們的答案還和我們考慮的順序有關 我們發現最大獨立集的個數好像不是很多,可能是 o n 級別的,於是我們考慮從這個方面入手 我們求出所有的最大獨立集,考慮求出有多少種考慮順序能夠恰好得到這個最大獨立集 設當前已...