洛谷P4175 CTSC2008 網路管理

2022-08-11 07:42:13 字數 1198 閱讀 8520

portal

給出一棵\(n(n\leq8\times10^4)\)個點的帶點權的樹,進行\(m(m\leq8\times10^4)\)次操作,操作有兩種:

帶修改的可持久化線段樹。

首先對於每個節點\(u\)建立一棵線段樹記錄路徑\((u,rt)\)上的權值分布。考慮修改乙個點的權值對這些線段樹有什麼影響。當\(u\)的權值由\(val\)變為\(val'\)後,子樹\(u\)中的所有點的線段樹中都有\(cnt[val]-1,cnt[val']+1\)。

對每個點再建立一棵線段樹記錄修改。修改子樹在dfs序上相當於修改區間,差分後變為兩個單點修改。於是我們要對於這些線段樹進行單點修改,字首查詢;而這可以用樹狀陣列實現。於是我們按dfs序建立樹狀陣列套線段樹就可以維護修改帶來的影響。當我們需要求路徑\((u,rt)\)上的權值分布時,用原線段樹加上修改線段樹即可。

時間複雜度\(o(mlog^3n)\)。

//[ctsc2008]網路管理

#include #include #include using namespace std;

inline char gc()

return *s++;

}inline int read()

int t1,t2,t3,t4;

int query1(int p1,int p2,int p3,int p4,int l0,int r0,int k)

void ins2(int &p,int l0,int r0,int x,int v)

int query2(int p,int l0,int r0,int optl,int optr)

int fa[n][20],dpt[n]; int dfcnt,fr[n],to[n];

void dfs(int u)

int main()

else

{int u1=lca(u,v),v1=fa[u1][0],sum1=0;

t1=fr[u],t2=fr[v],t3=fr[u1],t4=fr[v1];

sum1+=sum[rt1[u]]+trsum(t1,1,wcnt)+sum[rt1[v]]+trsum(t2,1,wcnt);

sum1-=sum[rt1[u1]]+trsum(t3,1,wcnt)+sum[rt1[v1]]+trsum(t4,1,wcnt);

if(sum1姑且是把之前鴿了的題解都補完了...

洛谷P4602 CTSC2018 混合果汁

小 r 熱衷於做黑暗料理,尤其是混合果汁。商店裡有 n n 種果汁,編號為 0,1,cdots,n 10,1,n 1 i i 號果汁的美味度是 d idi 每公升 為 p ipi 小 r 在製作混合果汁時,還有一些特殊的規定,即在一瓶混合果汁中,i i 號果汁最多只能新增 l ili 公升。現在有 ...

洛谷P4602 CTSC2018 混合果汁

小 r 熱衷於做黑暗料理,尤其是混合果汁。商店裡有 n 種果汁,編號為 0,1,2,n 1。i 號果汁的美味度是 di,每公升 為 pi。小 r 在製作混合果汁時,還有一些特殊的規定,即在一瓶混合果汁中,i 號果汁最 多只能新增 li 公升。現在有 m 個小朋友過來找小 r 要混合果汁喝,他們都希望...

洛谷 P3197 HNOI2008 越獄

來來來,日常水一篇 滑稽 監獄有連續編號為1 n的n個房間,每個房間關押乙個犯人,有m種宗教,每個犯人可能信仰其中一種。如果相鄰房間的犯人的宗教相同,就可能發生越獄,求有多少種狀態可能發生越獄 輸入格式 輸入兩個整數m,n.1 m 10 8,1 n 10 12 輸出格式 可能越獄的狀態數,模1000...