문제 링크
- http://icpc.me/12844
문제 출처
- 2016 SCCC Summer Contest F번
사용 알고리즘
- Segment Tree
시간복잡도
- (m log n)
풀이
전에 올렸던 Lazy Propagation 설명에서 덧셈 연산을 xor연산으로 바꾼 뒤 적절히 연산을 하면 되는 문제입니다.
a xor b xor b
의 결과는 a의 값과 같고, a xor 0
의 결과도 a의 값과 같다는 것을 이용해 다음과 같은 사실을 알 수 있습니다.
어떤 수 b를 짝수 번 xor하면 0을 xor한 값과 같고, 홀수 번 xor하면 b를 한 번 xor한 값과 같다.
그러므로 update를 해줄 때, tree[node] ^= diff * ((end-start+1)%2);
와 같은 식으로 할 수 있습니다.
나머지 부분은 전에 올린 Lazy Propagation 설명과 같습니다.
전체 코드
1 |
|