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