首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> C++ 入門

ZOJ 2301 Color the Ball:線段樹區間塗色 + 離散化

     編輯:C++ 入門

題目大意

編號 1~2³¹-1 的球初始全黑。n 次操作將區間 [x,y] 塗白(1)或黑(0)。最後查詢最長連續白球區間,輸出其端點(長度相同取左端點最小)。

離散化處理

區間端點極大但操作數 n ≤ 4000。收集所有端點 x,y,排序去重。為保證區間連續性,對相鄰離散點若差 > 1,插入中間值(如 x[i-1]+1)。最終坐標壓縮後總點數 ≤ 8000。

線段樹區間覆蓋更新

  • 節點存 `col`:-1 表示混合,0 黑,1 白
  • 區間更新標記覆蓋,下推時將標記傳給子節點
  • 最終遍歷葉子節點,將白色區間標記到 `hash` 數組

查找最長白段

掃描 `hash` 數組,記錄連續 true 段的起止對應的原始坐標,比較長度(相同取左端點小)。注意離散坐標映射回原始值時的索引轉換(`X[i-1]` 到 `X[j-2]`)。

與 POJ 2528 關係

本題為 POJ 2528 變體,核心技術相同:離散化 + 線段樹區間賦值 + 掃描統計。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved