動物園 樹剖 主席樹

2021-08-25 17:35:27 字數 1595 閱讀 8541

給你一棵樹,支援鏈加,和給定一條路徑x-y,假設從y走到x的權值序列是,求 ∑i

aii2

−∑ia

ii2 ∑ia

ii2−

∑iai

i2

,還有返回到之前某個版本。

題解:直接樹剖然後可持久化掉線段樹即可,維護區間∑i

ikai

,k≤2

∑ ii

kai,

k≤

2即可。

#include

#include

#include

#include

#define gc getchar()

#define lint long long

#define mod 20160501

#define n 100010

#define m 100010

#define inv2 10080251ll

#define debug(x) cerr<<#x<<"="<#define sp <<" "

#define ln inline int inn()

struct edgese[n<<1];int h[n],etop,in[n],fa[n],dfs_clock,d[n],tms[n];

int ecxs[n],scxs[n],a[n],lst[n],top[n],sz[n],son[n];

inline int add_edge(int u,int v)

int fir_dfs(int x,int f=0)

int sec_dfs(int x)

struct node

inline int init(int _c=0,int x=0)

inline node operator=(const node &n)

inline node operator+(const node &n)const

inline node operator+(int v)const

inline node operator+=(int v)

inline node operator+=(const node &n)

inline int show()

};struct segment*t[m];

inline int push_up(segment* &rt)

int build(segment* &rt,int l,int r)

int update(segment* &p,segment* &n,int s,int t,int v)

node query(segment* &rt,int s,int t,int ltr,int v=0)

inline int update(int x,int y,int v,segment* &pre,segment* &now)

if(d[x]return update(tmp,now,in[y],in[x],v),0;

}inline int query(segment* &rt,int x,int y,int c=0)

int main()

return

0;}

動物園遊記

今天早晨早早起床,去動物園遊玩,兌現兒子期盼已久的許諾。這個想法源於上次回來,準備帶他去玩,由於那天出發時間點比較晚,到達動物園的時候已經人滿為患,儘管從南門開車到東門,看看長長等待的車龍,以及異常緩慢的車輛放行,最後以到官園買玩具作為交換條件才肯折返。在這乙個多月的時間裡兒子曾多次提及去動物園,但...

小動物園系統

main.m import panda.h import elephant.h import kangaroo.h import zoo.h import admin.h int main int argc,const char argv return 0 zoo.h class zoo class...

清晨的北京動物園

今年我去動物園的次數,比往年都要多,更準確點說,比我以前去的次數加起來都要多。至於原因,大致有以下三點 我辦了一張北京公園年卡 動物園在我附近一公里內 我每天六點多就會起床 於是我幾乎每天早上都會喝上一碗豆腐腦,去動物園逛乙個半小時,然後上班。我也是最近五月份機緣巧合下才養成了這個習慣 早上跑步多累...