原创 Aizu 2677 Breadth-First Search by Foxpower(LCA + BFS)

題目鏈接 題目大致意思就是給出含有n節點的樹,1爲樹根。從1開始bfs搜索整棵樹,不過有順序。深度小的比大的優先, 同一深度的其優先值爲其父節點在上一層的搜索順序,如果同屬一個父節點,那麼就是節點編號小的優先。然後求出路徑

原创 spoj DQUERY - D-query(區間不同數的個數 主席樹 or BIT)

題目鏈接 給出含有n個數字的序列,每次問區間[l,r]不同數的個數。 可以用主席樹也可以用樹狀數組,做法都是同一個原理。從左往右掃一遍,記錄每個數上一次出現的位置。當掃到i位置時, 把a[i]上一次出現的位置-1,i

原创 Lightoj1267 Points in Rectangle (II)(排序+樹狀數組)

題意 二維平面上給出p個點,然後q次訊問。每次訊問一個矩形內有多少個點落於裏面,包涵邊界。 思路 容易想到二維樹狀數組,但是空間炸了。可以降維處理,去掉x這一維。離散化y值,把所有點放在一起排序,每個點還有其編號、離散化後的y值

原创 codeforces 703D Mishka and Interesting sum (樹狀數組區間異或)

題意 給出一個有n個元素的數組a[...], 1 <= a[i] <= 10^9,(n,m <= 10^6)。m次訊問區間[l,r]見出現了偶次的數的異或值。 思路 可以先求出1到i的異或值sum[i] = sum[i - 1]

原创 UVALive 7148 LRIP(樹分治+STL)

題目鏈接 題目大意:給出一棵樹有1≤n≤105 個節點,每個節點有個權值1≤ai≤105 ,求一個由節點構成的 最長權值不降連續子串,且串的最大值和最小值的差diff≤D,1≤D≤105 ,樣例數T≤10 。 思路:

原创 poj2104 K-th Number(靜態區間k大,主席樹)

主席樹 給出一個有n個元素的數列,每次問區間[a, b]間第c小的數是哪個。 #include <iostream> #include <algorithm> #include <cstdio> #include <cstri

原创 Lightoj1187 Lining up Students(樹狀數組)

題意 有n個人,每個人有不同的身高,n個人站成一條線,每個人說出左邊比自己高的人數,問最左邊的人是第幾高的。 思路 可以從最右邊開始做,比如n = 10, a[n]=2,說明左邊比他高的有5人,那麼b[n] = 8;a[n-1]

原创 lightoj1054 Efficient Pseudo Code(歐拉函數+Divisor function)

題目 求nm 所有約數的和在mod 1e9+7 的結果; 思路 數學知識點 n可以寫成 n=px11∗px22∗... ,那麼nm=pm∗x11∗pm∗x22... 這樣就可以用下面這個公式求解了,具體數學看上面的鏈接,

原创 poj3481 Double Queue(set模擬or splay)

題目鏈接 題目意思明確。可以用兩個set來模擬,一個大的優先,一個小的優先,同時刪除、同時加入。 struct item1 { int k, p; item1() {} item1(int k, int p)

原创 LightOJ 1061 N Queen Again(搜索+狀壓DP)

題目 給出一張8*8的圖,上面有8個皇后,現在每次只能移動一個皇后往同一個方向走任意步,總共有8個方向;問最少需要多少步使得所有皇后相互不會攻擊對方? 思路 單純的暴搜是不行的,時空都會炸。 假如我們知道最終每個皇后應該在的位

原创 LightOJ 1062 Crossed Ladders(二分)

int main(int argc, const char * argv[]) { int kase;cin >> kase; while(kase--) { double x, y, c;cin

原创 考研數據結構----MaxHeap

原理 這裏我們建立的是最大堆,用完全二叉樹來表示這個堆; 1. 堆頂比兩棵子樹中的任何元素都要大; 2. 每棵子樹同樣滿足這個條件; 即根是樹中最大值,每棵子樹的根是子樹中的最大值 所以我們在構造的時候要先從最小的子樹開

原创 LightOJ 1057 Collecting Gold(狀壓DP)

題目 n∗m,(n,m)<(20,20) 的格子圖上有一個人,和不超過15個的金礦;求這個人從當前位置出發獲取所有金礦然後再回到這個位置需要走的最少路程?每次只能往鄰近的四個方向走; 思路 因爲沒有障礙物,所以算兩個格子間的距離很方

原创 lightoj1037 狀壓DP(入門級)

題意 簡單 思路 dp[sta]表示狀態爲sta時需要打的最少次數,dp[0] = 0; /***************************************** Author :Crazy_AC(James

原创 AOE關鍵路徑

時間發生的先後順序存在一定時間上的限制,時間A必須在其前驅活動發生完之後才能發生; 邊:表示活動的持續時間,兩個事件之間必須先進行相應的活動時間; 點:表示事件 四個關鍵屬性 Ve[i]:表示事件i發生的