**樹狀陣列與線段樹:
題目傳送門:
在尤拉序上用樹狀陣列套權值線段樹搞事情。在進的時候加一,出去的時候減一。
從尤拉序第一位到當前點的\(l\)就是根到當前點的狀態(因為其他的路徑一進一出抵消掉了),然後你求出兩個點的\(lca\)和\(lca\)的父親減一減跑一跑就好了。
時間複雜度:\(o(nlog^2n)\)
空間複雜度:\(o(nlog^2n)\)
**如下:
#include #include using namespace std;
#define low(i) ((i)&(-(i)))
const int maxn=8e4+5;
int n,m,tot,cnt,tim;
int opt[maxn],x[maxn],y[maxn];
int f[maxn][18],l[maxn],r[maxn];
int tmp[maxn<<1],a[maxn],dep[maxn];
int now[maxn],pre[maxn*2],son[maxn*2];
int read()
void add(int a,int b)
void init()
else }}
}t;
struct treearray
}void query(int fa1,int fa2,int u,int v,int k)
else
}printf("%d\n",tmp[l]);
}
}bit;
void dfs(int fa,int u)
int lca(int u,int v)
void work()
else
}} int main()
bzoj1146 網路管理
發現是鏈上的問題,所以樹鏈剖分 發現要查詢第k大,因為第k大不支援合併,所以要二分答案 二分答案後相當於詢問一些區間內大於某數的數個數,直接線段樹套平衡樹即可 時間複雜度 o nlog n 跟 o n 有什麼區別 可以卡過 1 include2 using namespace std 3 defin...
BZOJ 1919 Ctsc2010 效能優化
題目 題意 給出兩個長度為 n 的整數序列a 0.n 1 b 0.n 1 和非負整數 c 對於兩個長度為 n的整數序列,定義 運算,結果為乙個長度為 n的整數序列,例如f g h 則有h k i j k modn f i g j 求a b b b 每一位模 n 1 的值,其中有 c 個 運算,n 1...
bzoj 2306 Ctsc2011 幸福路徑
有向圖 g有n個頂點 1,2,n,點i 的權值為 w i 現在有乙隻螞蟻,從 給定的起點 v0出發,沿著圖 g 的邊爬行。開始時,它的體力為 1。每爬過一條邊,它的體力都 p,而螞蟻爬到某個頂點時的幸福度,是它當時的體力與該點權值的乘積。求最大幸福值。因為當體力很小後,對答案就沒什麼影響力,所以用乙...