사용자 도구

사이트 도구


ps:problems:boj:18917

수열과 쿼리 38

ps
링크acmicpc.net/…
출처BOJ
문제 번호18917
문제명수열과 쿼리 38
레벨실버 4
분류

기초

시간복잡도O(n)
인풋사이즈n<=500,000
사용한 언어Python
제출기록30864KB / 552ms
최고기록400ms
해결날짜2022/03/23

풀이

  • 배열 원소를 모두 유지할 필요 없이, 모든 원소를 더한 값 / 모든 원소를 XOR한 값 이 두가지만 유지하고 있으면 된다.
  • 숫자를 추가할때는, 배열의 어디 위치에 추가하든 관계없이 모든 원소를 더한 값과 모든 원소를 XOR한 값에 추가하는 값을 +와 xor 해주면 되고, 마찬가지로 제거할때는 -와 xor을 처리해주면 된다.
  • 모든 쿼리를 O(1) 에 처리할수 있다. M개의 쿼리를 처리하는 총 시간 복잡도는 O(M)

코드

"""Solution code for "BOJ 18917. 수열과 쿼리 38".

- Problem link: https://www.acmicpc.net/problem/18917
- Solution link: http://www.teferi.net/ps/problems/boj/18917
"""

import sys


def main():
    M = int(sys.stdin.readline())
    all_sum = all_xor = 0
    for _ in range(M):
        cmd = sys.stdin.readline().split()
        if cmd[0] == '1':
            all_sum += int(cmd[1])
            all_xor ^= int(cmd[1])
        elif cmd[0] == '2':
            all_sum -= int(cmd[1])
            all_xor ^= int(cmd[1])
        elif cmd[0] == '3':
            print(all_sum)
        elif cmd[0] == '4':
            print(all_xor)


if __name__ == '__main__':
    main()

토론

댓글을 입력하세요:
M U O K L
 
ps/problems/boj/18917.txt · 마지막으로 수정됨: 2022/03/23 05:51 저자 teferi