切換
舊版
前往
大廳
主題

ZeroJudge - c651: 三、區間xor(RXQ) 解題心得

Not In My Back Yard | 2019-09-01 23:05:56 | 巴幣 0 | 人氣 207

題目連結:


題目大意:
第一列給定兩正整數 N 、 Q (N 、 Q ≦ 10 ^ 6),代表有 N 個整數 ai (1 ≦ i ≦ N)以及 Q 筆詢問。

第二列有 N 個非負整數(不超過 10 ^ 9),代表 ai 們的值。

從第三列開始的 Q 列輸入,每列的輸入只可能是:
0 l r (1 ≦ l ≦ r ≦ N),代表詢問 al XOR al + 1 XOR …… ar 的結果為何?
1 x v (1 ≦ x ≦ N , 0 ≦ v ≦ 10 ^ 9),代表將 ax 的值變更為 v 。

對於每筆詢問請輸出對應的結果。



範例輸入:
5 3
16 9 1 5 3
0 1 5
1 1 5
0 1 5


範例輸出:
30
11


解題思維:
首先,輸出輸入量非常大,再加上評判系統之速度相對於題目出的時間時較為緩慢。因此需要最佳化輸出入的速度(要快過 scanf 、 printf),參見這篇

接著,因為這題是求區間 XOR 的結果,所以可以套用這題的資料結構(將其中的取最大值之操作替換成 XOR 運算即可)。BIT(Binary Indexed Tree)這個資料結構也可以完成本題。

此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。

創作回應

更多創作