樹剖想法題 BZOJ3626

2022-05-31 17:39:10 字數 1665 閱讀 2400

本來是打算作為樹剖練習的最後一題的,結果一直wa。

本來以為是自己寫的太醜。

最後發現5w的資料

我開了10w的陣列

然而有乙個陣列要×2

哦,好棒棒。

1 #include2 #include3 #include4 #include5

#define foru(i,x,y) for(ll i=x;i<=y;i++)

6using

namespace

std;

7 typedef int

ll;8

const ll n=2e5;

9const ll mod=201314;10

struct edgee[2*n];

11struct nodet[10*n];

12struct

quea[n];

13ll f[n],b[n],d[n],id[n],ans[n],siz[n],son[n],top[n],head[n],

14cnt,ne,n,m,nq,q[n];

1516

bool cmp(que a,que b)

1718

void

add(ll a,ll b);head[a]=ne;20}

2122

void

dfs(ll k,ll fa,ll dep)31}

3233

void

build(ll k,ll tp)40}

4142

#define mid ((l+r)>>1)

43#define ls (k<<1)

44#define rs ls+1

4546

void

pd(ll k,ll l,ll r)

5253

void

pu(ll k,ll l,ll r)

5758

void

update(ll k,ll l,ll r,ll l,ll r,ll x)

62 update(ls,l,mid,l,r,x); update(rs,mid+1

,r,l,r,x);

63 pd(ls,l,mid);pd(rs,mid+1

,r);

64pu(k,l,r);65}

6667

ll qur(ll k,ll l,ll r,ll l,ll r)

7374 ll get

(ll x)

81return

ret;82}

8384

void

change(ll x)89}

90int

main()

97 foru(i,1

,m)102 dfs(1,0,1

);103 build(1,1

);104 sort(a+1,a+1+nq,cmp);

105 ll j=0

;106

while(!a[j+1].p)j++;

107 foru(i,1

,n)111 foru(i,1,m)printf("

%d\n

",(ans[i]+mod)%mod);

112return0;

113 }

bzoj 3626 神思維 鏈剖 線段樹

emmmm這道題的思路實在是神。雖然做過然而做過一遍還是做不出來。本來還想到了另外一種思路。不過寫完調來調去發現這個思路完全是錯的qaq要是這樣把隊友坑了那怎麼行qaq 繼續貼清華爺gconeice的題解。顯然,暴力求解的複雜度是無法承受的。考慮這樣的一種暴力,我們把 z 到根上的點全部打標記,對於...

BZOJ 3626 離線 樹鏈剖分 線段樹

思路 抄一波yousiki的 顯然,暴力求解的複雜度是無法承受的。考慮這樣的一種暴力,我們把 z 到根上的點全部打標記,對於 l 到 r 之間的點,向上搜尋到第乙個有標記的點求出它的深度統計答案。觀察到,深度其實就是上面有幾個已標記了的點 包括自身 所以,我們不妨把 z 到根的路徑上的點全部 1,對...

bzoj 3626 LCA(樹鏈剖分)

傳送門biu 考慮求lca x,y 的深度,可以把 x 到根路徑上的所有節點權值加一,再查詢 y到根路徑上的所有節點的權值和即為lc a x,y 的深度。將詢問離線,把詢問 r i ld eplc a i,z 拆成兩個詢問 r i 1d eplc a i,z 減去 l 1i 1dep lca i,z...