題目 : UVa Link
給一串數字,並有 2 種操作 :
- 改變陣列鍾某的數字的值
- 問一個 range 中所有數字乘起來是正數還是負數或是 0
測資
Input :
4 6
-2 6 0 -1
C 1 10
P 1 4
C 3 7
P 2 2
C 4 -5
P 1 4
5 9
1 5 -2 4 3
P 1 2
P 1 5
C 4 -5
P 1 5
P 4 5
C 3 0
P 1 5
C 4 -5
C 4 -5
Output :
0+-
+-+-0
解法
因為會有大量的查找與改變元素的值,因此使用 Segment Tree
可以先參考一下這篇 Segment Tree 教學
其中,Tree Node 要存的值是正號、負號或是 0
當要查找一個範圍中元素乘積的正負號時,若有一個元素為 0,則結果必為 0
完整程式碼
1 |
|