原创 POJ 2155 二維樹狀數組+差分

題目大意:給定一個初始時全部爲0的n*n的矩陣,然後將一個子矩陣中的全部元素取反,詢問一個元素當前是什麼 思路:將取反操作當成轉化爲操作次數,容易得到若操作次數爲偶數則爲0否則爲1.將問題轉化爲區間修改+單點查詢.對於區間修改用

原创 【bzoj1103】[POI2007]大都市meg DFS序

可以發現每次修改實際上就是對於樹的點權的修改,每次詢問就是路徑求和.利用DFS序的性質,實際上就是單點修改區間求和.對於修改(a<b) 實際上就是使b的點權值爲0 PS:因爲統計的是點權,所以答案要-1.n<=2e5,但點數有5

原创 bzoj3531[Sdoi2014]旅行(樹剖)

對每種宗教都建立線段樹,建立過程類似主席樹,在需要修改時動態建立線段樹(初始時不建立),所以空間複雜度是O(nlogn) PS:爲什麼第二份會T啊 #include<iostream> #include<cstdio> #inc

原创 bzoj1113[Poi2008]海報PLA 單調棧

很閒,做一道水題 維護一個單調遞增的棧,每次與之前有相等的就可以減少一次 #include<iostream> #include<cstdio> #include<cmath> #include<cstring> #includ

原创 bzoj1787 [Ahoi2008]Meet 緊急集合 樹上倍增

樹上給出任意三個點,找出一個點使它到三個點的距離之和最小 結論:枚舉任意兩個點的lca,求出距離取最小值 僞證一發: 首先考慮x,y兩個點的情況,顯然lca(x,y)是最小值,加入第三個點z後,可以看成a,b,已將在lca(

原创 bzoj1036: [ZJOI2008]樹的統計Count(樹剖模版)

樹剖入門題,有時間再寫lct #include<iostream> #include<cstdio> #include<cmath> #include<cstring> #include<algorithm> #define fo

原创 bzoj1977: [BeiJing2010組隊]次小生成樹 Tree 樹上倍增

求嚴格次小生成樹 用倍增記錄最小值和次小值+求lca,枚舉每一條非樹邊,然後轉移更新 PS:dfs時注意最小值和次小值的轉移 #include<iostream> #include<cstdio> #include<cmath>

原创 bzoj 4034: [HAOI2015]樹上操作(線段樹+dfs序)

操作 1 :把某個節點 x 的點權增加 a 。 操作 2 :把某個節點 x 爲根的子樹中所有點的點權都增加 a 。 操作 3 :詢問某個節點 x 到根的路徑中所有點的點權和。 用dfs序進棧+1出棧-1+線段樹區間修改,查詢

原创 Codevs1082 線段樹練習三(樹狀數組)

終於抽出時間學了一發樹狀數組的區間修改 用c[i]=a[i]−a[i−1] 很容易得到:a[i]=∑i=1ci s[i]=(i−1)⋅c[i] 那麼到n的答案爲 ans=(n−1)⋅∑i=1ci−∑i=1si #inclu

原创 bzoj2836魔法樹 樹剖

題目大意: 初始點權爲0 支持路徑修改+子樹求和 用樹剖水過去 路徑修改:區間修改即可 子樹求和:區間求和(pos[x],pos[x]+size[x]-1) PS:據說dfs序也可以做 把修改等價於x到根上路徑的修

原创 bzoj1602[Usaco2008 Oct]牧場行走(lca模版)

Lca裸題 #include<iostream> #include<cstdio> #include<cmath> #include<cstring> #include<algorithm> #define fo(i,a,b) f

原创 bzoj3343 分塊

分成n個塊,對於每個塊排序,修改時對於整塊維護一個增加值的標記.散塊暴力維護.對於詢問在整塊中二分查找,散塊暴力比較 #include<iostream> #include<cstdio> #include<cmath> #inc

原创 Zoj 2112 線段樹套Treap

樹套樹入門題 樹套樹空間複雜度分析:維護一個長度爲n的序列,線段樹的結點數一般爲4n,而Treap則是對於每一個元素(包括重複出現的)都需要一個空間,那麼第1層的所需要的空間爲(1*n),第二層爲(2*n/2)……所以其實爲O(

原创 bzoj 3043 差分

思路:考慮差分後的數列,需要將每個除1以外的數變爲0 #include<iostream> #include<cstdio> #include<cmath> #include<cstring> #include<algorithm

原创 bzoj 1112 treap

枚舉每一個區間,用treap維護中位數和子樹和更新答案 PS:treap代碼風格一變再變,從指針(太難調試+太長了)->結構體(太長了)->數組 #include<iostream> #include<cstdio> #incl