[백준] 1275번 커피숍2 C++ 코드

2024. 11. 11. 17:56· 백준
목차
  1. 코드
  2. 풀이

코드

#include <iostream>
#include <algorithm>
#include <cstring>
#include <vector>
using namespace std;
typedef long long ll;

ll n, q, num[100003], x, y, a, b;
vector<ll> tree;

void init(int s, int e, int node) {
	if (s == e) {
		tree[node] = num[s];
	}
	else {
		int mid = (s + e) / 2;
		init(s, mid, node * 2);
		init(mid + 1, e, node * 2 + 1);
		tree[node] = tree[node * 2] + tree[node * 2 + 1];
	}
}

ll query(int s, int e, int l, int r, int node) {
	if (s > r || e < l) return 0;
	if (l <= s && e <= r) return tree[node];
	int mid = (s + e) / 2;
	ll left = query(s, mid, l, r, node * 2);
	ll right = query(mid + 1, e, l, r, node * 2 + 1);
	return left + right;
}

void update(int s, int e, int node, int idx, ll val) {
	if (idx > e || idx < s) return;
	if (s == e) {
		num[s] = val;
		tree[node] = val;
	}
	else {
		int mid = (s + e) / 2;
		update(s, mid, node * 2, idx, val);
		update(mid + 1, e, node * 2 + 1, idx, val);
		tree[node] = tree[node * 2] + tree[node * 2 + 1];
	}
}

void FASTIO() {
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);
}

int main() {
	FASTIO();
	cin >> n >> q;
	tree.resize(4 * n);
	for (int i = 0; i < n; i++) cin >> num[i];
	init(0, n - 1, 1);
	// x~y의 수를 구하고, a번째 수를 b로 바꿔라
	for (int i = 0; i < q; i++) {
		cin >> x >> y >> a >> b;
        // x <= y 임이 보장되지 않았음에 주의
		if (x > y) {
			int tmp = x;
			x = y;
			y = tmp;
		}
		cout << query(0, n - 1, x - 1, y - 1, 1) << '\n';
		update(0, n - 1, 1, a - 1, b);
	}
	return 0;
}

풀이

세그먼트 트리 기본 문제로 볼 수 있다. 펜윅 트리로도 해결할 수 있을 거 같아서 있다가 해결해보려고 한다. 주의할 점은 x <= y가 보장된 게 아니라는 점이다. 다른 문제 풀 때도 이를 잘 고려해서 실수하지 않도록 해야겠다.

'백준' 카테고리의 다른 글

[백준] 12999번 화려한 마을3 C++ 코드  (0) 2024.12.01
[백준] 2150번 Strongly Connected Component C++ 코드  (2) 2024.11.14
[백준] 1946번 신입 사원 C++ 코드  (0) 2024.11.11
[백준] 12899번 데이터 구조 C++ 코드  (0) 2024.11.11
[백준] 2243번 사탕상자 C++ 코드  (0) 2024.11.11
  1. 코드
  2. 풀이
'백준' 카테고리의 다른 글
  • [백준] 12999번 화려한 마을3 C++ 코드
  • [백준] 2150번 Strongly Connected Component C++ 코드
  • [백준] 1946번 신입 사원 C++ 코드
  • [백준] 12899번 데이터 구조 C++ 코드
Melon Man
Melon Man
Hello World
Melon Man
제발 CPU는 집에서 만들어 씁시다
Melon Man
전체
오늘
어제
  • 분류 전체보기 (644)
    • 직접 만들어 보기 (2)
    • 가내공업 (2)
    • HTML (0)
    • CSS (4)
    • JAVASCRIPT (51)
    • TYPESCRIPT (14)
    • NODE.JS (19)
    • REACT (7)
    • NEXT.JS (1)
    • REACT NATIVE (5)
    • REDUX (2)
    • PYTHON (17)
    • 자료구조 및 알고리즘 (35)
    • 컴퓨터 구조 (9)
    • 운영체제 (7)
    • NETWORK (3)
    • CodeUp 기본 100제 - Python (98)
    • 잡지식 (1)
    • 백준 (347)
    • SWEA (0)
    • GIT (4)
    • C (2)
    • C++ (11)
    • JAVA (2)
    • 객체지향프로그래밍 (0)
    • 정보처리기사 (1)
    • 프로그래머스_SQL (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 백준
  • 다익스트라 알고리즘
  • TypeScript
  • 파이썬
  • CodeUp
  • python
  • 알고리즘
  • 정렬
  • 초보
  • 운영체제
  • C++
  • 위상정렬
  • javascript
  • standard built-in object
  • 함수
  • BFS
  • mdn
  • Node
  • 코드업
  • React
  • 자료구조
  • 유니온 파인드
  • input
  • event
  • 입문
  • 자바스크립트
  • 입출력
  • 기초
  • 표준내장객체
  • node.js

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.3.0
Melon Man
[백준] 1275번 커피숍2 C++ 코드
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.