티스토리 뷰

백준/실버

[백준 18917번] 수열과 쿼리 38 (C++)

게임개발기원 2025. 9. 23. 00:01

문제링크 : https://www.acmicpc.net/problem/18917

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;

int M;
ll sum = 0;
ll sum_xor = 0;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    
    cin >> M;
    for(int i=0; i<M; i++)
    {
        int n, x;
        cin >> n;
        if(n==1)
        {
            cin >> x;
            sum +=x;
            sum_xor ^= x;
        }
        else if(n==2)
        {
            cin >> x;
            sum -=x;
            sum_xor ^= x;
        }
        else if(n==3)
        {
            cout << sum << "\n";
        }
        else
        {
            cout << sum_xor << "\n";
        }
    }

    return 0;
}

 

3에 대한 누적합, 4에 대한 xor 누적합 2개로 구분하여 값을 계산해준다.

xor의 경우 한번 더 xor 계산을 해주면 제거하는 효과를 가진다.

따라서 2번에서 누적합에서 값을 빼서 제거할 때, xor 누적합 경우 xor 연산을 또 해줘서 제거하면 된다.

 

3, 4번의 경우 x 값을 입력받지 않기 때문에 이를 주의해서 입력 값 처리할 필요가 있다.

만약 묶어서 n >> x를 하게 된다면 입력값이 틀어져서 각각 3번 4번 명령인데, 3번 명령과 무시되는 값 4로 계산에 오류가 생긴다.

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/10   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함