세그먼트 트리와 비트셋을 활용한 쿼리 문제 해결 (Codeforces Round #538 Div.2 F)

문제 개요 주어진 배열에서 구간 곱과 그 결과에 대한 오일러 피 함수 값을 계산하는 문제입니다. 핵심 아이디어는 오일러 피 함수의 성질과 300 이하의 소수가 62개뿐이라는 점을 활용하는 것입니다. 수학적 배경 구간 [l, r]의 곱을 X라고 할 때, X를 소인수분해하면 다음과 같습니다: X = ∏ p_i^{c_i} (i = 1 to n) 오일러 피 함수는 곱셈적 함수이므로: φ(X) = φ(∏ ...

6월 29일 00:36에 게시됨

알고리즘 디버깅 노트: 실수에서 배우는 최적화

경험을 통해 배운 디버깅 사례들을 정리합니다. 비슷한 실수를 반복하지 않기 위한 기록입니다. 위상 정렬: 인덱스 실수 원본 코드: while (front < rear) { int cur = queue[front++]; for (int idx = adj[cur]; idx; idx = nxt[idx]) { int nxtNode = to[idx]; // 정상 indeg[nxtNode]--; if (indeg[nxtNode] == 0) { ...

6월 25일 21:08에 게시됨

알고리즘 문제 해결을 위한 표준 템플릿 라이브러리

알고리즘 경진대회 참가자들은 다양한 알고리즘과 자료구조를 숙지하고 있어야 하며, 이를 효율적으로 구현하기 위해 여러 템플릿을 정리해두는 것이 중요하다. 코드 작성 시 주의사항 전역 변수 사용은 피해야 한다. 디버깅이 어렵고 코드의 가독성을 해친다. 표준 라이브러리(STL)을 적극 활용하자. 스택, 큐, 벡터 등을 직접 구현하는 것보다 안정적이다. #define in ...

5월 22일 23:09에 게시됨