原创 [線段樹] HDU 1166 - 敵兵佈陣

線段樹第一題~ #include <stdio.h> #define lson rt << 1 #define rson rt << 1 | 1 int maxn[50005 << 2], N; void build(int l,

原创 [線段樹] HDU 1394 - Minimum Inversion Number

求題中n種序列的最小逆序數。 逆序數的概念是:滿足< ai, aj > (i < j 並且 ai > aj) 的組數。 首先求出給定序列的逆序數,可以通過線段樹來求。 利用線段樹來查詢[當前元素+1, n-1]

原创 [Codeforces] 465B - Inbox (100500)

題意: 輸入一個數字n,代表郵箱裏有n封郵件,接下來跟着n個數字0或1,0代表郵件已閱讀,1代表未閱讀。 現有3種操作: 1、進入某封郵件 2、退出某封郵件 3、進入某封郵件的時候,除了第一封郵件內都會有一個閱讀前一封的按鈕,除了最後一封

原创 [線段樹] POJ 2828 - Buy Tickets

題意: 輸入一個整數n。接下來n行分別輸入兩個整數Posi , Vali.。分別代表要插入的位置 和 插入的值。 思路: 本題比較難想,暴力會超時,倒着插入會避免移動操作,只需要用線段樹查詢空着的個數即可。 #include

原创 讀入一行由空格隔開的數字

當給你一行未知個數的數字時,需要讀字符來處理,比較麻煩。 可以用C++封裝的stringstream來處理的。 #include <stdio.h> #include <iostream> #include <sstream>

原创 輸出變量的字節表示形式

深入理解計算機系統P28提到了輸出變量的字節表示形式。 不同的處理器,有兩種排列表示規則,一種是小端法,另一種是大端法。 書中圖2-4提供的程序使用的是unsigned char 類型的指針變量。然後我試着輸出了16(int)的

原创 [Bestcoder] Valentine's Day Round 1001 - Ferries Wheel | HDU 5174

本題比賽時被hack的人好多 - -。 注意坑點: 3 2147483645 2147483646 2147483644 Answer : 1 #include <stdio.h> #include

原创 POJ 2528 - Mayor's posters

本題每次的更新區間爲[1,10000000],區間較大,但是由於更新操作最多爲10000條。從中可知數據的區間結點最多有20000個。將結點離散化後,可以節省很多空間。 離散化:把無限空間中有限的個體映射到有限的空間中去,以此提

原创 POJ 2886 - Who Gets the Most Candies?

由於模擬約瑟夫環比較費時,可以利用線段樹的查詢功能來優化。 如下圖,把一個環拆開變成一條直線,就可以查詢某段區間有多少個空位置了。 反素數經典博文:打開連接 #include <stdio.h> #inclu

原创 POJ 3468 - A Simple Problem with Integers

線段樹成段更新,更新和查詢利用延遲標記,不需要更新到葉子結點。 當要更新或查詢的路徑上遇到了延遲標記,則需要將此標記更新到子結點即可。 #include <stdio.h> #include <string.h> #de

原创 [線段樹] HDU 2795 - Billboard

輸入三個整數,h, w, n。代表 h×w 的公告板和接下來有n個公告。 接下來輸入n個公告的寬度Ki。高度都爲1。 公告的規則是儘量往最上面放置。 問這n個公告分別放置的位置是第幾行。 如果不能放置

原创 UVA 12325 - Zombie's Treasure Chest

紫書P210 例題7-11。 此題分3種情況討論: 1、S1很小,S2很大時, 直接枚舉寶物2的個數0~N/S2。 2、S1很大,S2很小時, 直接枚舉寶物1的個數0~N/S1。 3、S1很小,S2很小時,當兩種寶物體積相

原创 [最短路徑] HDU 1596 - find the safest road

此題可以利用求最短路徑的思想來解決,貪心的過程每次找最大值即可。 #include <stdio.h> #include <string.h> #include <math.h> #include <stdlib.h> #inc

原创 [最短路徑、BFS] HDU 1548 - A strange lift

題意簡述: 第一行輸入三個整數N、A、B,分別代表樓的層數,開始樓層和結束樓層。 第二行輸入N個整數,代表在當前樓層只能向上或向下移動的層數。 問從樓層A到樓層B至少需要按幾次?如果不能到達,輸出”-1”。 題

原创 [線段樹] HDU 1754 - I Hate It

更新某點的回溯過程中,把max更新即可。 #include <stdio.h> #include <algorithm> using namespace std; #define lson rt << 1 #define rson