#LAI02. 動態字典統計(Dynamic Dictionary Statistics)
動態字典統計(Dynamic Dictionary Statistics)
題目名稱:動態字典統計(Dynamic Dictionary Statistics)
題目背景
你負責維護一個動態字典,其 鍵 與 值 均為 64 位帶號整數(範圍 ±10¹⁸)。
資料會線上(online)抵達;每個參數都以「上一筆 有輸出 查詢結果」進行 XOR 編碼。
由於鍵的數值域極大,且對查詢延遲與記憶體有嚴格限制,你必須設計一種在最壞情況下仍能把所有操作控制在 O(log N)
時間的解法,否則會被挑戰資料擊潰。
操作說明
初始字典為空。依序處理 Q
筆操作(1 ≤ Q ≤ 300 000
):
代號 | 操作 | XOR 後參數含義 |
---|---|---|
I x v |
若鍵 x 不存在則插入 (x,v) ;存在則把值更新為 v |
x = raw₁ ⊕ lastAns v = raw₂ ⊕ lastAns |
D x |
若鍵 x 存在,刪除之 |
同上(僅 1 個參數) |
C x |
輸出 嚴格小於 x 的鍵數量 |
同上 |
S x |
輸出鍵 < x 的所有值之和(若無輸出 0 ) |
|
K k |
輸出「第 k 小鍵」對應的值;若 k 超出範圍輸出 invalid |
k = raw ⊕ lastAns |
lastAns
:上一筆有輸出查詢的結果;初值 0。I
、D
不產生輸出,因此不影響lastAns
。- 所有計算須使用 64 位帶號整數。
輸入格式
Q
op1 arg1 [arg2]
op2 arg1 [arg2]
⋯
opQ …
- 只有
I
會有兩個參數(鍵、值),其餘指令一個參數。
輸出格式
對每筆 C
, S
, K
查詢,各輸出一行。K
超界時輸出 invalid
。
範例
輸入
10
I 5 40
I 3 10
C 4
S 6
K 2
I 7 25
D 5
C 10
S 10
K 3
輸出
1
50
40
2
35
invalid
C 4
:鍵 < 4 僅 3,共 1 個。S 6
:鍵 < 6 為 3, 5,其值和 10+40=50。K 2
:第 2 小鍵為 5,其值 40。- … 以此類推。
限制與評分標準
項目 | 限制 |
---|---|
時間 | 1 s |
記憶體 | 256 MB |
最大操作數 | Q = 3 × 10⁵ |
特殊資料 | 測試將包含長度達 3e5 的單調插入 / 刪除序列與隨機混合序列 |
要通過所有測試,你的程式 必須 令每次操作在最壞情況下保持 O(log N)
時間,並於記憶體上限內完成。