티스토리 뷰
문제링크 : 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로 계산에 오류가 생긴다.
'백준 > 실버' 카테고리의 다른 글
[백준 2885번] 초콜릿 식사 (C++) (0) | 2025.08.29 |
---|---|
[백준 14929번] 귀찮아 (SIB) (C++) (0) | 2025.08.17 |
[백준 3060] 욕심쟁이 돼지 (C++) (0) | 2025.08.13 |
[백준 1614번] 영식이의 손가락 (C++) (0) | 2025.08.13 |
[백준 2057번] 팩토리얼 분해 (C++) (0) | 2025.07.10 |