線段樹專題:單點更新、區間求和、區間最大值、幾何應用(起重機)
線段樹基礎結構 節點 k 代表區間 [l,r],左子 2k、右子 2k+1 葉節點 l==r 儲存單元值 pushUp(k) 由子節點合併資訊(和/最大值)
UVA 565 - Pizza Anyone?:16 種配料的暴力枚舉 + 位運算優化
問題建模 16 種配料(A-P),每位朋友給出若干「必須有」或「必須無」條件。求一個配料子集滿足所有朋友至少一條條件。輸出字典序最小的方案(即二進制數最小)。
LeetCode 124 - Binary Tree Maximum Path Sum:任意路徑最大和
問題定義 給定二叉樹,路徑定義為任意節點序列,相鄰節點有父子關係,路徑至少包含一個節點,不要求經過根節點。求所有路徑節點值之和的最大值。 遞歸思路:後序遍歷
UVA 11038 - How Many O's?:區間 [a,b] 中數字 0 出現的總次數
問題轉化 求 count(b) - count(a-1),其中 count(x) 為 0 ~ x 中 0 的總個數(注意:0 本身含 1 個 0)。 逐位計數
POJ 2456 - Aggressive Cows:二分答案最大化最小距離
問題模型 在一條線上有 N 個牛棚(座標已排序),需安置 C 頭牛,使任意兩牛之間的最小距離盡可能大。經典「最大化最小值」問題,適用二分答案。 二分邊界與判定
UVA 11645 - Bits:數位 DP 計算 0~n 二進制中連續 "11" 的總數
問題重述 給定 n (≤ 10¹⁸),求所有整數 0 ~ n 的二進制表示中,子串 11 出現的總次數。答案可能超過 64 位整數範圍。 解題思路:逐位貢獻法
C++ Primer 學習筆記:面向對象程式設計——定義基類與派生類(續)
虛函數與其他成員函數的交互 在 C++ 中,virtual 關鍵字賦予成員函數多態行為,但其與其他語言特性(如靜態成員、內聯函數、建構子/解構子)結合時有嚴格限
POJ 2002:利用雜湊表高效求解平面點集中的正方形數量
問題描述 給定二維平面上 n 個互不相同的點(1 ≤ n ≤ 1000,座標絕對值 < 20000),求能由這些點為頂點組成的正方形總數。輸入包含多組測試資料,
UNIX 網絡編程:進程間鎖(二)——信號量實現互斥鎖與讀寫鎖
信號量 API 回顧 0則-1,否則阻塞 int sem_trywait(sem_t* sem); // 非阻塞 P int sem_post(sem_t* s
C++ 異常機制演進史:設計初衷、RAII 誕生與最佳實踐
異常設計假定 Bjarne Stroustrup 闡述異常設計基於四點假定: 主要用於**錯誤處理**而非控制流。 異常處理代碼**遠少於**正常函數定義。
std::bind 實現原理深度解析:佔位符、元組展開與調用器
bind 核心思想 **延遲調用**:綁定可調用對象與部分參數(含佔位符 `_1`, `_2`...),返回一個函數對象,稍後用實際參數替換佔位符並調用。 關
鄰接表有向圖 C++ 實現:構建、遍歷與數據結構設計
鄰接表結構 每個頂點維護一條單鏈表,存儲**出邊**指向的頂點索引。適用於稀疏圖(邊數遠小於頂點數平方)。 核心數據結構 #define MAX 100 c
C++ 宏與內聯函數深度對比:原理、優缺點與最佳實踐
宏定義機制與特性 預處理器文本替換 宏在預處理階段由預處理器進行純文本替換,編譯器完全不可見宏的存在。例如: #define SQUARE(x) ((x)*(x
C++ 拷貝構造函數完全指南:淺拷貝、深拷貝、禁用拷貝與現代替代
拷貝構造函數定義 形式:`ClassName(const ClassName&)`。用於**用同類型已初始化對象初始化新對象**。調用時機: 以值傳遞參數進入
C++ 分數類實現:運算符重載、最大公約數約分與輸入輸出
設計目標 實現分數類 `Fraction`,支援加減乘除、自動約分、格式化輸出(負號處理、整數顯示)、流輸入輸出。 核心組件 最大公約數(輾轉相除法) in