N×N 矩陣,找一個子矩陣使其元素和在 [K, 2K] 之間。N ≤ 2000, 元素值 ≤ 2000。
若存在元素值 ∈ [K, 2K] → 直接輸出該單元格。
否則,若存在子矩陣和 ≥ K 且所有元素 < K,則必存在子矩陣和 ∈ [K, 2K]。
證明:若和 > 2K,可逐行/列刪除直到落入區間(因單元素 < K,不會跨越區間)。
h[j]。void Monotonous_Stack(int base, int h[]) {
// 求每列左右邊界 l[i], r[i] 使 h[i] 為最小高度
// 計算矩形和 = Get_Sum(base-h[i]+1, l[i], base, r[i])
// 若 >= K 輸出並縮減
}
O(N²) — 每行單調棧 O(N),共 N 行。N=2000 時 4×10⁶ 操作,極快。